栈子系统王志.docx
《栈子系统王志.docx》由会员分享,可在线阅读,更多相关《栈子系统王志.docx(11页珍藏版)》请在冰豆网上搜索。
栈子系统王志
课程设计任务书
学院
信息科学与工程学院
专业
电子信息科学与技术
学生姓名
王志
学号
0803070134
设计题目
课程设计题二:
栈子系统
一.设计内容和要求:
1.设计一个选择式菜单。
栈子系统
******************************************************
*1……入栈*
*2……出栈*
*3……显示*
*4……数制转换*
*0……返回*
******************************************************
请选择菜单号(0…4)
2.设计一个字符型的栈。
3.编写入栈、出栈和显示栈中全部元素的程序。
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.掌握栈的典型应用的算法
二、课程设计的内容和要求
1.设计一个选择式菜单。
栈子系统
******************************************************
*1……入栈*
*2……出栈*
*3……显示*
*4……数制转换*
*0……返回*
******************************************************
请选择菜单号(0…4):
2.设计一个字符型的栈。
3.编写入栈、出栈和显示栈中全部元素的程序。
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;
else
{*x=s->data[s->top];
s->top--;////退栈
return1;}
}
3、栈是一个先进后出的线性表,在数制转换为八进制时,先把低位到高位的数字按照顺序进栈,输出的时候高位到低位输出。
算法课描述如下:
voidConversion(intn)
{SeqStack*s=Snull();
intx;
while(n)
{x=n%8;
n=n/8;
s->top++;
s->data[s->top]=x;}
while(s->top>-1)
{printf("\t%d",s->data[s->top]);
s->top--;}
getchar();
printf("\n");
}
五、源代码
/////栈子系统
/////创建人:
王志
/////创建时间:
2009/12/28
#include
#include
#defineMAXLEN10
typedefintdatatype;
typedefstruct
{datatypedata[MAXLEN];
inttop;
}SeqStack;
SeqStack*Snull();
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");
printf("\n\t\t顺序栈操作应用演示");
printf("\n\t\t****************************************************");
printf("\n\t\t|1--------------进栈|");
printf("\n\t\t|2--------------出栈|");
printf("\n\t\t|3--------------显示栈元素|");
printf("\n\t\t|4--------------数制转换|");
printf("\n\t\t|0--------------返回|");
printf("\n\t\t****************************************************");
printf("\n\t\t请选择序号(0--8):
");
chioce=getchar();
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
j=0;
};break;
case'2':
if(s->top!
=-1){
Pop(s,&val);
printf("\n\t\t出栈元素为:
%6d\n",val);}
elseif(s->top==-1)
printf("栈已为空!
");
break;
case'3':
ShowStack(s);break;
case'4':
printf("\n\t\t输入十进制数'm'转换的八进制数后为':
");
scanf("%d",&m);
Conversion(m);break;
case'0':
i=0;
}
if(chioce=='1'||chioce=='2'||chioce=='3'||chioce=='4')
{printf("\n\t\t回车返回主菜单,输入0按回车退出程序.\n");
a=getchar();
if(a!
='\xA')
i=0;
elsei=1;}
}
}
SeqStack*Snull()
{SeqStack*s;
s=(SeqStack*)malloc(sizeof(SeqStack));
s->top=-1;///top=-1表示栈空
returns;}
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;
else
{*x=s->data[s->top];
s->top--;////退栈
return1;}
}
datatypeReadTop(SeqStack*s)
{
if(s->top==-1)
return0;
else
printf("栈顶元素为:
%3d",s->data[s->top]);
return1;
}
voidShowStack(SeqStack*s)
{inti;
if(s->top==-1)
printf("栈已为空!
");
else
printf("栈元素:
");
for(i=s->top;i>=0;i--)
printf("%3d",s->data[i]);
}
voidConversion(intn)
{SeqStack*s=Snull();
intx;
while(n)
{x=n%8;
n=n/8;
s->top++;
s->data[s->top]=x;}
while(s->top>-1)
{printf("\t%d",s->data[s->top]);
s->top--;}
getchar();
printf("\n");
}
六﹑运行结果:
七、实验结论
有关栈的存储问题,实验开始时无法为栈进行存储,为什么?
栈的初始化操作分配量进行第一次分配base为栈底指针,若base=NULL,表明栈结构不存在;称top为栈顶指针,其初值指向栈底即top=base可以作为栈空的标记,每当插入一个元素时,指针top增加1。
通过本次试验,我们了解了栈的建立,存储,输出以及数制转换的问题,对栈的结构更加清楚,明确。
八、参考文献
1.杨路明C语言程序设计教程北京邮电大学出版社
2.严蔚敏吴伟民数据结构清华大学出版社
3.陈媛何波蒋鹏刘洁数据结构学习指导-实验指导-课程设计机械工业出版社