队列实验报告。
小组成员:******xx日期:******xx
1、需求分析(***)
1.链队列。
1)在本演示程序中,首先要链队列添加一个头结点,并判断队列是否为空,它只允许在表的一端进行插入,而在另一端删除元素,允许插入的一段叫队尾,允许删除的一端则为对头,接着访问队列中所有元素,并输出,输出是每个元素之间用空格来完成。最后销毁队列,释放空间。
2)演示程序以用户和计算机的对话方式执行,即在计算机终端上显示“欢迎来到链队列”“元素入队”“元素出队”“销毁队列”“清空队列”之后。由用户在键盘上输入演示程序中规定的运算命令,相应的运算数据和显示结果显示在其后。
3)程序执行的命令包括:
欢迎来到链队列。
1输出队列长度。
2元素入队。
3元素出队。
4销毁队列。
5清空队列。
6对头元素。
7退出链队列。
4)测试数据。入队 1
分别执行“元素入队”“元素出队”“销毁队列”“清空队列”等操作。
2.顺序队列。
1)在本演示程序中,首先要顺序队列添加一个头结点,并判断队列是否为空,它只允许在表的一端进行插入,而在另一端删除元素,允许插入的一段叫队尾,允许删除的一端则为对头,接着访问队列中所有元素,并输出,输出是每个元素之间用空格来完成。
2)演示程序以用户和计算机的对话方式执行,即在计算机终端上显示“欢迎来到链队列”“元素入队”“元素出队”“取得头结点”“输出显示”之后。由用户在键盘上输入演示程序中规定的运算命令,相应的运算数据和显示结果显示在其后。
3)程序执行的命令包括:
欢迎来到顺序队列。
1入队。2出队。
3判断是否为空。
4取得头结点。
5输出显示。
6退出顺序队列。
4)测试数据。入队 1
分别执行“元素入队”“元素出队”等操作。
3循环队列。
1)在本演示程序中,首先要顺序队列添加一个头结点,并判断队列是否为空,初始化建空队列时,令front=rear=0,每当插入新的队列尾元素时,“尾指针增1”;每当删除队列头元素时,“头指针增1”。
接着访问队列中所有元素,并输出,输出是每个元素之间用空格来完成。
2)演示程序以用户和计算机的对话方式执行,即在计算机终端上显示“欢迎来到链队列”“元素入队”“元素出队”“取得头结点”“输出显示”之后。由用户在键盘上输入演示程序中规定的运算命令,相应的运算数据和显示结果显示在其后。
3)程序执行的命令包括:
欢迎来到循环队列。
1入队。2出队。
3判断是否为空。
4取得头结点。
5输出显示。
6退出顺序队列。
4)测试数据。入队 1
分别执行“元素入队”“元素出队”等操作。
2.概要设计(***x)
为实现上述算法,需要顺序表的抽象数据类型,抽象数据类型定义如下:
adt queue
数据关系: r=
基本操作:initqueue (&q)
操作结果:构造一个空队列。
destroyqueue (&q)
初始条件:队列q已存在。
操作结果:队列q已被销毁。
clearqueue(&q)
初始条件:队列q已存在。
操作结果:将q清为空队列。
queueempty(q)
初始条件:队列q已存在。
操作结果:若q为空队列,则返回true,否则false。
queuelength(q)
初始条件:队列q已存在。
操作结果:返回q元素的个数,即队列的长度。
gethead(q,&e)
初始条件:q为非空队列。
操作结果:用e返回q的队头元素。
enqueue (&q,e)
初始条件:队列q已存在。
操作结果:插入e返回q的新的队尾元素。
dequeue (&q,&e)
初始条件:q为非空队列。
操作结果:删除q的队头元素,并用e返回其值。
adt queue
2.单链队列。
typedefstructqnode
qelemtype;
structqnode *next;//指针域。
qnode,*queueptr;
typedefstruct
3)元素的入队。
int ensqueue1(squeue1 *q, datatype e) /入队*/
4)元素的出队。
int desqueue1(squeue1 *q,datatype *e) /出队*/
*e=q->data[q->front];
q->front=(q->front+1)%maxsize;
return 1;
5)判断队列是否为空。
int queueempty1(squeue1 q) /判断是否为空。
6)队头元素的取值的算法。
int gethead1(squeue1 *q,datatype *e) /取对头元素。
7)遍历顺序队列的算法。
void display1(squeue1 q) /遍历顺序对列。
printf("");
2. 链式队列的实现和运算。
1)构造空队列的算法。
void initqueue2(linkqueue *q)
//构造一个空队列q
q->front=q->rear=malloc(sizeof(qnode));
if(!q->front)
exit(1);
q->front->next=null;
2)元素的入队算法。
void enqueue2(linkqueue *q, qelemtype e)//将元素e进队。
queueptr p;
p=(queueptr)malloc(sizeof(qnode));创建新节点。
if(!p)//如果内存分配成功。
exit(1);
p->data=e;//初始化新节点数据为e
p->next=null;
q->rear->next=p;
q->rear=p;
3)元素的出队的算法。
int dequeue2(linkqueue *q,qelemtype e)//队头结点出队,将出队的元素存入e
queueptr p;
if(q->front==q->rear)//队列为空。
return 0;
p=q->front->next;//初始化temp为要出队的结点指针。
if(q->front->next==q->rear)//要出队的结点为最后一个结点。
q->rear=q->front;
e=p->data;//要出队的数据元素为e
q->front->next=p->next;//使下一个结点变为对头。
free(p);/删除要出队的结点。
return e;
4)队列的长度算法。
void queuelength2(linkqueue *q)//返回队列长度。
queueptr p;
int i=0;
p=q->front->next;
while(p)
printf("链队列长度为:%d",i);
5)队列的销毁。
void destroyqueue2(linkqueue *q)
while(q->front)
q->rear=q->front->next;
数据结构实验报告排序
昆明理工大学信息工程与自动化学院学生实验报告。2011 2012学年第1学期 课程名称 数据结构 用c语言描述开课实验室 计算中心室 2011年月日。1 实验内容和目的。目的 了解和初步掌握排序的概念和一些有关知识,大体上掌握了排序方法的基本思想 排序过程和实现算法 以及各种算法的时间复杂度和空间复...
数据结构完整实验报告
数据结构与算法。实验报告。实验名称 数据结构基础。实验地点。实验日期 指导教师。学生班级 学生姓名。学生学号。提交日期。2009年12月计算机科学与技术系。实验一学生成绩分析程序4 1.1 上机实验的问题和要求 需求分析4 1.2 程序设计的基本思想,原理和算法描述4 1.3 调试和运行程序过程中产...
2019数据结构实验报告
内容分析 用长度为52的线性表来表示52张牌,每张牌的信息包含两部分 牌的位置序号和牌的正 反标识。由于线性表的长度和表内元素相对固定,因此,线性表可采用顺序存储结构。线性表元素的序号即各张牌的位置序号。其中,card表示牌的位置序号,为方便起见,令其取值为整数1至52。flag表示牌的正 反标识,...