《实验四 队列及其应用.docx》由会员分享,可在线阅读,更多相关《实验四 队列及其应用.docx(3页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、实验四队列及其应用#includestdio.h#includestdlib.h#define 日emType inttypedef struct qnode 定义记录类型 (int data;节点数据域为datastruct qnode *next; QNode;typedef struct(QNode *front,*rear;QuType;在队列qu中查找一个节点,其数据域的值为Num,找到返回L否那么返回-1 int QuSearch(QuType *qu,int Num)(QNode *p=qu-front;循环查找节点p, p的数据域的值为Numwhile( p & p-data
2、!= Num ) p=p-next;找到数据域值为Num的节点,返回1if( p )/ if(p-data = = no) ? ?return 1; elsereturn -1;打印队列中所有的元素void QuDisplay(QuType *qu) (QNode *p=qu-front;int i=l;if(p 二二 NULL) (prin 甘(”* 没有排队者 *rT);)while(p != NULL) (print.第%d 个排队者为:%5drT,i+,p-data);p=p-next;入队操作,在队列qu中插入节点,该节点的数据域的值为Num int EnQueue(QuType *
3、qu,int Num)(QNode *q=(QNode *)malloc(sizeof(QNode);if(q = = NULL)return -1;节点q为即将插入的新节点,为其数据域赋值为Num,指针域赋值为NULL q-data = Num;q-next = NULL;if( qu-rear = NULL ) /插入前队列中没有节点,如何插入新节点 (qu-front = q;qu-rear = q;)else /插入前队列中有假设干节点,如何插入新节点(qu-rear-next = q;qu-rear = q;) return 1;出队操作,删除队列中的队头节点,并用Num保存删除节点
4、的数据int OutQueue(QuType *qu,int *Num)(QNode *p=qu-front;判断队列是否为空,假设队列为空,那么返回if( p = NULL)return -1;else 假设队列非空,那么删除队头节点 使用Num获取队头节点数据域的值*Num = p-data;队列中只有一个节点P,删除方法?if( p - qu -rear)qu-front = qu-rear = NULL;队列中有多于1个节点的时候,删除队头节点p的方法? elsequ-front = p-next;free(p);return 1;)判空队列,假设为空返回L否那么返回-1 int Qu
5、eueEmp(QuType *qu)(队列为空的条件?if( qu-front = NULL ) return 1;elsereturn -1;void main(void)(int sel,no,temp,flag = l;QuType *qu;qu=(QuType *)malloc(sizeof(QuType);qu-front=qu-rear=NULL;while(l 二二 flag)(printf(nl:排队2 :就诊3 :查看队列4 :不再排队,余下就诊5 :下班 请选择”);scanf(%d,&sel);switch(sel) (case 1: printf(输入病历号:);sca
6、nf(%d,&no);whileQ二二QuSearch(qu,no) 输入后需要判断是否重复 (printf(”输入病历号重复,请重新输入); scanf(%d,&no);EnQueue(qu,no);break;case 2: if( OutQueue(qu,&temp) = -1)printf(”* 没有排队的病人*rT);elseprintf(”病历号为%d的请就诊n,temp);break;QuDisplay(qu);break;if(QueueEmp(qu)=l)printf(* 没有排队的病人*rT);else(printf(”病人按如下顺序就诊n);QuDisplay(qu);flag = 0;break;printf(已下班,请排队的病人明天就医! n);flag=0;break;default:break;)getchar();)