链栈的有关操作文档格式.docx
《链栈的有关操作文档格式.docx》由会员分享,可在线阅读,更多相关《链栈的有关操作文档格式.docx(7页珍藏版)》请在冰豆网上搜索。
(6)入栈
2.需求分析
本演示程序在VC++6.0环境下编写调试,完成初始化链栈,将一个元素入栈及出栈,,多个元素连续入栈,还有判断栈是否为空等操作。
3、概要设计
A:
主函数main()
主函数里需要调用上述函数,大体思路是先调用初始化函数,然后输出“需要入栈的元素个数n”提示,接着进行n作为实参的值的输入,然后调用(3)中的那个setup_stack函数,输出栈中所有元素值,进行出栈几次,在输出栈中元素值。
B:
初始化函数*initstack()
主要是对栈进行初始化。
C:
输出栈中元素函数print(linkstack*top)
D:
入栈函数*push(linkstack*top,datatypex)
E:
出栈函数*pop(linkstack*top)
4.调试分析
主要叙述本程序调试过程的中所遇到主要问题及其体会:
本程序基本上与单链表相似,只不过其所有操作都限定在栈头进行操作。
本程序的基本操作并不太难,关键在于它的头指针唯一标示了该栈,调用子函数时有时无法进行,则必是头指针调用出了问题。
在调试过程中试了好多次,最后才成功。
5.测试结果(运行结果)
A:
初始化*initstack()
B:
n个元素连续入栈*setup_stack(linkstack*top,intn)
一个元素入栈*push(linkstack*top,datatypex)
D:
元素出栈*pop(linkstack*top)
E:
判断栈是否非空;
6.源程序(带注释)
程序清单
#include<
stdio.h>
stdlib.h>
malloc.h>
#definemaxsize50
typedefintdatatype;
/*typedefstruct{
datatypestack[maxsize];
inttop;
}seqstack;
*/
typedefstructnode{
datatypedata;
structnode*next;
}linkstack;
//初始化函数
linkstack*initstack()
{
linkstack*top;
top=NULL;
returntop;
}
//输出栈中元素函数
voidprint(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,datatypex)
linkstack*p;
p=(linkstack*)malloc(sizeof(linkstack));
p->
data=x;
next=top;
top=p;
intstackempty(linkstack*top)
{return(top?
0:
1);
//n个元素连续入栈函数
linkstack*setup_stack(linkstack*top,intn)
{inti,x;
for(i=0;
i<
n;
i++)
{scanf("
%d"
&
x);
top=push(top,x);
print(top);
returntop;
linkstack*pop(linkstack*top)
{linkstack*q;
if(!
top){printf("
栈为空"
q=top;
top=top->
free(q);
//主函数
voidmain()
{linkstack*top;
inti,x,k,n;
do{
printf("
\n\n\n"
printf("
\n===================================="
\n\t1.初始化链栈;
"
\n\t2.将一个元素入栈"
\n\t3.n个元素连续入栈"
\n\t4.输出栈所有元素"
\n\t5.判断栈是否非空;
//若栈空返回值为1,否则返回值为0"
\n\t6.出栈"
\n====================================="
\n\t请输入您的选择(1、2、3、4、5、6)"
scanf("
k);
switch(k)
{
case1:
已初始化链栈!
top=initstack();
}break;
case2:
请输入元素x值:
scanf("
printf("
输入元素后栈变为:
print(top);
case3:
请输入要入栈的元素个数n=:
n);
top=setup_stack(top,n);
case4:
{printf("
当前栈中元素为"
print(top);
case5:
stackempty(top));
case6:
出栈前栈中元素为:
top=pop(top);
出栈后剩余栈中元素为:
}
}while(k!
=0);