结构体
//队列结构体定义
//静态队列
typedef struct {
int data[MAXSIZE];
int rear,front;
int tag;
}SqQueue;
//栈的定义
typedef struct{
int data[MAXSIZE];
int top;
}SqStack;
队列题目:
//1.tag队列进队出队
//tag队列进队
bool EnQueue(SqQueue &q,int x){
if(q.rear == q.front && tag == 1)return false;
else{
q.tag = 1;
q.data[q.rear] = x;
q.rear = (q.rear+1)%MAXSIZE;
return true;
}
}
//tag队列出队
bool DeQueue(SqQueue &q,int &e){
if(q.rear == q.rear && q.tag == 0)return false;
else{
q.tag = 0;
e = q.data[q.front];
q.front = (q.front+1)%MAXSIZE;
return true;
}
}
//2.使用一个栈,将队列里的元素逆转
bool reverseByStack(SqQueue &q,SqStack &s){
if(q.front == q.rear)return false;//队空
//队列放入栈内
while(!EmptyQueue(q)){
DeQueue(q,m);
Push(s,m);
}
//栈内元素放入队列
while(!EmptyStack(s)){
Pop(s,m);
EnQueue(q,m);
}
}
//3.利用两个栈来模拟一个队列
//a为s1,b为s2
//进队
bool EnQueueByStack(SqStack &a,SqStack &b,int x){
if(!StackOverflow(a)){
Push(a,x);
return true;
}
if(StackOverflow(a) && StackEmpty(b)){
int m;
while(!StackEmpty(a)){
Pop(a,m);
Push(b,m);
}
Push(a,x);
return true;
}
if(StackOverflow(a) && StackOverflow(b)){
return false; //两个栈都满了
}
}
//出队
bool DeQueueByStack(SqStack &a,SqStack &b,int &e){
if(!StackEmpty(b)){
Pop(b,e);
return true;
}else if(StackEmpty(a)){
return false; //两个栈都没有元素
}else{
int m;
while(!StackEmpty(a)){
Pop(a,m);
Push(b,m);
}
Pop(b,e);
return true;
}
}
//判队空
bool EmptyQueue(SqStack a,SqStack b){
if(StackEmpty(a) && StackEmpty(b))return true;
else return false;
}