- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
链栈的有关操作
实验3:栈的链接结构的有关操作
班级: 信息管理姓名:吴翔翔2014-4-28
1.实验题目
请编制一个程序,利用栈的链接存储方式来实现下列功能:
(1)初始化链栈;
(2)入栈;
(3)通过入栈操作,编写一个n个元素连续入栈的算法:
LinkStack * setup_stack(int n),算法返回栈的头指针;
(4)输出一个链栈的所有元素;
(5)判断栈是否非空;//若栈空返回值为1,否则返回值为0
(6)入栈
2. 需求分析
本演示程序在VC++6.0环境下编写调试,完成初始化,将一个元素入栈及出栈,,多个元素连续入栈,还有判断栈是否为空等操作。A :主函数 main( )
主函数里需要调用上述函数,大体思路是先调用初始化函数,然后输出“需要入栈的元素个数n”提示,接着进行n作为实参的值的输入,然后调用(3)中的那个setup_stack函数,输出栈中所有元素值,进行出栈几次,在输出栈中元素值。
B: 初始化函数*initstack()
主要是对栈进行初始化。
C: 输出栈中元素函数print(linkstack *top)
D:入栈函数*push(linkstack *top,datatype x)
E:出栈函数*pop(linkstack *top)4.调试分析
主要叙述本程序调试过程的中所遇到主要问题及其体会:
本程序基本上与单链表相似,只不过其所有操作都限定在栈头进行操作。
本程序的基本操作并不太难,关键在于它的头指针唯一标示了该栈,调用子函数时有时无法进行,则必是头指针调用出了问题。
在调试过程中试了好多次,最后才成功。
5. 测试结果(运行结果)
A: 初始化*initstack()
B:n个元素连续入栈*setup_stack(linkstack *top,int n)
C:一个元素入栈 *push(linkstack *top,datatype x)
D:元素出栈*pop(linkstack *top)
E:判断栈是否非空;//若栈空返回值为1,否则返回值为0
6.源程序(带注释)
程序清单
#includestdio.h
#includestdlib.h
#includemalloc.h
#define maxsize 50
typedef int datatype;
/*typedef struct {
datatype stack[maxsize];
int top;
}seqstack;*/
typedef struct node{
datatype data;
struct node *next;
}linkstack;
//初始化函数
linkstack *initstack()
{
linkstack *top;
top=NULL;
return top;
}
//输出栈中元素函数
void print(linkstack *top)
{ linkstack *p;
p=top;
if(p==NULL) printf(empty);
else
{
do
{printf(%6d,p-data);
p=p-next;
}while(p!=NULL);
printf(\n);
}
}
//出栈函数
linkstack *push(linkstack *top,datatype x)
{
linkstack *p;
p=(linkstack *)malloc(sizeof(linkstack));
p-data=x;
p-next=top;
top=p;
return top;
}
int stackempty(linkstack *top)
{return(top?0:1);
}
//n个元素连续入栈函数
linkstack *setup_stack(linkstack *top,int n)
{ int i,x;
for(i=0;in;i++)
{ scanf(%d,x);
top=push(top,x);
}
print(top);
return top;
}
linkstack *pop(linkstack *top)
{linkstack *q;
if(!top){printf(栈为空);}
q=top;
top=top-next;
free(q);
return top;
}
//主函数
void main()
{ linkstack *top;
int i,x,k,n;
do{
printf(\n\n\n);
printf(\n====================================);
printf(\n\t 1.初始化链栈;);
您可能关注的文档
- 早规划不怕申不到昆士兰公立中学.docx
- 旅游英语视听说 Script Unit 1-4.doc
- 新编大学英语Fresh_start.doc
- 比较在美国纽约州和特拉华州新设公司的法律要求.docx
- 浅析App Store中的排名规则.doc
- 电力行业专业术语大总结.docx
- 用FLUENT时间步长.docx
- 科技英语翻译-短语翻译.docx
- 空压机英文翻译.doc
- 玩转苹果iPad_air技巧教程大全.docx
- 大学生职业规划大赛《新闻学专业》生涯发展展示PPT.pptx
- 大学生职业规划大赛《应用统计学专业》生涯发展展示PPT.pptx
- 大学生职业规划大赛《音乐学专业》生涯发展展示PPT.pptx
- 大学生职业规划大赛《中医学专业》生涯发展展示PPT.pptx
- 大学生职业规划大赛《信息管理与信息系统专业》生涯发展展示PPT.pptx
- 大学生职业规划大赛《汽车服务工程专业》生涯发展展示PPT.pptx
- 大学生职业规划大赛《水产养殖学专业》生涯发展展示PPT.pptx
- 大学生职业规划大赛《市场营销专业》生涯发展展示PPT.pptx
- 大学生职业规划大赛《音乐表演专业》生涯发展展示PPT.pptx
- 大学生职业规划大赛《音乐学专业》生涯发展展示PPT.pptx
文档评论(0)