栈和列队

#include <iostream>
#include <cstdio>
#include<bits/stdc++.h>
using namespace std;
//
typedef struct{
    int *base;
    int *top;
    int stacksize;
}sqstack;
void Intistack(sqstack &s){//建栈
    s.base=(int *)malloc(100*sizeof(int));
    if(!s.base) cout<<"error"<<endl;
    s.top=s.base;
    s.stacksize=100;
}
void pushstack(sqstack &s,int m){//入栈
    if(s.top-s.base>=s.stacksize){
        s.base=(int *)realloc(s.base,(s.stacksize+10)*sizeof(int));
        if(s.base) cout<<"error"<<endl;
        s.top=s.base+s.stacksize;
    }
    *s.top++=m;
}
int popstack(sqstack &s,int &m){//出栈
    if(s.top==s.base) cout<<"error"<<endl;
    m=*--s.top;
    return m;
}

//链列队
typedef struct qnode{
    int data;
    qnode *next;
}qnode,*queueptr;
typedef struct{
    queueptr first;
    queueptr last;
}linkqueue;
int initqnode(linkqueue &s){//建空队
    s.first=s.last=(queueptr)malloc(sizeof(qnode));
    if(!s.first)exit(-1);
    s.first->next=NULL;
    return 1;
}
int enqueue(linkqueue &s,int e){//
    queueptr p=(queueptr)malloc(sizeof(qnode));
    if(!p)exit(-1);
    p->data=e;
    p->next=NULL;
    s.last->next=p;
    s.last=p;
    return 1;
}
int dequeue(linkqueue &s,int &e){//
    if(s.first==s.last)return 0;
    queueptr p=s.first->next;
    e=p->data;
    s.first->next=p->next;
    if(s.last==p)s.last=s.first;
    free(p);
    return 1;
}
int destroyquenue(linkqueue &s){//毁队
    while(s.first){
        s.last=s.first->next;
        free(s.first);
        s.first=s.last;
    }
    return 1;
}

//循环列队
#define Maxsize 100
typedef struct{
    int *base;
    int Front,Rear;
}sqQuenue;
int intiquenue(sqQuenue &s){//
    s.base=(int *)malloc(Maxsize*sizeof(int));
    if(!s.base)exit(-1);
    s.Front=s.Rear=0;
    return 1;
}
int Quenuelen(sqQuenue &s){//长度
    return(s.Rear-s.Front+Maxsize)%Maxsize;
}
int Enqueue(sqQuenue &s,int e){//插入
    if((s.Rear+1)%Maxsize==s.Front)return -1;
    s.base[s.Rear]=e;
    s.Rear=(s.Rear+1)%Maxsize;
    return 1;
}
int Dequenue(sqQuenue &s){//
    if(s.Front==s.Rear)return -1;
    s.Front=(s.Front+1)%Maxsize;
    return 1;
}

栈和列队的一些代码

posted @ 2019-11-05 17:02  acwarming  阅读(149)  评论(0编辑  收藏  举报