1、链栈的有关操作实验3:栈的链接结构的有关操作班级: 信息管理 学号: L11214022 姓名:吴翔翔 日期:2014-4-28 1实验题目请编制一个程序,利用栈的链接存储方式来实现下列功能:(1)初始化链栈;(2)入栈;(3)通过入栈操作,编写一个n个元素连续入栈的算法: LinkStack * setup_stack(int n),算法返回栈的头指针;(4)输出一个链栈的所有元素;(5)判断栈是否非空;/若栈空返回值为1,否则返回值为0(6)入栈2. 需求分析本演示程序在VC+6.0环境下编写调试,完成初始化链栈,将一个元素入栈及出栈,多个元素连续入栈,还有判断栈是否为空等操作。3、概要设
2、计A :主函数 main( )主函数里需要调用上述函数,大体思路是先调用初始化函数,然后输出“需要入栈的元素个数n”提示,接着进行n作为实参的值的输入,然后调用(3)中的那个setup_stack函数,输出栈中所有元素值,进行出栈几次,在输出栈中元素值。B: 初始化函数*initstack()主要是对栈进行初始化。C: 输出栈中元素函数print(linkstack *top)D:入栈函数*push(linkstack *top,datatype x)E:出栈函数*pop(linkstack *top)4.调试分析主要叙述本程序调试过程的中所遇到主要问题及其体会:本程序基本上与单链表相似,只不
3、过其所有操作都限定在栈头进行操作。本程序的基本操作并不太难,关键在于它的头指针唯一标示了该栈,调用子函数时有时无法进行,则必是头指针调用出了问题。在调试过程中试了好多次,最后才成功。5. 测试结果(运行结果)A: 初始化*initstack()B:n个元素连续入栈*setup_stack(linkstack *top,int n) C:一个元素入栈 *push(linkstack *top,datatype x)D:元素出栈*pop(linkstack *top)E:判断栈是否非空;/若栈空返回值为1,否则返回值为06.源程序(带注释)程序清单#include#include#include
4、#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 print(linkstack *top) linkstack *p; p=top;if(p=NULL) printf
5、(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(linkstac
6、k *top,int n) int i,x; for(i=0;inext;free(q);return top;/主函数void main() linkstack *top; int i,x,k,n; do printf(nnn); printf(n=); printf(nt 1.初始化链栈;); printf(nt 2.将一个元素入栈); printf(nt 3.n个元素连续入栈); printf(nt 4.输出栈所有元素); printf(nt 5.判断栈是否非空;/若栈空返回值为1,否则返回值为0); printf(nt 6.出栈); printf(n=); printf(nt 请输入您
7、的选择(1、2、3、4、5、6)); scanf(%d,&k); switch(k) case 1:printf( 已初始化链栈!); top=initstack(); break; case 2:printf(请输入元素x值:); scanf(%d,&x); top=push(top,x); printf(输入元素后栈变为:); print(top); break; case 3:printf(请输入要入栈的元素个数n:); scanf(%d,&n); top=setup_stack(top,n); break; case 4: printf(当前栈中元素为); print(top); break; case 5:printf(%d, stackempty(top); break; case 6: printf(出栈前栈中元素为:);print(top); top=pop(top); printf(出栈后剩余栈中元素为:); print(top); break; while(k!=0);
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1