1、(6)入栈2. 需求分析本演示程序在VC+6.0环境下编写调试,完成初始化链栈,将一个元素入栈及出栈,多个元素连续入栈,还有判断栈是否为空等操作。3、概要设计A :主函数 main( )主函数里需要调用上述函数,大体思路是先调用初始化函数,然后输出“需要入栈的元素个数n”提示,接着进行n作为实参的值的输入,然后调用(3)中的那个setup_stack函数,输出栈中所有元素值,进行出栈几次,在输出栈中元素值。B: 初始化函数*initstack()主要是对栈进行初始化。C: 输出栈中元素函数print(linkstack *top)D:入栈函数*push(linkstack *top,datat
2、ype x)E:出栈函数*pop(linkstack *top)4.调试分析主要叙述本程序调试过程的中所遇到主要问题及其体会:本程序基本上与单链表相似,只不过其所有操作都限定在栈头进行操作。本程序的基本操作并不太难,关键在于它的头指针唯一标示了该栈,调用子函数时有时无法进行,则必是头指针调用出了问题。在调试过程中试了好多次,最后才成功。5. 测试结果(运行结果)A: 初始化*initstack()B:n个元素连续入栈*setup_stack(linkstack *top,int n) 一个元素入栈 *push(linkstack *top,datatype x)D:元素出栈*pop(links
3、tack *top)E:判断栈是否非空;6.源程序(带注释)程序清单#includestdlib.hmalloc.h#define maxsize 50typedef int datatype;/*typedef struct datatype stackmaxsize; int top;seqstack;*/typedef struct node datatype data; struct node *next;linkstack;/初始化函数linkstack *initstack() linkstack *top; top=NULL; return top;/输出栈中元素函数void p
4、rint(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;next=top; top=p;int stackempty(linkstack *top)return(top?0:1);/
5、n个元素连续入栈函数linkstack *setup_stack(linkstack *top,int n) int i,x; for(i=0;ifree(q);/主函数void main() linkstack *top; int i,x,k,n;do printf(nnn printf(n=nt 1.初始化链栈;nt 2.将一个元素入栈nt 3.n个元素连续入栈nt 4.输出栈所有元素nt 5.判断栈是否非空;/若栈空返回值为1,否则返回值为0nt 6.出栈n=nt 请输入您的选择(1、2、3、4、5、6) scanf(k); switch(k) case 1: 已初始化链栈! top=initstack(); break; case 2:请输入元素x值: scanf( printf(输入元素后栈变为: print(top); case 3:请输入要入栈的元素个数n: n); top=setup_stack(top,n); case 4: printf(当前栈中元素为 print(top); case 5:, stackempty(top); case 6:出栈前栈中元素为: top=pop(top);出栈后剩余栈中元素为: while(k!=0);
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1