数据结构课设队列程序.docx
- 文档编号:9155209
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:14
- 大小:80.24KB
数据结构课设队列程序.docx
《数据结构课设队列程序.docx》由会员分享,可在线阅读,更多相关《数据结构课设队列程序.docx(14页珍藏版)》请在冰豆网上搜索。
数据结构课设队列程序
成绩评定表
学生姓名
班级学号
专业
计算机科学与技术
课程设计题目
计算机外部输出设备(如显示器)和的CPU处理数据的速度不同。
按先来先服务的方式进行管理,设计缓冲队列,实现外设与CPU的匹配
评
语
组长签字:
成绩
日期
2015年12月15日
课程设计任务书
学院
信息科学与工程学院
专业
计算机科学与技术
学生姓名
班级学号
课程设计题目
计算机外部输出设备(如显示器)和的CPU处理数据的速度不同。
按先来先服务的方式进行管理,设计缓冲队列,实现外设与CPU的匹配。
实践教学要求与任务:
任务:
计算机外部输出设备(如显示器)和的CPU处理数据的速度不同。
按先来先服务的方式进行管理,设计缓冲队列,实现外设与CPU的匹配。
要求:
1)对相应的题目进行算法设计
2)编写源代码
3)上机调试
4)显示调试结果
5)写出实验总结工作计划与进度安排:
数据结构课程设计时间安排在教学第14周、第15周内完成,按上述题目要求完成查阅资料、程序设计、调试、运行等工作。
时间安排如下:
1、查阅资料、与初步设计;1-2天
2、整体功能设计、代码编码与初步调试。
1-3天
3、调试和软件功能的测试和验收。
1-3天
4、答辩与论文撰写。
1-2天
指导教师:
2015年11月28日
专业负责人:
2015年11月28日
学院教学副院长:
2015年11月28日
一、题目概述(内容及要求)
1.内容:
计算机外部输出设备(如显示器)和的CPU处理数据的速度不同。
按先来先服务的方式进行管理,设计缓冲队列,实现外设与CPU的匹配。
2.要求:
1)对相应的题目进行算法设计
2)编写源代码
3)上机调试
4)显示调试结果
二、功能分析
1.功能模块图
程序主要功能分为三个部分:
1,第一个部分为创建队列。
创建一个尾插的链表存储数据
2,第二部分为删除队列元素,根据队列特点,应从链表头部删除元素
3,第三部分为查询队列元素,经过查询经过一系列处理后,队列中的元素。
4,在程序的主体main函数中设计程序菜单,通过用户输入选择实现种种功能
2.程序流程图
Main函数流程设计图:
通过一个while循环来实现菜单的设计,内部用switch语句实现对不同功能的函数的调用。
三、设计
根据题目要求,是要设计一个队列程序,队列的特点为先进先出。
因此根据该特点我设计了一个尾插头删的链表。
数据在内存中链式存储,用一个Creat()函数实现对链表的创建。
Creat()函数代码如下:
structdata*Creat(structdata*front,structdata*real){
structdata*p;
real=(structdata*)malloc(sizeof(structdata));
p=real;
p->num=n+1;
printf("当前用户编号:
%d\n",p->num);
printf("输入证件尾号和用户姓名(中间都好分隔):
");
scanf("%d,%s",&p->realnum,&p->name);
while(p->realnum!
=0){
n+=1;
if(n==1){
front=p;
}
else{
real->next=p;
}
real=p;
p=(structdata*)malloc(sizeof(structdata));
p->num=n+1;
printf("当前用户编号:
%d\n",p->num);
printf("输入证件尾号和用户姓名(中间都好分隔,输入0退出):
\n");
scanf("%d,%s",&p->realnum,&p->name);
}
real->next=NULL;
return(front);
}
以上函数实现了队列的后进特点,而先出特点则由del()函数实现
del()函数代码如下:
structdata*del(structdata*front){
structdata*p=NULL;
if(front!
=NULL){
p=front->next;
front->next=NULL;
printf("第%d号用户:
%s业务办理完毕\n",front->num,front->name);
}
else
printf("当前无人排队办理业务!
!
!
\n");
return(p);
}
最后一部分为查看队列元素函数,代码如下:
voidprint(structdata*front){
structdata*p;
printf("现在排队办理业务的人有:
\n");
p=front;
if(front!
=NULL){
do{
printf("序号:
%d,:
%s\n",p->num,p->name);
p=p->next;
}while(p!
=NULL);
}
}
设计思路:
首先程序采用菜单,用户需要输入与操作相对应的序号选项来运行程序。
其次,在输入序号选项后,程序会执行相应的函数。
题目要求做一个队列程序,我把它想象作是一个排队程序。
(1)有人来挂号排队。
这时候就需要创建尾插链表函数。
这部分也就相当于计算机键盘录入。
(2)有人排队就需要有人处理。
所以设计了一个del()函数从链表的头部删除数据。
这部分就相当于计算机CPU处理数据。
(3)有时候需要查询当前还有多少人排队。
所以设计个一个print()函数将队列信息打印出来。
这部分相当于计算机显示器部分。
以此方式来实现题目要求的队列缓冲程序。
完整源代码:
#include
#include
#include
#defineN5
structdata*Creat(structdata*front,structdata*real);
structdata*del(structdata*front);
voidprint(structdata*front);
structdata{
intnum;
intrealnum;
charname[N];
structdata*next;
};
intn=0;//定义全局变量,记录队列长度
intmain(void)
{
structdata*front=NULL;
structdata*real=NULL;
while
(1){
printf("-----------------------------------------\n");
printf("--------1·挂号排队--------\n");
printf("--------2·业务办理--------\n");
printf("--------3·查询当前办理业务的人--------\n");
printf("-----------------------------------------\n");
intnum;
printf("请输入业务序号:
");
scanf("%d",&num);
system("cls");
switch(num){
case1:
front=Creat(front,real);break;
case2:
front=del(front);break;
case3:
print(front);break;
}
}
return0;
}
structdata*Creat(structdata*front,structdata*real){
structdata*p;
real=(structdata*)malloc(sizeof(structdata));
p=real;
p->num=n+1;
printf("当前用户编号:
%d\n",p->num);
printf("输入证件尾号和用户姓名(中间都好分隔):
");
scanf("%d,%s",&p->realnum,&p->name);
while(p->realnum!
=0){
n+=1;
if(n==1){
front=p;
}
else{
real->next=p;
}
real=p;
p=(structdata*)malloc(sizeof(structdata));
p->num=n+1;
printf("当前用户编号:
%d\n",p->num);
printf("输入证件尾号和用户姓名(中间都好分隔,输入0退出):
\n");
scanf("%d,%s",&p->realnum,&p->name);
}
real->next=NULL;
return(front);
}
structdata*del(structdata*front){
structdata*p=NULL;
if(front!
=NULL){
p=front->next;
front->next=NULL;
printf("第%d号用户:
%s业务办理完毕\n",front->num,front->name);
}
else
printf("当前无人排队办理业务!
!
!
\n");
return(p);
}
voidprint(structdata*front){
structdata*p;
printf("现在排队办理业务的人有:
\n");
p=front;
if(front!
=NULL){
do{
printf("序号:
%d,:
%s\n",p->num,p->name);
p=p->next;
}while(p!
=NULL);
}
}
四、运行与测试
1)运行后主菜单界面
图4.1程序运行图一
经运行,程序能正确显示菜单。
2)测试能否正确调用功能函数
图4.2程序运行图二
3)测试算法是否能够正确执行
图4.2程序运行图二
图4.3程序运行图三
图4.3程序运行图四
图4.3程序运行图五
经测试,算法能够正确执行,程序运行正确。
五、总结
课程设计过程中出现的技术难点和解决方法:
在进行课程设计过程中对题目不能够很好的理解。
题目内容略有抽象,无法直接具体实现,这需要我们将题目和显示生活进行联想。
才能更好的解决问题。
在课程设计中设计创建链表的程序,链表创建要实现尾插。
在设计过程中,由于指针较多,出现了混乱的情况,这就需要我们对于变量名字的定义要有含义,必要的地方要有注释。
在设计删除元素函数的时候,出现了只能删除第一个元素,之后的元素不能删除显示为没有队列元素可被删除。
经排查这种情况出现的原因为创建链表是首元素没有和后边的元素连接上。
导致创建了很多节点,但在实际链表中只有一个元素。
经过修改creat()函数后,问题解决。
在主函数中设置了一个清屏语句。
但是由于放置的位置不太合理。
导致del()函数和print()函数所显示在屏幕上的内容被清除,无法观察结果。
因此调整了清屏语句的位置。
课程设计期间的主要收获:
通过这次课程设计使我对数据结构有了更深的了解,也明白了数据结构在生活中的实际应用,每一个日常生活中的事情,都可以抽象为一种数据结构。
而我们程序设计的目的就是为了解决日常生活中遇到的问题。
因此学习数据结构尤为重要。
通过这次课设使我对程序设计的理解更深了。
对数据结构的理论知识和实现具体的程序的过程有了更多的经验,不再是单一的理论学习。
算法很重要,但是也要能把算法做出程序的能力。
有时我们对于算法的理解已经很透彻,但是却无法编成具体的程序。
或者编出来却有各种各样的bug。
因此我们要不断学习数据结构的同时也不要忘记对于实践的的练习。
所有的算法都是为了程序设计都是为了解决现实生活中的问题。
所以我们不要忘了根本的问题。
课设对我们来说是一个很大的锻炼,我们可以学习到很多知识,通过课设,不仅懂得了相关算法,同时也开拓了自己的视野,通过去图书馆查询借阅相关图书,和与同学之间相互探讨,学到了比课设题目要求的还要多的其他知识。
参考文献
[1]《数据结构案例分析与习题解答》李筠、姜学军清华大学出版社,2013
[2]《数据结构与算法》严蔚敏清华大学出版社,2010
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 队列 程序