数据结构——循环队列
来源:互联网 发布:微信公众号矩阵 编辑:程序博客网 时间:2024/06/05 19:05
#include <iostream>using namespace std;#define MAXSIZE 9typedef struct{ int front; int rear; int data[MAXSIZE];}CirQueue;int count=0;//初始化顺序队列void init_queue(CirQueue * cq){ cq->front=cq->rear=0;}//判队列满int full_queue(CirQueue * cq){ if(count==MAXSIZE) return 1; else return 0;}//判队列空int isempty_queue(CirQueue * cq){ if(count==0) return 1; else return 0;}//入队列int Push_queue(CirQueue * cq,int x){ if(full_queue(cq)) { cout<<"队列已满,请删除后再添加!"<<endl; return 0; } else { count++; //元素个数加1 cq->data[(cq->rear)%MAXSIZE]=x; //数据放在当前队尾指针指向的位置 cq->rear=(cq->rear+1)%MAXSIZE; //队尾指针向后移一位,放在最后一个元素的后面 return 1; }}//显示队列int display_queue(CirQueue * cq){ if(isempty_queue(cq)==1) { cout<<"is empty!"<<endl; return 0; } int temp=cq->front; int tempcount=count; while(tempcount) { cout<<cq->data[temp]<<" "; temp=(temp+1)%MAXSIZE; tempcount--; } return 1;}//出队列int Pop_queue(CirQueue * cq){ if(isempty_queue(cq)==1) { cout<<"is empty!"<<endl; return 0; } cout<<cq->data[cq->front++]<<endl; count--; return 1;}//取队列顶元素int gettop_queue(CirQueue * cq){ return cq->data[cq->front];}//查找元素int search_queue(CirQueue * cq,int key){ int temp=cq->front; int tempcount=count; while(tempcount) { if(cq->data[temp]==key) { return 1; } temp=(temp+1)%MAXSIZE; tempcount--; } return 0;}//置队列空void clear_queue(CirQueue * cq){ cq->front=cq->rear=0; count=0; cout<<"置空成功!"<<endl;}int main(){ CirQueue * cq; cq=(CirQueue *) malloc(sizeof(CirQueue)); if(!cq) { printf("分配空间失败!\n"); return 0; } //初始化顺序队列 init_queue(cq); //入队列 Push_queue(cq,15); Push_queue(cq,23); Push_queue(cq,54); Push_queue(cq,67); Push_queue(cq,32); Push_queue(cq,24); Push_queue(cq,38); Push_queue(cq,47); Push_queue(cq,95); //第九个元素 //显示队列 display_queue(cq); cout<<endl; Push_queue(cq,54); //第十个元素 //显示队列 display_queue(cq); cout<<endl; //出队列 cout<<"出队列"<<endl; Pop_queue(cq); Pop_queue(cq); //显示队列 display_queue(cq); cout<<endl; //再入队列 Push_queue(cq,78); Push_queue(cq,43); //显示队列 display_queue(cq); cout<<endl; //取队列顶元素 cout<<"队列顶元素时: "<<gettop_queue(cq)<<endl; //判队列空 if(isempty_queue(cq)==1) cout<<"is empty!"<<endl; else cout<<"not empty!"<<endl; //判队列满 full_queue(cq); //查找元素 if(search_queue(cq,38)) cout<<"yes!find it."<<endl; else cout<<"is not exist."<<endl; //置队列空 cout<<"置空线性队列? "; clear_queue(cq); display_queue(cq); return 0;}