循环队列

来源:互联网 发布:淘宝店铺信誉有什么用 编辑:程序博客网 时间:2024/06/08 19:03

循环队列

#include <iostream>#include <stdlib.h>#include <stdio.h>using namespace std;#define MAXSIZE 5typedef int Elemtype;typedef struct{Elemtype *data;  //动态分配存储空间int front;  //头指针 指向队列头元素int rear;  //尾指针,指向队尾元素的下一个位置}SqQueue;void InitQueue(SqQueue *Q){Q->data = (Elemtype *) malloc(sizeof(Elemtype)* MAXSIZE);if(!Q->data){cout<<"初始化失败!"<<endl;exit(-1);}Q->front = Q->rear = 0; //空队列时,头指针和尾指针都指向数组零元素的位置}//将元素 elem 插入到 循环队列 Q 中void EnQueue(SqQueue *Q,Elemtype elem){//先判断循环队列是否满了if( (Q->rear +1)% MAXSIZE == Q->front){cout<<"循环队列已满,插入元素失败!"<<endl;//exit(-1);}else{Q->data[Q->rear] = elem;Q->rear = (Q->rear + 1) % MAXSIZE;}}//删除对头元素void DeQueue(SqQueue *Q){if(Q->front == Q->rear)//说明循环队列是空的{cout<<"循环队列是空的,操作不合理"<<endl;}else{cout<<"删除的对头元素为"<<Q->data[Q->front]<<endl;Q->front = (Q->front + 1) % MAXSIZE ;}}void PrintQueue(SqQueue Q){if(Q.front == Q.rear)//说明循环队列是空的{cout<<"循环队列是空的,操作不合理"<<endl;}else{cout<<"循环队列中的元素为:";while(Q.front != Q.rear) //不为空{cout<<Q.data[Q.front]<<" ";Q.front = (Q.front + 1) % MAXSIZE;}cout<<endl;}}int main(){SqQueue Q;InitQueue(&Q);//入队操作cout<<"---------入队操作---------"<<endl;Elemtype n;cout<<"请输入要入队的元素:";while(scanf("%d",&n) != EOF){EnQueue(&Q,n);cout<<"请输入要入队的元素:";}PrintQueue(Q);//出队操作cout<<"---------出队操作---------"<<endl;DeQueue(&Q);PrintQueue(Q);DeQueue(&Q);PrintQueue(Q);return 0;}



VS2010下的运行结果如下:

0 0
原创粉丝点击