数据结构队列实验报告.docx
- 文档编号:2318817
- 上传时间:2022-10-28
- 格式:DOCX
- 页数:50
- 大小:1.99MB
数据结构队列实验报告.docx
《数据结构队列实验报告.docx》由会员分享,可在线阅读,更多相关《数据结构队列实验报告.docx(50页珍藏版)》请在冰豆网上搜索。
数据结构队列实验报告
队列实验报告
小组成员:
xxxxxxxx日期:
xxxxxxxx
1、需求分析(xxx)
1.链队列
1)在本演示程序中,首先要链队列添加一个头结点,并判断队列是否为空,它只允许在表的一端进行插入,而在另一端删除元素,允许插入的一段叫队尾,允许删除的一端则为对头,接着访问队列中所有元素,并输出,输出是每个元素之间用空格来完成。
最后销毁队列,释放空间。
2)演示程序以用户和计算机的对话方式执行,即在计算机终端上显示“欢迎来到链队列”“元素入队”“元素出队”“销毁队列”“清空队列”之后。
由用户在键盘上输入演示程序中规定的运算命令,相应的运算数据和显示结果显示在其后。
3)程序执行的命令包括:
欢迎来到链队列
1输出队列长度
2元素入队
3元素出队
4销毁队列
5清空队列
6对头元素
7退出链队列
4)测试数据
入队1
2
3
4
5
分别执行“元素入队”“元素出队”“销毁队列”“清空队列”等操作。
2.顺序队列
1)在本演示程序中,首先要顺序队列添加一个头结点,并判断队列是否为空,它只允许在表的一端进行插入,而在另一端删除元素,允许插入的一段叫队尾,允许删除的一端则为对头,接着访问队列中所有元素,并输出,输出是每个元素之间用空格来完成。
2)演示程序以用户和计算机的对话方式执行,即在计算机终端上显示“欢迎来到链队列”“元素入队”“元素出队”“取得头结点”“输出显示”之后。
由用户在键盘上输入演示程序中规定的运算命令,相应的运算数据和显示结果显示在其后。
3)程序执行的命令包括:
欢迎来到顺序队列
1入队
2出队
3判断是否为空
4取得头结点
5输出显示
6退出顺序队列
4)测试数据
入队1
2
3
4
5
分别执行“元素入队”“元素出队”等操作。
3循环队列
1)在本演示程序中,首先要顺序队列添加一个头结点,并判断队列是否为空,初始化建空队列时,令front=rear=0,每当插入新的队列尾元素时,“尾指针增1”;每当删除队列头元素时,“头指针增1”。
接着访问队列中所有元素,并输出,输出是每个元素之间用空格来完成。
2)演示程序以用户和计算机的对话方式执行,即在计算机终端上显示“欢迎来到链队列”“元素入队”“元素出队”“取得头结点”“输出显示”之后。
由用户在键盘上输入演示程序中规定的运算命令,相应的运算数据和显示结果显示在其后。
3)程序执行的命令包括:
欢迎来到循环队列
1入队
2出队
3判断是否为空
4取得头结点
5输出显示
6退出顺序队列
4)测试数据
入队1
2
3
4
5
分别执行“元素入队”“元素出队”等操作。
2.概要设计(xxxx)
⒈为实现上述算法,需要顺序表的抽象数据类型,抽象数据类型定义如下:
ADTQueue{
数据对象:
D={ai|ai∈ElemSet,i=1,2,3...,n,n>=0}
数据关系:
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返回其值。
}ADTQueue
2.单链队列
typedefstructQNode
{
QElemType;
structQNode*next;//指针域
}QNode,*QueuePtr;
Typedefstruct{
QueuePtrfront;
QueuePtrrear;
}LinkQueue;
StatusInitQueue(LinkQueue&Q)
//构造一个空队列。
StatusDestroyQueue(LinkQueue&Q)
//销毁队列Q,Q不存在。
StatusClearQueue(LinkQueue&Q)
//将Q清为空队列。
StatusQueueEmpty(LinkQueueQ)
//若Q为空队列,则返回TRUE,否则FALSE。
intQueueLength(LinkQueueQ)
//返回Q元素的个数,即队列的长度。
StatusGetHead(LinkQueueQ,QElemType&e)
//若队列不为空,则用e返回Q的队头元素,并返回OK;否则返回ERROR。
StatusEnQueue(LinkQueue&Q,QElemTypee)
//插入e返回Q的新的队尾元素。
StatusDeQueue(LinkQueue&Q,QElemType&e)
//若队列不空,则删除Q的队头元素,并用e返回其值,并返回OK;否则返回ERROR。
三.详细设计(xxx)
1.顺序队列的实现和运算
1)元素的类型
typedefstruct
{
Datatypedata[MAXSIZE];
intfront,rear;
}Squeue;
2)空的队列的构造
voidInitSqueue(Squeue*p)/*初始化队列*/
{
p->front=0;
p->rear=0;
}
3)元素的入队
intEnsqueue1(Squeue1*q,Datatypee)/*入队*/
{
if((q->rear+1)%MAXSIZE==q->front)
{
printf("\n队列已满\n");
return0;
}
4)元素的出队
intDeSqueue1(Squeue1*q,Datatype*e)/*出队*/
{
if(q->front==q->rear)
{
printf("队列已空,无法出队!
");
return0;
}
*e=q->data[q->front];
q->front=(q->front+1)%MAXSIZE;
return1;
}
5)判断队列是否为空
intQueueEmpty1(Squeue1q)//判断是否为空
{
if(q.front==q.rear)
return1;
else
return0;
}
6)队头元素的取值的算法
intGethead1(Squeue1*q,Datatype*e)//取对头元素
{
if(q->front==q->rear)
{
printf("队列已空,无法出队!
");
return0;
}
else
*e=q->data[q->front];
return1;
}
7)遍历顺序队列的算法
voiddisplay1(Squeue1q)//遍历顺序对列
{
printf("此队列数据为:
\n");
if(q.front==q.rear)
printf("此队列为空!
");
else
{
while(q.front { printf("%d\t",q.data[q.front]); q.front=(q.front+1)%MAXSIZE; } printf("\n"); } 2.链式队列的实现和运算 1)构造空队列的算法 voidInitQueue2(LinkQueue*q) {//构造一个空队列Q q->front=q->rear=malloc(sizeof(QNode)); if(! q->front) exit (1); q->front->next=NULL; } 2)元素的入队算法 voidEnQueue2(LinkQueue*q,QElemTypee)//将元素e进队 { QueuePtrp; p=(QueuePtr)malloc(sizeof(QNode));//创建新节点 if(! p)//如果内存分配成功 exit (1); p->data=e;//初始化新节点数据为e p->next=NULL; q->rear->next=p; q->rear=p; } 3)元素的出队的算法 intDeQueue2(LinkQueue*q,QElemTypee)//队头结点出队,将出队的元素存入e { QueuePtrp; if(q->front==q->rear)//队列为空 return0; 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);//删除要出队的结点 returne; } 4)队列的长度算法 voidQueueLength2(LinkQueue*q)//返回队列长度 { QueuePtrp; inti=0; p=q->front->next; while(p) { ++i; p=p->next; } printf("链队列长度为: %d\n",i); } 5)队列的销毁 voidDestroyQueue2(LinkQueue*q) { while(q->front) { q->rear=q->front->next; free(q->front); q->front=q->rear; if(! q->rear) free(q->rear); } free(q->front); } 6)队列的输出算法 voidoutput2(LinkQueue*q)//输出队列 { QueuePtrp; p=q->front->next; printf("链队列元素依次为: "); while(p) { printf("%d->",p->data); p=p->next; } printf("\n"); } 7)队列的清空的算法 voidClear2(LinkQueue*q)//清空队列 { QueuePtrtemp=q->front->next; while(temp) { QueuePtrtp=temp; temp=temp->next; free(tp); } temp=q->front; q->front=q->rear=NULL; free(temp); } 8)返回对头元素的算法 int
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 队列 实验 报告