队列的基本操作以及应用
实验五 队列的基本操作及应用 实验目的掌握队列的初始化、判空、取队头元素、出队、入队、输出队列元素等基本操作 实验要求 1、认真阅读和掌握教材上和本实验相关的算法。 2、实现链队列的相关算法,并能够进行简单的输入输出验证。 实验内容 编程实现链队列的基本操作,这些基本操作至少包括初始化、清空、判空、取队头元 素、出队、入队、输出队列元素。要求能够进行简单的输入输出验证。 参考代码 includestdio.h includestdlib.h define TRUE 1 define FALSE 0 define OK 1 define ERROR 0 define MAXQSIZE6/*最大队列长度对于循环队列,实际队列数据个数要减1 */ typedef int Status; /* Status是函数的类型,其值是函数结果状态代码,如OK等*/ typedef struct 〃声明QElemType类型,此处即为C的整型 { int StudentNo; char name [5]; int fenshu; } QElemType; 〃定义循环队列结构 typedef struct { QElemType *base;/*初始化的动态分配存储空间*/ intfront;/*头指针,若队列不空,指向队列头元素*/ int rear; /*尾指针,若队列不空,指向队列尾元素的下一个位置*/ JSqQueue; 〃基本操作 Status InitQueueSqQueue Q { /*构造一个空队列Q */ Q.baseQElemType *mallocMAXQSIZE*sizeofQElemType; ifQ.base/*存储分配失败*/ return ERROR; Q.frontQ.rear0; return OK; Status DestroyQueueSqQueue Q {/*销毁队列Q,Q不再存在*/ ifQ.base freeQ.base; Q.baseNULL; Q.frontQ.rear0; return OK; Status QueueEmptySqQueue Q { /*若队列Q为空队列,则返回TRUE,否则返回FALSE */ ifQ.frontQ.rear /* 队列空的标志 */ return TRUE; else return FALSE; int QueueLengthSqQueue Q {/*返回Q的元素个数,即队列的长度*/ returnQ.rear-Q.frontMAXQSIZEMAXQSIZE; } Status GetHeadSqQueue Q,QElemType e { /*若队列不空,则用e返回Q的队头元素,并返回OK,否则返回ERROR */ ifQ.frontQ.rear /* 队列空 */ return ERROR; e*Q.baseQ.front; return OK; Status EnQueueSqQueue Q,QElemType e /*插入元素e为Q的新的队尾元素*/ ifQ.rearlMAXQSIZEQ.front/* 队列满 */ return ERROR; Q.base[Q.rear]e; Q.rearQ.rearlMAXQSIZE; printfn\nn; printfA队元素的学号为d\n,e.StudentNo; printf入队元素的姓名为s\nn,e.name; printfH入队元素的分数为d\nn,e.fenshu; return OK; Status DeQueueSqQueue Q,QElemType e { /*若队列不空,则删除Q的队头元素,用e返回其值,并返回OK;否则返回ERROR */ ifQ.frontQ.rear /* 队列空 */ return ERROR; eQ .base [Q .front]; Q.frontQ.front 1MAXQSIZE; printfn\nH; printfH出队元素的学号为d\nn,e.StudentNo; printfn出队元素的姓名为s\nn,e.name; printfn出队元素的分数为d\nn,e.fenshu; return OK; Status ShowQueueSqQueue Q { 〃依次显示每个队列空间及当前队头、队尾位置 int i0; fori0;ivMAXQSIZE;i { printfn[d] dn,i,Q.base[i]; if Q.fronti printf -Head; if Q.reari printf -Tail; printf侦; } return OK; 〃主函数 void main { QElemType student[6]{001,张二”,90},{002,”李四,95},003,王五,82},004,赵 六 ”,92},{005,” 钱四”,94},{006」孙伟 ”,79}}; SqQueue Q; InitQueueQ; QElemType j; forint kl;kv6;k { jstudent[k-l]; EnQueueQ,j; printf”显示队列的各个元素\n”; int p; QElemType e; pQ.front; whileQ.front Q.rear DeQueueQ,e; DestroyQueueQ; printf队列已经销毁\n”;