如果将队列全部存满,队列为空和为满时,队头指针和队尾指针指向同一处。定义int size,当队头指针和队尾指针相同时,size!=0队满,size==0时队空。
#include链式队列#include typedef struct LNode{ //定义栈数据结构 int data[10]; //栈数据 int front=0; int rear=0; //队头、队尾初始化指向data[0] int size=0; }SqQueue; bool EnQueue(SqQueue &Q,int x){ if(Q.rear==Q.front&&Q.size!=0) return false; //队满 Q.data[Q.rear]=x; Q.rear=(Q.rear+1)%10; Q.size++; return true; //入队成功 } bool DeQueue(SqQueue &Q,int &x){ if(Q.rear==Q.front&&Q.size==0) return false; //队空 x=Q.data[Q.front]; Q.front=(Q.front+1)%10; Q.size--; return true; //出队成功 }
#include#include typedef struct LNode{ //定义栈数据结构 int data; //结点数据 struct LNode *Next; //链指针 }LNode; typedef struct{ //定义队列 LNode *front,*rear; //队头指针、队尾指针 }linkQueue; void InitQueue(linkQueue &Q){ Q.front=Q.rear=(LNode *)malloc(sizeof(LNode)); Q.front->Next=NULL; //队空 } void EnQueue(linkQueue &Q,int x){ LNode *s=(LNode*)malloc(sizeof(LNode)); s->data=x; s->Next=NULL; Q.rear->Next=s; Q.rear=s; } bool DeQueue(linkQueue &Q,int &x){ if(Q.front==Q.rear) return false; //队空 LNode*p=Q.front->Next; x=p->data; Q.front->Next=p->Next; if(Q.rear==p) Q.rear=Q.front; free(p); return true; }



