环形队列的基本运算

来源:互联网 发布:拼图软件知乎 编辑:程序博客网 时间:2024/04/28 16:17
/*程序的版权和版本声明部分:*Copyright(c)2014,烟台大学计算机学院学生*All rights reserved.*文件名称:*作者:田成琳*完成日期:2014 年 9 月 30 日*版本号:v1.0*对任务及求解方法的描述部分:*问题描述:队列的基本运算*程序输入:*程序输出:*问题分析:*算法设计:*/#include <iostream>#include <cstdlib>using namespace std;const int MaxSize = 50;struct QuType{    int data[MaxSize];//存放队列中元素    int front;//对头指针    int count;//队尾指针};void InitQueue(QuType *&q);//初始化队列void DestoryQueue(QuType *&q);//销毁队列bool QueueEmpty(QuType *q);//判断队列是否为空bool enQueue(QuType *&q,int e);//进队列bool deQueue(QuType *&q,int &e);//出队列int NumQueue(QuType *&q);//队列的元素个数void DisplayQueue(QuType *&q);//显示队列中元素void InitQueue(QuType *&q){    q=(QuType *)malloc(sizeof(QuType));    q->front=q->count=0;}void DestoryQueue(QuType *&q){    free(q);}bool QueueEmpty(QuType *q){    return (q->count==0);}bool enQueue(QuType *&q,int e){    int rear;//临时队尾指针    if(q->count==MaxSize)//队满上溢        return false;    else    {        rear=(q->front+q->count)%MaxSize;//求队尾位置        q->data[rear]=e;        q->count++;        return true;    }}bool deQueue(QuType *&q,int &e){    if(q->count==0)//队列为空        return false;    else    {        e=q->data[q->front];        q->front=(q->front+1)%MaxSize;//对头循环+1        q->count--;        return true;    }}int NumQueue(QuType *&q){    return q->count;}void DisplayQueue(QuType *&q){    int head=q->front;    while(head<=q->count)    {        cout<<q->data[head]<<" ";        head++;    }}int main(){    QuType *q;    int n,num;    InitQueue(q);    if(QueueEmpty(q))        cout<<"队列为空。"<<endl;    else        cout<<"队列不为空。"<<endl;    cout<<"现在将1-5进队"<<endl;    for(int i=1;i<=5;i++)        enQueue(q,i);    cout<<"请再输入一个元素进队:"<<endl;    cin>>n;    enQueue(q,n);    cout<<"队列中的元素个数为:"<<endl;    cout<<NumQueue(q)<<endl;    cout<<"现在出队一个元素:";    deQueue(q,num);    cout<<num<<","<<"出队后剩余元素为:"<<endl;    DisplayQueue(q);    DestoryQueue(q);    return 0;}


运行结果:

 

0 0
原创粉丝点击