课程设计 队列问题doc.docx

上传人:b****6 文档编号:7133605 上传时间:2023-01-21 格式:DOCX 页数:16 大小:109.51KB
下载 相关 举报
课程设计 队列问题doc.docx_第1页
第1页 / 共16页
课程设计 队列问题doc.docx_第2页
第2页 / 共16页
课程设计 队列问题doc.docx_第3页
第3页 / 共16页
课程设计 队列问题doc.docx_第4页
第4页 / 共16页
课程设计 队列问题doc.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

课程设计 队列问题doc.docx

《课程设计 队列问题doc.docx》由会员分享,可在线阅读,更多相关《课程设计 队列问题doc.docx(16页珍藏版)》请在冰豆网上搜索。

课程设计 队列问题doc.docx

课程设计队列问题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分。

指导教师评语:

 

成绩:

指导教师签名:

 

年月日

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1