双队列模拟栈的基本操作
#include<stdio.h>
#include<stdlib.h>
#define maxsize 30
typedef int datatype;
typedef struct{
datatype data[maxsize];
int front,rear;
}SeqQueue;
//置空栈
void Initial(SeqQueue *q1,SeqQueue *q2){
q1->front= 0,q1->rear = 0;
q2->front = 0,q2->rear= 0;
}
int QueueIsEmpty(SeqQueue *q){
return q->rear == q->front;
}
int QueueIsFull(SeqQueue *q){
return q->front ==(q->rear+1)%maxsize;
}
int EnQueue(SeqQueue *q,datatype x){
if(QueueIsFull(q))
return 0;
q->data[q->rear++] = x;
return 1;
}
int DeQueue(SeqQueue *q,datatype *x){
if(QueueIsEmpty(q))
return 0;
*x = q->data[q->front];
q->front = (q->front+1)%maxsize;
return 1;
}
//判断栈空
int StackIsEmpty(SeqQueue *q1,SeqQueue *q2){
return QueueIsEmpty(q1)&&QueueIsEmpty(q2);
}
//判断栈满
int StackIsFull(SeqQueue *q1,SeqQueue *q2){
return QueueIsFull(q1)||QueueIsFull(q2);
}
//进栈
int StackPush(SeqQueue *q1,SeqQueue *q2,datatype x){
if(StackIsFull(q1,q2))
return 0;
if(StackIsEmpty(q1,q2))
EnQueue(q1,x);
if(!QueueIsEmpty(q1))
EnQueue(q1,x);
if(QueueIsEmpty(q1))
EnQueue(q2,x);
return 1;
}
//出栈
int StackPop(SeqQueue *q1,SeqQueue *q2,datatype *x){
if(StackIsEmpty(q1,q2)) //判断栈空
return 0;
if(!QueueIsEmpty(q1)){ //若q1不为空
while(!QueueIsEmpty(q1)){
DeQueue(q1,x); //出q1
EnQueue(q2,*x); //进q2
}
}
else //若q1为空
while(!QueueIsEmpty(q2)){
DeQueue(q2,x); //出q2
EnQueue(q1,*x); //进q1
}
return 1;
} #include<stdio.h>
#include<stdlib.