队列的基本操作及其应用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
广西工学院计算机学院
《数据结构》课程实验报告书实验四队列的基本操作及其应用
学生姓名:李四
学号:2012
班级:计Y124
指导老师:王日凤
专业:计算机学院软件学院
提交日期:2013年6月20日
1.实验目的
1)通过对队列特点的分析,掌握队列的存储结构及其基本操作,学会定义队列的顺序存储结构和链式存储结构,在实际问题中灵活运用。
2)掌握队列先进先出的特点,掌握队列的基本操作,如出队列、入队列、判队列空、判队列满等,熟悉各种操作的实现方法。
3)通过具体的应用实例,进一步熟悉和掌握队列的实际应用。
2.实验内容
(1)建立一个含n个数据的队列,实现队列的基本操作。包括:
▪//1. 初始化,构造一个空队列
void initQueue(Queue &Q)
▪//2. 判断队列空, 空则返回true
bool QueueEmpty(seqQueue &Q)
▪//3. 判断队列满, 满则返回true
bool QueueFull(seqQueue &Q)
▪//4. 取队头元素, 用x返回队头元素,返回true;空队列则返回false
Bool QueueHead(seqQueue &Q, elementType &x)
▪//5. 入队列,在队尾插入新元素x (流程图)
bool pushQueue (seqQueue &Q, elementType x)
▪//6. 出队列,用x带回队头元素,并在队头删除,返回true,队列空则返回false(流程图)bool popQueue (seqQueue &Q, elementType &x)
▪//7. 输出队列,从队头到队尾依次输出
void printQueue(seqQueue Q)
(2)队列应用:利用队列操作打印杨辉三角形的前n行(如n=7)。
3.实验要求
(1)上机前交实验源程序(纸质版),由学习委员统一收好交老师(附上不交同学名单)。
(2)用一切你能想到的办法解决遇到的问题,培养解决问题的能力。
(3)实验课上进行答辩。
(4)实验报告当场交。报告内容包括:实验目的、实验内容、实验代码、实验输入输出结果以及实验体会供五部分。
3.主要算法
3.1 顺序存储结构
(1)结构定义:
#include
#include
#include
#include
#define OK 1
#define ERROR 0
#define OVERFLOW -2//定义宏参
#define MAXQSIZE 100//最大队列长度
typedef int QElemType;//引用整型数据类型别名
//顺序表的储存结构
typedef struct
{
QElemType *base;//初始化的动态分配内存空间
int front;//头指针
int rear;//尾指针
}SqQueue;
int N;
//======================函数声明=========================// int InitQueue(SqQueue &Q);//初始化
void creatQueue(SqQueue &Q,int n);//创建
int QueueLength(SqQueue &Q);//求长度
void EnQueue(SqQueue &Q,QElemType e);//入队
int DeQueue(SqQueue &Q);//出队
int QueueTraverse(SqQueue &Q);//显示队列
int GetHead(SqQueue Q);//取头元素
int DestroyQueue(SqQueue &Q);//销毁顺序表
int ClearQueue(SqQueue &Q);//清空顺序表
int yanghui(int n);//杨辉三角
int ElemptyQueue(SqQueue &Q);//判空
//======================函数声明=========================//
//构造空队列
int InitQueue(SqQueue &Q)
{//操作结果:构造一个空队列Q
printf("输入分配空间大小: ");
scanf(" %d",&N);
Q.base=(QElemType *)malloc(N*sizeof(QElemType));//动态分配内存空间,以下同样
if(!Q.base||N<0||N>MAXQSIZE)
{ //若n值不合理,则返回ERROR,以下同样
printf("构造失败!");
printf("\n\t\t按任意键返回主菜单!");
getch();
return ERROR;
}
Q.front=Q.rear=0;//队列设置为空,以下同样
printf("构造成功!");
printf("\n\t\t按任意键返回主菜单!");
getch();
return OK;
}
//初始化队列
int InitQue(SqQueue &Q,int n)
{ //操作结果:初始化一个空队列
Q.base=(QElemType *)malloc(n*sizeof(QElemType));
if(!Q.base||n<0||n>MAXQSIZE)
return ERROR;
Q.front=Q.rear=0;
return OK;
}
//创建队列
void creatQueue(SqQueue &Q,int n)
{ //初始条件:Q已经存在
//操作结果:向队列输入n个元素
int m;
if(!Q.base||n<0||n>N)
{
printf("初始化未完成或超出队列长度,无法创建!");
printf("\n\t\t按任意键返回主菜单!");
getch();
return;
}