队列的基本操作以及应用

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验五队列的基本操作及应用

实验目的:掌握队列的初始化、判空、取队头元素、出队、入队、输出队列元素等基本操作实验要求:

1、认真阅读和掌握教材上和本实验相关的算法。

2、实现链队列的相关算法,并能够进行简单的输入输出验证。

实验内容:

编程实现链队列的基本操作,这些基本操作至少包括:初始化、清空、判空、取队头元素、出队、入队、输出队列元素。要求能够进行简单的输入输出验证。

参考代码

#include

#include

#define TRUE 1

#define FALSE 0

#define OK 1

#define ERROR 0

#define MAXQSIZE 6 /* 最大队列长度(对于循环队列,实际队列数据个数要减1) */ typedef int Status; /* Status是函数的类型,其值是函数结果状态代码,如OK等*/

typedef struct //声明QElemType类型,此处即为C的整型

{

int StudentNo;

char name[5];

int fenshu;

}QElemType;

//定义循环队列结构

typedef struct

{

QElemType *base; /* 初始化的动态分配存储空间*/

int front; /* 头指针,若队列不空,指向队列头元素*/

int rear; /* 尾指针,若队列不空,指向队列尾元素的下一个位置*/

}SqQueue;

//基本操作

Status InitQueue(SqQueue &Q)

{ /* 构造一个空队列Q */

Q.base=(QElemType *)malloc(MAXQSIZE*sizeof(QElemType));

if(!Q.base) /* 存储分配失败*/

return ERROR;

Q.front=Q.rear=0;

return OK;

}

Status DestroyQueue(SqQueue &Q)

{ /* 销毁队列Q,Q不再存在*/

if(Q.base)

free(Q.base);

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)

{ /* 若队列不空,则用e返回Q的队头元素,并返回OK,否则返回ERROR */ if(Q.front==Q.rear) /* 队列空*/

return ERROR;

e=*(Q.base+Q.front);

return OK;

}

Status EnQueue(SqQueue &Q,QElemType e)

{ /* 插入元素e为Q的新的队尾元素*/

if((Q.rear+1)%MAXQSIZE==Q.front) /* 队列满*/

return ERROR;

Q.base[Q.rear]=e;

Q.rear=(Q.rear+1)%MAXQSIZE;

printf("-------------------------------\n");

printf("入队元素的学号为:%d:\n",e.StudentNo);

printf("入队元素的姓名为:%s:\n",);

printf("入队元素的分数为:%d:\n",e.fenshu);

return OK;

}

Status DeQueue(SqQueue &Q,QElemType &e)

{ /* 若队列不空,则删除Q的队头元素,用e返回其值,并返回OK;否则返回ERROR */ if(Q.front==Q.rear) /* 队列空*/

return ERROR;

e=Q.base[Q.front];

Q.front=(Q.front+1)%MAXQSIZE;

printf("-------------------------------\n");

printf("出队元素的学号为:%d:\n",e.StudentNo);

printf("出队元素的姓名为:%s:\n",);

printf("出队元素的分数为:%d:\n",e.fenshu);

return OK;

}

Status ShowQueue(SqQueue Q)

{ //依次显示每个队列空间及当前队头、队尾位置

int i=0;

for(i=0;i

{

printf("[%d]: %d",i,Q.base[i]);

if (Q.front==i) printf(" ->Head");

if (Q.rear==i) printf(" ->Tail");

printf("\n");

}

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=1;k<=6;k++)

{

j=student[k-1];

EnQueue(Q,j);

}

printf("显示队列的各个元素:\n");

int p;

QElemType e;

p=Q.front;

while(Q.front!=Q.rear)

{

DeQueue(Q,e);

}

DestroyQueue(Q);

printf("队列已经销毁:\n");

}

相关文档
最新文档