栈子系统王志.docx

上传人:b****5 文档编号:6254739 上传时间:2023-01-04 格式:DOCX 页数:11 大小:133.78KB
下载 相关 举报
栈子系统王志.docx_第1页
第1页 / 共11页
栈子系统王志.docx_第2页
第2页 / 共11页
栈子系统王志.docx_第3页
第3页 / 共11页
栈子系统王志.docx_第4页
第4页 / 共11页
栈子系统王志.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

栈子系统王志.docx

《栈子系统王志.docx》由会员分享,可在线阅读,更多相关《栈子系统王志.docx(11页珍藏版)》请在冰豆网上搜索。

栈子系统王志.docx

栈子系统王志

课程设计任务书

学院

信息科学与工程学院

专业

电子信息科学与技术

学生姓名

王志

学号

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.陈媛何波蒋鹏刘洁数据结构学习指导-实验指导-课程设计机械工业出版社

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

当前位置:首页 > 党团工作 > 入党转正申请

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

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