顺序栈和顺序队列
顺序栈
#define N 100
/*顺序栈定义*/
typedef struct
{
bintree data[N];
int top;
int tag[N];
}seqstack;
void init(seqstack *s) /*初始化空栈*/
{
s->top=-1;
}
int empty(seqstack *s) /*判断栈是否为空*/
{
if (s->top>-1) return 0;
else return 1;
}
int full(seqstack *s) /*判断栈是否为满*/
{
if (s->top==N-1) return 1;
else return 0;
}
void push(seqstack *s ,bintree x) /*进栈*/
{
if (!full(s))
s->data[++s->top]=x;
}
bintree pop(seqstack *s) /*出栈*/
{
if (!empty(s))
return s->data[s->top--];
}
顺序队列
#define N 100/*队列可能达到的最大长度*/
/*顺序队列定义*/
typedef bintree qelemtype;
typedef struct
{
qelemtype *base;
int front,rear;
}sqqueue;
int initQueue(sqqueue &q)/*初始化*/
{
q.base=new qelemtype[N];
if(!q.base) exit(-1);
q.front=q.rear=0;
return 0;
}
int queuelength(sqqueue q)/*求队列长度*/
{
return(q.rear-q.front+N)%N;
}
int enqueue(sqqueue &q,qelemtype e)/*入队*/
{
if((q.rear+1)%N==q.front)
return -1;
q.base[q.rear]=e;
q.rear=(q.rear+1)%N;
return 0;
}
int dequeue(sqqueue &q,qelemtype &e)/*出队*/
{
if(q.front==q.rear) return -1;
e=q.base[q.front];
q.front=(q.front+1)%N;
return 0;
}
qelemtype gethead(sqqueue q)/*去队头元素*/
{
if(q.front!=q.rear)
return q.base[q.front];
}