队列的基本操作以及应用
实验五 队列的基本操作及应用 实验目的:掌握队列的初始化、判空、取队头元素、出队、入队、输出队列元素等基本操作 实验要求: 1、认真阅读和掌握教材上和本实验相关的算法。 2、实现链队列的相关算法,并能够进行简单的输入输出验证。 实验内容: 编程实现链队列的基本操作,这些基本操作至少包括:初始化、清空、判空、取队头元 素、出队、入队、输出队列元素。要求能够进行简单的输入输出验证。 参考代码 #include #include #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 InitQueue(SqQueue if(!Q.base)/*存储分配失败*/ return ERROR; Q.front=Q.rear=0; return OK; Status DestroyQueue(SqQueue Q.base=NULL; Q.front=Q.rear=0; return OK; ) Status QueueEmpty(SqQueue Q) { /*若队列Q为空队列,则返回TRUE,否则返回FALSE */ if(Q.front==Q.rear) /* 队列空的标志 */ return TRUE; else return FALSE; int QueueLength(SqQueue Q) {/*返回Q的元素个数,即队列的长度*/ return(Q.rear-Q.front+MAXQSIZE)%MAXQSIZE; } Status GetHead(SqQueue Q,QElemType e=*(Q.base+Q.front); return OK; Status EnQueue(SqQueue Q.base[Q.rear]=e; Q.rear=(Q.rear+l)%MAXQSIZE; printf(n\nn); printf(“A队元素的学号为:%d:\n“,e.StudentNo); printf(“入队元素的姓名为:%s:\nn,e.name); printf(H入队元素的分数为:%d:\nn,e.fenshu); return OK; Status DeQueue(SqQueue 否则返回ERROR */ if(Q.front==Q.rear) /* 队列空 */ return ERROR; e=Q .base [Q .front]; Q.front=(Q.front+ 1)%MAXQSIZE; printf(n\nH); printf(H出队元素的学号为:%d:\nn,e.StudentNo); printf(n出队元素的姓名为:%s:\nn,e.name); printf(n出队元素的分数为:%d:\nn,e.fenshu); return OK; Status ShowQueue(SqQueue Q) { 〃依次显示每个队列空间及当前队头、队尾位置 int i=0; for(i=0;ivMAXQSIZE;i++) { printf(n[%d]: %dn,i,Q.base[i]); if (Q.front==i) printf(“ ->Head“); if (Q.rear==i) printf(“ ->Tail“); printf(侦 ); } return OK; ) 〃主函数 void main() { QElemType student[6]=({001,“张二”,90},{002,”李四“,95},(003,“王五“,82},(004,“赵 六 ”,92},{005,” 钱四”,94},{006」孙伟 ”,79}}; SqQueue Q; InitQueue(Q); QElemType j; for(int k=l;kv=6;k++) { j=student[k-l]; EnQueue(Q,j); ) printf(”显示队列的各个元素:\n”); int p; QElemType e; p=Q.front; while(Q.front! =Q.rear) ( DeQueue(Q,e); DestroyQueue(Q); printf(“队列已经销毁:\n”);