栈子系统王志Word格式文档下载.docx
《栈子系统王志Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《栈子系统王志Word格式文档下载.docx(11页珍藏版)》请在冰豆网上搜索。
4.编写一个把十进制数转换成八进制数的应用程序。
二.进度安排:
第1天:
1、指导教师布置课程设计题目及任务
2、查找相关资料
第2~4天:
1、根据具体设计题目进行具体分析
2、对设计题目进行编码和调试
3、指导教师进行验收
第5天:
1、指导教师针对课程设计进行答辩
2、完成课程设计报告
指导教师(签字):
年月日
学院院长(签字):
年月日
目录
一、课程设计内容和要求-----------------------------------1
二、课程设计的目的-----------------------------------------3
三、课程设计分析-------------------------------------------3-4
四、算法描述-------------------------------------------4-5
五、源代码-------------------------------------------5-9
六、运行结果分析-------------------------------------------10-12
七、结束语-------------------------------------------12
八、参考文献-------------------------------------------12
题目_栈子系统_
一、课程设计的目的
本学期我们对《数据结构》这门课程进行了学习。
这门课程是一门实践性非常强的课程,为了让大家更好地理解与运用所学知识,提高动手能力,我们进行了此次课程设计实习。
这次课程设计不但要求实习者掌握《数据结构》中的各方面知识,还要求实习者具备一定的C语言基础和编程能力。
1.掌握栈的特点及其描述方法
2.掌握链式存储结构实现一个栈
3.掌握链栈的各种基本操作
4.掌握栈的典型应用的算法
二、课程设计的内容和要求
请选择菜单号(0…4):
三、课程设计分析
从逻辑结构、物理结构和基本运算入手展开说明本题目所涉及到的相关知识。
1.栈是限定在栈顶一端进行插入和删除的线性表。
2.栈是一种限制存取点的线性结构,最后入栈的先出栈,称为“后进先出”表。
3.进制转换的8进制是按低位到高位的顺序产生的,而通常输出是按高位到低位输出的,恰好与计算相反,因此转换过程中每得到一位8进制的数则进栈保存,转换完毕后出栈则正好是转换结果。
四、算法描述
1、栈初始化,构造一个空栈:
SeqStack*Snull();
,然后对栈依次进行入栈intPush(SeqStack*s,datatypex),出栈操作intPop(SeqStack*s,datatype*x);
以及数制转换操作voidConversion(intm);
。
2、栈的初始化操作分配量进行第一次分配base为栈底指针,若base=NULL,表明栈结构不存在;
称top为栈顶指针,其初值指向栈底即top=base可以作为栈空的标记,每当插入一个元素时,指针top增加1。
具体算法描述如下:
intPush(SeqStack*s,datatypex)
{if(s->
top==MAXLEN-1)
return0;
////栈满
else
{s->
top++;
s->
data[s->
top]=x;
return1;
}////指针后移,将新的元素插入到栈顶
}
intPop(SeqStack*s,datatype*x)
{if(0)
return0;
{*x=s->
top];
top--;
////退栈
3、栈是一个先进后出的线性表,在数制转换为八进制时,先把低位到高位的数字按照顺序进栈,输出的时候高位到低位输出。
算法课描述如下:
voidConversion(intn)
{SeqStack*s=Snull();
intx;
while(n)
{x=n%8;
n=n/8;
s->
while(s->
top>
-1)
{printf("
\t%d"
s->
top]);
}
getchar();
printf("
\n"
);
五、源代码
/////栈子系统
/////创建人:
/////创建时间:
2009/12/28
#include<
stdio.h>
malloc.h>
#defineMAXLEN10
typedefintdatatype;
typedefstruct
{datatypedata[MAXLEN];
inttop;
}SeqStack;
intPush(SeqStack*s,datatypex);
////执行入栈操作
intPop(SeqStack*s,datatype*x);
////执行出栈操作
datatypeReadTop(SeqStack*s);
voidShowStack(SeqStack*s);
voidConversion(intm);
voidmain()
{SeqStack*s;
inti=1,j,chioce,val,flag,m;
chara;
s=Snull();
while(i)
{
printf("
\n\t\t顺序栈操作应用演示"
\n\t\t****************************************************"
\n\t\t|1--------------进栈|"
\n\t\t|2--------------出栈|"
\n\t\t|3--------------显示栈元素|"
\n\t\t|4--------------数制转换|"
\n\t\t|0--------------返回|"
\n\t\t请选择序号(0--8):
"
chioce=getchar();
switch(chioce)
{case'
1'
:
j=1;
while(j)
{printf("
\n\t\t输入整数('
0'
结束)按回车:
"
scanf("
%d"
&
val);
if(val!
=0){
flag=Push(s,val);
if(flag==0){
j=0;
printf("
栈满"
}
else
};
break;
case'
2'
if(s->
top!
=-1){
Pop(s,&
printf("
\n\t\t出栈元素为:
%6d\n"
val);
elseif(s->
top==-1)
栈已为空!
break;
3'
ShowStack(s);
4'
printf("
\n\t\t输入十进制数'
m'
转换的八进制数后为'
scanf("
m);
Conversion(m);
i=0;
if(chioce=='
||chioce=='
)
{printf("
\n\t\t回车返回主菜单,输入0按回车退出程序.\n"
a=getchar();
if(a!
='
\xA'
i=0;
elsei=1;
SeqStack*Snull()
s=(SeqStack*)malloc(sizeof(SeqStack));
top=-1;
///top=-1表示栈空
returns;
{s->
{*x=s->
datatypeReadTop(SeqStack*s)
{
if(s->
return0;
栈顶元素为:
%3d"
return1;
voidShowStack(SeqStack*s)
{inti;
if(s->
printf("
栈已为空!
栈元素:
for(i=s->
top;
i>
=0;
i--)
data[i]);
{x=n%8;
六﹑运行结果:
七、实验结论
有关栈的存储问题,实验开始时无法为栈进行存储,为什么?
栈的初始化操作分配量进行第一次分配base为栈底指针,若base=NULL,表明栈结构不存在;
通过本次试验,我们了解了栈的建立,存储,输出以及数制转换的问题,对栈的结构更加清楚,明确。
八、参考文献
1.杨路明C语言程序设计教程北京邮电大学出版社
2.严蔚敏吴伟民数据结构清华大学出版社
3.陈媛何波蒋鹏刘洁数据结构学习指导-实验指导-课程设计机械工业出版社