数据结构课程设计说明书Word下载.docx
- 文档编号:16220128
- 上传时间:2022-11-21
- 格式:DOCX
- 页数:12
- 大小:140.39KB
数据结构课程设计说明书Word下载.docx
《数据结构课程设计说明书Word下载.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计说明书Word下载.docx(12页珍藏版)》请在冰豆网上搜索。
朱赖红,男,信息工程学院教师,讲师。
正文
栈是这样一种数据类型,其主要属性是由支配其元素的插入与删除的规则来决定的,被删除或移去的元素只能是最后插入的,即所谓具有后进先出(LIFO)性质或规范。
3.1设计的目的和意义
我们是计算机科学与技术专业的本科生,《数据结构》是我们重要的必修课程。
当代社会学要大学培养出理论扎实,动手实践能力强的大学生。
所以,本次课程设计的目的就在于通过一次实践性的活动加深对这门课程的理解,使我们在感性的认识上进一步升华为理性的认识。
为后继课程的学习打下坚实的基础。
马克思主义唯物辩证法认为,实践是连接客观实在和人主观意识的通道和桥梁。
物质对意识的作用以及意识对物质的反作用都蕴含在实践活动当中。
也就是,实践是检验真理的唯一标准。
对这门课的学习状况的好坏,用一次课程设计便可以检验出来。
而这,就是本次我们进行设计的意义之所在。
3.2目标和总体方案
栈是一种受限制的线性表,具体表现在访问栈的只能按照“后进先出”的原则,即压入栈的数据元素不能以任意的方式进行访问和弹出栈。
最先进入栈的数据元素若要弹出堆栈只能等到其上一个数据元素出栈以后方可出栈。
本次设计的目标在于将栈的这一特殊的访问规则和特殊的操作用程序语言形象地再现和描述出来。
于是特制订了一个总体的方案。
由于时间只有十天,故做了如下的计划安排,将这项工程分为两大部分:
程序的设计和程序的调试。
首先在程序的设计部分由分为几个步骤:
第一步:
查阅有关数据结构栈操作的资料,用半天的时间。
第二步:
设计这个项目的整体架构和算法。
用一到两天的时间。
第三步:
选择一门程序设计语言进行算法的描述。
两天的时间。
其次,进行程序的调试。
用一天。
3.3设计方法和内容
“工欲善其事,必先利其器”。
有了总体方案后必须用一个事半功倍的设计方法来提高程序设计的效率。
在这个项目的设计上,笔者选择了C语言作为算法的描述语言,因为C语言具有丰富的表达能力以及代码的高效性,并且有着良好的移植性和灵活性。
同时,采用“自顶向下,个个击破”的程序设计思路和思想,充分运用C语言强大的功能。
笔者将这个项目整体设分成了两个模块。
一个是功能函数模块群,主要实现设计方案中的具体功能,是整个项目的执行部分;
另一个是主函数模块,主要实现对数据流和控制流的控制,使整个项目的控制部分。
这两大模块有机的结合共同构成了这个项目的全部面貌。
3.3.1硬件环境
微型计算机:
联想台式品牌机
中央处理器:
Pentuim4主频:
3.0GHz
主存容量:
512M
硬盘容量:
80G
3.3.2软件环境
WindowsXP操作系统
MicrosoftNotePad记事本程序
MicrosoftVisualC++编译器
3.3.3设计流程图
图3-1程序流程图
3.3.4设计内容
一、程序设计的基本算法介绍
1、栈是一种只能在叫做栈的一段进行进栈或者出栈操作的线性数据结构。
栈的主要特点是”后进先出”,即后进栈的元素先处理。
2、栈的基本操作:
(1)置空栈initStack(s);
设置一个空栈S。
(2)进栈push(S,x):
将元素x进到栈S中。
(3)gettop(S,x):
将栈s的栈顶元素赋给x,栈指针递减。
(4)pop(s,x):
将栈s的栈顶元素赋给x,栈指针递减。
(5)判断栈空stackempty(s):
若栈为空,返回1,否则返回0
3、通常栈用顺序表存储,分配一块连续的内存区域存放栈中元素,并用一个变量指向当前的栈顶。
假设栈的元素个数最大不超过整数MaxSize,所有的元素都具有同一数据类型ElemType,则可用下列方式来定义栈类型stack:
Typedefstruct
{
Elemtypee[MAXSIZE];
Inttop;
}Stack;
二、程序中涉及的基本算法
栈是只能在某一端插入和删除的特殊线性表。
用桶堆积物品,先堆进来的压在底下,随后一件一件往堆。
取走时,只能从上面一件一件取。
堆和取都在顶部进行,底部一般是不动的。
栈就是一种类似桶堆积物品的数据结构,进行删除和插入的一端称栈顶,另一堆称栈底。
插入一般称为进栈(PUSH),删除则称为退栈(POP)。
栈也称为后进先出表(LIFO表。
1、进栈(PUSH)算法
(1)若TOP≥n时,则给出溢出信息,作出错处理(进栈前首先检查栈是否已满,满则溢出;
不满则作②);
(2)置TOP=TOP+1(栈指针加1,指向进栈地址);
(3)S(TOP)=X,结束(X为新进栈的元素);
2、退栈(POP)算法
(1)若TOP≤0,则给出下溢信息,作出错处理(退栈前先检查是否已为空栈,空则下溢;
不空则作②);
(2)X=S(SOP),(退栈后的元素赋给X);
(3)TOP=TOP-1,结束(栈指针减1,指向栈顶)。
3.4程序的设计思想和内容
3.4.1程序设计的初始运行环境
这个项目是由主函数模块和功能函数模块组成的。
其中主函数模块是项目的控制部分,很重要的一个作用就是对整个程序的初始化功能。
在设计初始运行环境时,为了每一次栈操作后都可以进行对程序的初始化,采用了do…while循环语句构成一个无限循环,使得每一次栈操作之后都可以将程序初始化重新选择对栈的另一个操作,例如:
选择2,将若干个数据压入栈中之后,程序便又回到了初始的界面,我们可以选择4进行出栈操作。
代码如下:
main()
structSqStack*q;
intnumber,u=1,n;
inti,y,cord;
ElemTypea;
intb[100];
voidOutStack(structSqStackS);
voidInitStack(structSqStack*p);
voidPush(structSqStack*p,ElemTypex);
ElemTypePop(structSqStack*p);
ElemTypeGetTop(structSqStack*p);
do{
printf("
\n"
);
\n主菜单:
1初始化顺序栈2插入一个元素3删除栈顶元素4取栈顶元素5退出\n"
\n[请选择]:
"
scanf("
%d"
&
cord);
switch(cord)
{
case1:
{ //栈的初始化
q=(structSqStack*)malloc(sizeof(structSqStack));
InitStack(q);
OutStack(q);
}break;
case2:
{//入栈操作
请输入你想插入数据的个数:
number);
\n你所要插入的数据个数为%d个\n"
number);
while(u<
=number){
\n请输入要插入的数据a="
scanf("
a);
\n这是你第%d个输入的数据:
"
u);
b[u]=a;
Push(q,a);
u++;
}
\n你的输入顺序为:
printf("
for(n=1;
n<
=number;
n++)
第%2d个输入的是:
%6d\n"
n,b[n]);
\n入栈的顺序:
OutStack(q);
\n\n入栈操作结束,现在栈中已经有%d个数据,结果见菜单栏上部!
}break;
…………………
case5:
exit(0);
}
}while(cord<
=5);
}
具体运行截面如下图:
图3-2界面的循环初始化
3.4.2栈的初始化
在栈的初始化时,采用置空栈的形式,其具体代码如下:
voidInitStack(structSqStack*p)
if(!
p)
Eorror"
S.top=0;
}
3.4.3栈的插入
栈是一种先进后出的数据类型,所以他的插入是从栈顶,取出也是从栈顶。
因此,当运行程序时,选择“2”就会出现填如要插入的内容,在程序运行截面上并会出现插入的结果。
具体程序代码及运行后的界面如下:
voidPush(structSqStack*p,ElemTypex)
if(S.top<
MAX-1)
S.top=S.top+1;
S.elem[S.top]=x;
else
Overflow!
图3-3进栈操作
3.4.4栈元素的删除
栈的删除也是从栈顶,当栈内有内容时,栈顶的元素就可以被取出删除,但是,当栈为空栈时就会输出“Underflow!
”提示。
具体操作代码如下:
ElemTypePop(structSqStack*p)
ElemTypex;
if(S.top!
=0)
x=S.elem[S.top];
S.top=S.top-1;
return(x);
Underflow!
return(0);
图为连续删除栈中两个数据的运行结果:
图3-4栈元素的删除操作
图片显示的是连续删除两个元素后栈中的情况。
在栈中取出元素并删除是严格遵守“后进先出”原则的。
3.4.5栈的取顶操作
栈的取顶主要就是把栈的第一个元素取出来。
其具体操作如下:
ElemTypeGetTop(structSqStack*p)
图为将刚才的栈中的数据连续出栈四次的运行结果:
图3-5出栈操作
图显示了对栈进行连续四次出栈操作后的结果,和原来的栈对比可以看到出栈的顺序也是严格遵循“后进先出”原则的。
3.5设计创新与关键技术
这个课程设计是一个简单的设计,如果说有“设计创新与关键技术”的话,只能勉强说有设计创新,至于关键技术应该谈不上。
谈到设计创新,只能说在设计思路、设计方法和设计内容上有别人没有的东西。
而所用的技术倒是没有多少。
主要是运用了C语言丰富的表达能力,将栈的建立、进栈、出栈等操作形象的反应出来。
3.6结论
本次设计进展顺利,如期完成,并且达到了预先的设计要求,完全贯彻和执行了设计的总体方案。
对于栈的基本操作的描述和实现比较成功。
然而,限于时间和水平,这个设计还有很多的不足之处。
3.6.1存在的问题
一、没有使用图形的形式描述栈的操作。
主要是因为本设计主要是在MicroSoftVisualC++编译器调试,但VC的根目录下的Include文件夹中没有graphics.h这个头文件。
因此,在TurboC下编译成功的地源程序在VC中无法编译通过。
二、所有的对栈的操作只能当栈被初始化以后方可进行。
当栈被一次初始化后,所有的进栈操作只能进行一次,如果想在进行了其他的栈操作后再次进栈是不行的。
3.6.2解决方案
一、针对VC中没有graphics.h头文件的问题,可以到互联网上求助高手或自己到图书馆查阅相关的书籍。
二、针对进栈要等待初始化的问题,原因在于经过其他的栈操作改变了栈顶指针的位置,而第一次进栈是在空栈的基础之上,而有了数据再想进栈便违反了栈“先进后出”的原则了。
可以进行如下操作,将栈的结构体中的栈顶指针定义为一个全局变量或静态变量。
这样,便可以保证进栈的不受限制,可随时进栈。
参考文献
[1]严蔚敏.吴伟民编著.数据结构(C语言版).清华大学出版社.2006
[2]李春葆.曾慧.张植民编著.数据结构程序设计题典.清华大学出版社.2002
[3]郭翠英等编著.C语言课程设计案例精编.中国水利水电出版社.2004
[4]谭浩强编著.C程序设计.清华大学出版社.2005
[5]WilliamFord.WilliamTopp.《DataStructurewithC++》.清华大学出版社
[6]许卓群.张乃孝.杨冬青.唐世渭《数据结构》.高等教育出版社.1988年
[7]李廉治.姜文清.郭福顺《数据结构》.大连理工大学出版社.1989年
[8]晋良颍《数据结构》.人民邮电出版社.2002年
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 说明书