2.2 顺序队列 循环队列
//顺序队列的实现 C++编译 #include<stdio.h> #include<stdlib.h> #include<stdbool.h> #define MaxSize 5 //队列的容量 //顺序队列的类型定义 typedef struct{ int data[MaxSize]; //静态数组 int front,rear; //队头、队尾指针 }SqQueue; //初始化队列 void InitQueue(SqQueue &Q){ Q.rear=Q.front=0; } //判断队列是否为空 bool QueueEmpty(SqQueue Q){ return Q.rear==Q.front; } //判断队列是否已满 bool QueueFull(SqQueue Q){ return Q.rear==MaxSize; } //入队 void EnQueue(SqQueue &Q, int e){ if(QueueFull(Q)) return; Q.data[Q.rear]=e; Q.rear++; } //出队 void DeQueue(SqQueue &Q, int &e){ if(QueueEmpty(Q)) return; e=Q.data[Q.front]; Q.front++; } //读队头 int GetHead(SqQueue Q){ if(!QueueEmpty(Q)) return Q.data[Q.front]; } int main(){ SqQueue Q; //声明一个队列 InitQueue(Q); int n=3; int a[]={5,2,0}; for(int i=0;i<n;i++){ EnQueue(Q,a[i]); } for(int i=0,e;i<n;i++){ DeQueue(Q,e); printf("%d ",e); } return 0; }
//循环队列的实现 C++编译 #include<stdio.h> #include<stdlib.h> #include<stdbool.h> #define MaxSize 5 //队列容量 //顺序队列的类型定义 typedef struct{ int data[MaxSize]; //静态数组 int front,rear; //队头、队尾指针 }SqQueue; //初始化队列 void InitQueue(SqQueue &Q){ Q.rear=Q.front=0; } //判断队列是否为空 bool QueueEmpty(SqQueue Q){ return Q.rear==Q.front; } //判断队列是否已满 bool QueueFull(SqQueue Q){ //牺牲一个单元,区分队空和队满 return (Q.rear+1)%MaxSize==Q.front; } //入队 void EnQueue(SqQueue &Q, int e){ if(QueueFull(Q)) return; Q.data[Q.rear]=e; Q.rear=(Q.rear+1)%MaxSize; } //出队 void DeQueue(SqQueue &Q, int &e){ if(QueueEmpty(Q)) return; e=Q.data[Q.front]; Q.front=(Q.front+1)%MaxSize; } //读队头 int GetHead(SqQueue Q){ if(!QueueEmpty(Q)) return Q.data[Q.front]; } int main(){ SqQueue Q; //声明一个队列 InitQueue(Q); int n=3; int a[]={5,2,0}; for(int i=0;i<n;i++){ EnQueue(Q,a[i]); } for(int i=0,e;i<n;i++){ DeQueue(Q,e); printf("%d ",e); } return 0; }
//循环队列的实现2 C++编译 #include<stdio.h> #include<stdlib.h> #include<stdbool.h> #define MaxSize 5 //队列容量 //顺序队列的类型定义 typedef struct{ int data[MaxSize]; //静态数组 int front,rear; //队头、队尾指针 int size; //队列元素个数 }SqQueue; //初始化队列 void InitQueue(SqQueue &Q){ Q.rear=Q.front=0; Q.size=0; } //判断队列是否为空 bool QueueEmpty(SqQueue Q){ return Q.size==0; } //判断队列是否已满 bool QueueFull(SqQueue Q){ return Q.size==MaxSize; } //入队 void EnQueue(SqQueue &Q, int e){ if(QueueFull(Q)) return; //若队满 Q.data[Q.rear]=e; Q.rear=(Q.rear+1)%MaxSize; Q.size++; } //出队 void DeQueue(SqQueue &Q, int &e){ if(QueueEmpty(Q)) return; e=Q.data[Q.front]; Q.front=(Q.front+1)%MaxSize; Q.size--; } //读队头 int GetHead(SqQueue Q){ if(!QueueEmpty(Q)) return Q.data[Q.front]; } int main(){ SqQueue Q; //声明一个队列 InitQueue(Q); int n=3; int a[]={5,2,0}; for(int i=0;i<n;i++){ EnQueue(Q,a[i]); } for(int i=0,e;i<n;i++){ DeQueue(Q,e); printf("%d ",e); } return 0; }
//循环队列的实现(rear指向队尾元素) C++编译 #include<stdio.h> #include<stdlib.h> #include<stdbool.h> #define MaxSize 5 //元素的最大个数 //顺序队列的类型定义 typedef struct{ int data[MaxSize]; //静态数组 int front,rear; //队头、队尾指针 }SqQueue; //初始化队列 void InitQueue(SqQueue &Q){ Q.front=0; Q.rear=MaxSize-1; } //判断队列是否为空 bool QueueEmpty(SqQueue Q){ return (Q.rear+1)%MaxSize==Q.front; } //判断队列是否已满 bool QueueFull(SqQueue Q){ //牺牲一个单元,区分队空和队满 return (Q.rear+2)%MaxSize==Q.front; } //入队 void EnQueue(SqQueue &Q, int e){ if(QueueFull(Q)) return; Q.rear=(Q.rear+1)%MaxSize; Q.data[Q.rear]=e; //rear指向队尾元素 } //出队 void DeQueue(SqQueue &Q, int &e){ if(QueueEmpty(Q)) return; e=Q.data[Q.front]; Q.front=(Q.front+1)%MaxSize; } //读队头 int GetHead(SqQueue Q){ if(!QueueEmpty(Q)) return Q.data[Q.front]; } int main(){ SqQueue Q; //声明一个队列 InitQueue(Q); int n=3; int a[]={5,2,0}; for(int i=0;i<n;i++){ EnQueue(Q,a[i]); } for(int i=0,e;i<n;i++){ DeQueue(Q,e); printf("%d ",e); } return 0; }
.
浙公网安备 33010602011771号