循环队列的顺序存储结构,队列的初始化,增删改查。front标记队头,rear标记队尾,当rear=front时队列为空,当队伍中静态存储空间只剩下一个位置时,默认队列已满,牺牲一个存储空间换取rear和front在逻辑上的标记便利。
#include#define MaxSize 10 using namespace std; struct SqQueue{ int data[MaxSize]; int front,rear;//front为队头,rear为下一个入队的位置 }; void InitQueue(SqQueue &Q){ Q.front=Q.rear=0; }//初始化队列 bool EnQueue(SqQueue &Q,int 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,int &x){ if(Q.front==Q.rear) return false;//队列已空 x=Q.data[Q.front]; Q.front=(Q.front+1)%MaxSize; }//出队 int main(void){ SqQueue Q; InitQueue(Q); int x; for(int i=0;i<5;i++){ Q.data[i]=i; Q.rear=(Q.rear+1)%MaxSize; }//将0-4入队 if(EnQueue(Q,5)){ int front=Q.front,rear=Q.rear; while(front!=rear){ cout< cout< cout< cout<
队列的链式存储结构,链式队列(带头结点)的初始化,入队出队。和单链表不同的是新增一个LinkQueue的结构体,结构体里的front和rear指针分别标记队列的队头元素和队尾元素的地址。front指的是没有数据的头结点,Q.front->next指向的才是队头元素。#includeusing namespace std; struct LinkNode{ int data; LinkNode *next; }; struct LinkQueue{ LinkNode *front,*rear; }; void InitQueue(LinkQueue &Q){ Q.front=Q.rear=new LinkNode; }//初始化队列 void EnQueue(LinkQueue &Q,int x){ LinkNode *s=new LinkNode; s->data=x; s->next=NULL; Q.rear->next=s; Q.rear=s; }//将x入队 bool DeQueue(LinkQueue &Q,int &x){ if(Q.front==Q.rear) return false; LinkNode *p=new LinkNode; p=Q.front->next; x=p->data; Q.front->next=p->next; if(p==Q.rear) Q.rear=Q.front; delete p; return true; }//将x出队 int main(void){ LinkQueue Q; InitQueue(Q); for(int i=0;i<5;i++){ EnQueue(Q,i); }//将0-4依次入队 int x; if(DeQueue(Q,x)) cout<



