课程设计 队列问题doc.docx
- 文档编号:7133605
- 上传时间:2023-01-21
- 格式:DOCX
- 页数:16
- 大小:109.51KB
课程设计 队列问题doc.docx
《课程设计 队列问题doc.docx》由会员分享,可在线阅读,更多相关《课程设计 队列问题doc.docx(16页珍藏版)》请在冰豆网上搜索。
课程设计队列问题doc
课程设计报告
题目:
《队列问题》
院系:
计算机科学与应用系
专业年级:
计算机科学与技术
学号:
学生姓名:
指导老师:
2013年6月29日
1、需求分析
1.1功能需求
链队列基本操作的实现:
链队列的初始化,生成一个空链队列;链队列的撤消,即删除队列中的所有结点,仅留下指针结点;
链队列的入队操作,即在已知队列的队尾插入一个元素e,即修改队尾指针;
链队列的出队操作,即返回队首结点的元素值并删除队首结点;
返回元素的第一个值;
设计一个菜单,具有上述要求的所有功能、退出系统等最基本的功能。
1.2输入的形式和输入值的范围、输出的形式
程序输入:
根据主界面提示,输入所选的操作,并根据提示按“2”键输入元素。
若为非法输入,系统会做出提示。
程序输出:
输入想要操作的选项,便能输出与之对应的结果,接着输入下次操作选项,按“0”退出主页面。
1.3设计内容
1.建立一个空链队列;
2.插入一个元素;
3.删除元素;
4.返回元素的第一个值;
5.消除队列;
1.4运行环境
(1)WINDOWS7/XP系统
(2)visualC++6.0编译环境
2、概要设计
2.1该系统的功能简介
实现链队列的初始化,生成一个空链队列;链队列的撤消,即删除队列中的
所有结点,仅留下指针结点。
链队列的入队操作,即在已知队列的队尾插入一个元素e,即修改队尾指针。
链队列的出队操作,即返回队首结点的元素值并删除队首结点;设计一个菜单,具有上述要求的所有功能、退出系统等最基本的功能。
2.2总体程序框图
进入程序
构
建
队
列
插入元素
删
除
元
素
消除队列
退出程序
返回元素
3、详细设计
3.1构造空队列
StatusInitqueue(Linkqueue&Q)
{
Q.front=Q.rear=(Queueptr)malloc(sizeof(Qnode));
if(!
Q.front)return(OVERFLOW);//存储分配失败
Q.front->next=NULL;
returnOK;
}//构造一个空队列
3.2消除队列
StatusDestroyqueue(Linkqueue&Q)
{
while(Q.front)
{
Q.rear=Q.front->next;
free(Q.front);
Q.front=Q.rear;
}
returnOK;
}//销毁队列
3.3插入新元素
StatusEnqueue(Linkqueue&Q,Qelemtypee)//插入元素e,为Q新的队尾元素
{
Queueptrp;
p=(Queueptr)malloc(sizeof(Qnode));
if(!
p)return(OVERFLOW);
p->data=e;
p->next=NULL;
Q.rear->next=p;
Q.rear=p;
returnOK;
}//插入新元素
3.4删除队头元素
StatusDequeue(Linkqueue&Q,Qelemtype&e)
{
Queueptrp;
//若队列不空,则删除Q的对头元素,用e返回其值,并返回OK
//否则返回ERROR
if(Q.front==Q.rear)returnERROR;
p=Q.front->next;
e=p->data;
Q.front->next=p->next;
if(Q.rear==p)Q.rear=Q.front;
free(p);
returnOK;
}//删除队头元素
3.5返回队头元素
Statusgetfirst(Linkqueue&Q)
{
if(Q.front==Q.rear)
{
returnERROR;
}
else
returnQ.front->next->data;
}//返回队列的第一个元素
3.6主函数
main()
{
LinkqueueQ;
Qelemtypee,n,i;
charselect;
do
{
printf("请输入您的选择:
\n\n");
printf("1.构造一个空队列\n");
printf("2.向队列中插入元素\n");
printf("3.删除队列中的元素\n");
printf("4.销毁队列\n");
printf("5.返回队列的第一个元素\n");
printf("0.退出程序\n");
printf("您的选择是:
");
select=getchar();
switch(select)
{
case'1':
if(Initqueue(Q))
printf("构造成功\n");
else
printf("构造失败\n");
break;
case'2':
printf("你想插入多少个元素:
");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&e);
if(Enqueue(Q,e)!
=OK)returnERROR;
}
break;
case'3':
if(Dequeue(Q,e))
printf("你删除的对头元素是:
%d\n",e);
else
printf("删除失败\n");
break;
case'4':
if(Destroyqueue(Q))
printf("销毁队列成功\n");
else
printf("销毁失败\n");
break;
case'5':
{
inta;
printf("队列的第一个元素是:
\n");
a=getfirst(Q);
printf("%d",a);
}
break;
default:
printf("您的输入不服规范,请重新输入!
");
}
getchar();
printf("\n\n");
}while(select!
='0');
}
3.7函数的调用关系图
开始
Main函数
Initqueue
Enqueue
Destroyqueue
函数
Getfirst函数
结束
函数的关系调用图
4、调试分析
4.1、问题的解决
在调试过程中,出现错误,根据visualC++6.0的检错找到错误所在,然后
错误行附近寻找错误所在,进而改正错误;遇到找不到和不能改正的错误,就向老师,同学,网络寻求帮助。
4.2、经验和体会
必须牢固掌握基础知识。
由于C语言是大一所学知识,有所遗忘,且未掌握好这学期所学的《数据结构》这门课,所以在实习之初感到棘手。
不知如何下手,但在后来的实习过程中自己通过看书和课外资料,并请教其他同学,慢慢地对C语言和数据结构知识有所熟悉。
这时才逐渐有了思路。
所以,这次实习之后,我告诫自己:
今后一定要牢固掌握好专业基础知识。
必须培养严谨的科学态度。
自己在编程时经常因为一些类似于“少了分号”的小错误而导致错误,不够认真细致,这给自己带来了许多麻烦。
编程是一件十分严谨的事情,容不得马虎。
所以在今后自己一定要培养严谨的科学态度。
我想这不仅是对于程序设计,做任何事都应如此。
这次课程设计也让我充分认识到《数据结构》这门课的重要性。
它给我们一个思想和大纲,让我们在编程时容易找到思路,不至于无章可循。
同时它也有广泛的实际应用。
在课程设计时遇到了很多的问题,在老师的帮助,和对各种资料的查阅中,将问题解决,培养了我自主动手,独立研究的能力,为今后在学习工作中能更好的发展打下了坚实的基础。
两周的课程设计很短暂,但其间的内容是很充实的,在其中我学习到了很多平时书本中无法学到的东西,积累了经验,锻炼了自己分析问题,解决问题的能力,并学会了如何将所学的各课知识融会,组织,来配合学习,两周中我收益很大,学到很多。
5、用户使用说明
在VC环境下编译连接后,根据主页面的提示输入选择,第一步,先输入“1”构造一个空队列,接着向空对列中插入元素,此时选“5”返回第一个元素,如果此时选“3”,删除队头元素,再返回首元素时,返回删除后的下一个元素。
6、测试结果
6.1主界面
6.2建立队列
6.3插入元素
6.4返回队头元素
6.5删除元素
6.5销毁队列
7、附录
#include"stdio.h"
#include"stdlib.h"
#include"stdio.h"
#defineTRUE1
#defineFALSE0
#defineOK1
#defineERROR0
#defineINFEASIBLE-1
#defineOVERFLOW-2
typedefintQelemtype;
typedefintStatus;
typedefstructQnode
{
Qelemtypedata;
structQnode*next;
}Qnode,*Queueptr;
typedefstruct
{
Queueptrfront;
Queueptrrear;
}Linkqueue;
StatusInitqueue(Linkqueue&Q);
StatusDestroyqueue(Linkqueue&Q);
StatusEnqueue(Linkqueue&Q,Qelemtypee);
StatusDequeue(Linkqueue&Q,Qelemtype&e);
Statusgetfirst(Linkqueue&Q);
StatusInitqueue(Linkqueue&Q)
{
Q.front=Q.rear=(Queueptr)malloc(sizeof(Qnode));
if(!
Q.front)return(OVERFLOW);
Q.front->next=NULL;
returnOK;
}//构造一个空队列
StatusDestroyqueue(Linkqueue&Q)
{
while(Q.front)
{
Q.rear=Q.front->next;
free(Q.front);
Q.front=Q.rear;
}
returnOK;
}//销毁队列
StatusEnqueue(Linkqueue&Q,Qelemtypee)
{
Queueptrp;
p=(Queueptr)malloc(sizeof(Qnode));
if(!
p)return(OVERFLOW);
p->data=e;
p->next=NULL;
Q.rear->next=p;
Q.rear=p;
returnOK;
}//插入新元素
StatusDequeue(Linkqueue&Q,Qelemtype&e)
{
Queueptrp;
if(Q.front==Q.rear)returnERROR;
p=Q.front->next;
e=p->data;
Q.front->next=p->next;
if(Q.rear==p)Q.rear=Q.front;
free(p);
returnOK;
}//删除队头元素
Statusgetfirst(Linkqueue&Q)
{
if(Q.front==Q.rear)
{
returnERROR;
}
else
returnQ.front->next->data;
}//返回队列的第一个元素
#include"stdio.h"
main()
{
LinkqueueQ;
Qelemtypee,n,i;
charselect;
do
{
printf("请输入您的选择:
\n\n");
printf("1.构造一个空队列\n");
printf("2.向队列中插入元素\n");
printf("3.删除队列中的元素\n");
printf("4.销毁队列\n");
printf("5.返回队列的第一个元素\n");
printf("0.退出程序\n");
printf("您的选择是:
");
select=getchar();
switch(select)
{
case'1':
if(Initqueue(Q))
printf("构造成功\n");
else
printf("构造失败\n");
break;
case'2':
printf("你想插入多少个元素:
");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&e);
if(Enqueue(Q,e)!
=OK)returnERROR;
}
break;
case'3':
if(Dequeue(Q,e))
printf("你删除的对头元素是:
%d\n",e);
else
printf("删除失败\n");
break;
case'4':
if(Destroyqueue(Q))
printf("销毁队列成功\n");
else
printf("销毁失败\n");
break;
case'5':
{
inta;
printf("队列的第一个元素是:
\n");
a=getfirst(Q);
printf("%d",a);
}
break;
default:
printf("您的输入不服规范,请重新输入!
");
}
getchar();
printf("\n\n");
}while(select!
='0');
}
参考文献
[1]赵国玲.C语言与数据结构[M].北京:
电子工业出版社,
[2]严蔚敏,吴伟民.数据结构(C语言版)[M].北京:
清华大学出版社,
[3]严蔚敏.数据结构C语言[M].北京:
清华大学出版社,
[4]谭浩强.C程序设计指导[M].北京:
清华大学出版社,
[5]潘新民,王燕芳.微型计算机控制技术[M],第2版.北京:
电子工业出版社
致谢
在此谨对那些无私帮助我的同学以及无私教育我的辛勤的老师及学院领导表示感谢,谢谢你们的帮助。
每一个语句、每一个算法,都来自于你们的无私帮助及辛勤教诲。
《数据结构课程设计》评分标准
课程名称:
数据结构课程设计 指导教师:
傅尔胜
姓名
赵永峰
性别
男
学号
121006237
班级
1210062
程序运行情况
(占总成绩20%)
□能正确运行(20分)
□基本能正确运行(15分)
□能运行但结果不完善(10分)
程序功能的完善程度
(占总成绩10%)
□完善(10分)
□基本完善(8分)
□不完善(5分)
程序结构的合理性
(占总成绩10%)
□合理(10分)
□基本合理(8分)
□不太合理(5分)
对问题的答辩情况
(占总成绩40%)
□概念正确有创新(40分)
□能正确回答所有问题(35分)
□基本能正确回答(30分)
□部分问题回答概念不清晰(20分)
学生的工作态度与独立工作能力
(占总成绩10%)
□工作态度认真能独立完成任务(10分)
□工作态度认真但独立性较差(8分)
□工作态度基本认真但缺乏独立性(5分)
设计报告的规范性
(占总成绩10%)
□符合规范(10分)
□基本符合规范(8分)
□规范性较差(5分)
成绩等级
得分
优秀:
90分~100分;良好:
80分~89分;中等:
70~79分;
及格:
60~69分;不及格0分~59分。
指导教师评语:
成绩:
指导教师签名:
年月日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 队列问题doc 队列 问题 doc