#define MaxSize 50
typedef strecu{
ElemType data[MaxSize];
int front,rear
}SqQueue;
循环队列--将队列臆造为一个环状的空间
初始 Q.front==Q.rear==0;
入队--队尾指针进1 Q.rear=(Q.rear+1)%MaxSize
出队--队首指针进1 Q.front=(Q.front+1)%MaxSize
队列长度 (Q.rear+MaxSize-Q.front)%MaxSize
队满 (Q.rear+1)%MaxSize==Q.front
队空 Q.front==Q.rear
void InitSqQueue(SqQueue &Q){
Q.front=Q.rear=0;
}
bool SqQueueEmpty(SqQueue Q){
if(Q.front==Q.rear)
return true;
else
return false;
}
bool EnQueue(SqQueue &Q,ElemType x){
if((Q.rear+1)%MaxSize==Q.front) return false;
Q.data[Q.rear]=x;
Q.rear=(Q.rear+1)%MaxSize;
return true;
}
bool DeQueue(SqQueue &Q,ElemType &x){
if(Q.front==Q.rear) return false;
x=Q.data[Q.front];
Q.front=(Q.front+1)%MaxSize;
return true;
}
typedef struct{
ElemType data;
Struct LinkNode *next;
}LinkNode;
typedef struct{
LinkNode *front,*rear;
}LinkQueue;
void InitQueue(LinkQueue &Q){
Q.front=Q.rear=(LinkNode *)malloc(SizeOf(LinkNode));
Q.front->next=NULL;
}
bool QueueEmpty(LinkQueue Q){
if(Q.front==Q.rear) return true;
else return false;
}
bool EnQueue(LinkQueue &Q,ElemType x){
LinkNode *s;
s=(LinkNode *)malloc(SizeOf(LinkNode));
s->data=x;
s->next=NULL;
Q.rear->next=s;
Q.rear=s;
return true;
}
bool DeQueue(LinkQueue &Q,ElemType &x){
LinkNode *q;
q=Q.front->next;
x=q.data;
Q.front->next=q->next;
if(q==Q->rear) Q.rear=Q.front;
free(q);
return true;
}
- 利用两个栈s1、s2来模拟一个队列,实现队列的入队、出队、判断队列是否为空的操作
void EnQueue(SqStack &s1,SqStack &s2,ElemType x){
if(s1.top!=MaxSize-1){
pust(s1,x);
}
else if(s1.top==MaxSize-1&&s2.top==-1){
while(s1.top!=-1){
pop(s1,e);
push(s2,e);
}
push(s1,x);
}
else{
cout<<"入栈失败!"<<endl;
}
}
void Dequeue(SqStack &s1,SqStack &s2,ElemType x){
if(s2.top!=-1){
pop(s2,x);
}
else if(s2.top==-1&&s1.top!=-1){
while(s1.top!=-1){
pop(s1,,e);
push(s2,e);
}
pop(s2,x);
}
else{
cout<<"出队失败"<<endl;
}
}
bool QueueEmpty(SqStack s1,SqStack &s2){
if(s1.top==-1&&s2.top==-1)
return true;
else
return false;
}
bool StackEmpty(SqQueue q1,SqQueue q2){
if(QueueEmpty(q1)==NUll)
return NULL;
}
void push(SqQueue &q1,SqQueue &q2,ElemType x){
if((q1.rear+1)%MaxSize==0){
cout<<"栈满,入栈失败"<<endl;
}
EnQueue(q1,x);
}
void pop(SqQueue &q1,SqQueue &q2,ElemType x){
if(QueueEmpty(q1)==NULL)
return;
int n=q1.size(q1);
while(n!=1){
DeQueue(q1,e);
EnQueue(q2,e);
n--;
}
DeQueue(q1,x);
while(QueueEmpty(q2)!=NULL){
DeQueue(q2,e);
EnQueue(q1,e);
}
}