这种方式是用对列编写病人看病模拟程序
对顺序队不熟悉的可以先学习下面链接的文章
这篇文章是链队的代码,虽然代码不同但逻辑思想是相同的
#include <iostream>
#include<stdio.h>
#include <malloc.h>
#define MaxSize 100
using namespace std;
typedef int ElemType;
typedef struct
{
ElemType data[MaxSize];
int front,rear;
} SqQueue;
void InitQueue(SqQueue *&q)
{ q=(SqQueue *)malloc (sizeof(SqQueue));
q->front=q->rear=0;
}
void DestroyQueue(SqQueue *&q)
{
free(q);
}
bool QueueEmpty(SqQueue *q)
{
return(q->front==q->rear);
}
bool enQueue(SqQueue *&q,ElemType e)
{ if ((q->rear+1)%MaxSize==q->front)
return false;
q->rear=(q->rear+1)%MaxSize;
q->data[q->rear]=e;
return true;
}
bool deQueue(SqQueue *&q,ElemType &e)
{ if (q->front==q->rear)
return false;
q->front=(q->front+1)%MaxSize;
e=q->data[q->front];
return true;
}
int main()
{
SqQueue *q;
InitQueue(q);
ElemType n,a=2019101701,b=2019101702,c=2019101703,d=2019101704;
enQueue(q,a);
enQueue(q,b);
enQueue(q,c);
enQueue(q,d);
cout<<"请输入排队病人的病历号:";
cin>>n;
cout<<"把病人的病历号加入到队列中(入队)"<<endl;
enQueue(q,n);
printf("病历号为%d的病人已经入队
",n);
cout<<"病历号最前的排队病人现在就诊并将其删除(出队)。。。"<<endl;
deQueue(q,a);
cout<<a<<endl;
cout<<"从队首到队尾列出所有的排队病人病历号(依次出队)"<<endl;
deQueue(q,b);
cout<<b<<endl;
deQueue(q,c);
cout<<c<<endl;
deQueue(q,d);
cout<<d<<endl;
deQueue(q,n);
cout<<n<<endl;
cout<<"不再排队,余下依次就诊并列出所有的排队病人的病历号"<<endl;
deQueue(q,b);
cout<<b<<endl;
deQueue(q,c);
cout<<c<<endl;
deQueue(q,d);
cout<<d<<endl;
deQueue(q,n);
cout<<n<<endl;
cout<<"下班了(释放队列)" <<endl;
DestroyQueue(q);
}
其中链队与顺序队的主要区别就是对数据的查找与插入和删除操作不同,主要原因是链式结构需要不能够随机存储。因此链式结构查找耗时较多,而顺序结构插入与删除复杂度较高,各有千秋。因此,在分体题目中,选择合适的数据结构最重要。