1.实验题目:编写一个程序alog-1.cpp,实现顺序栈(假设栈中的元素类型为char)的各种基本运算,并在此基础上设计一个程序exp3-1.cpp,完成如下功能:(1)初始化栈s;(2)判断栈s是否非空;(3)依次进栈元素a,b,c,d,e;(4)判断栈s是否非空;(5)输出栈长度;(6)输出从栈顶到栈底元素;(7)输出出栈序列;(8)判断栈s是否非空;(9)释放栈;2.源代码:#includestdio.h#includestdlib.h#defineMaxSize100typedefcharElemType;typedefstruct{ElemTypedata[MaxSize];inttop;//栈顶指针}SqStack;//定义顺序栈类型voidInitStack(SqStack*&s)//初始化栈{s=(SqStack*)malloc(sizeof(SqStack));s-top=-1;}voidDestoryStack(SqStack*&s)//销毁栈{free(s);}intStackLength(SqStack*&s)//求栈长度{inti=0;SqStack*s1;s1=(SqStack*)malloc(sizeof(SqStack));s1-top=s-top;while(s-top!=-1){s-top--;i++;}s-top=s1-top;returni;}intStackEmpty(SqStack*s)//判断栈是否为空{return(s-top==-1);}boolPush(SqStack*&s,ElemTypee)//进栈{if(s-top==MaxSize-1)//栈满的情况,即栈上溢出returnfalse;s-top++;//栈顶指针增1s-data[s-top]=e;//元素e放在栈顶指针处returntrue;}intPop(SqStack*&s,ElemType&e)//出栈{if(s-top==-1)returnfalse;//栈为空的情况,即栈下溢出e=s-data[s-top];//取栈顶元素s-top--;returntrue;}voidDispStack(SqStack*&s)//打印栈{inti;for(i=s-top;i=0;i--)printf(%c,s-data[i]);printf(\n);}voidmain(){ElemTypee;SqStack*s;printf((1)初始化栈s\n);InitStack(s);printf((2)栈为%s\n,(StackEmpty(s)?空:非空));printf((3)依次进栈元素a,b,c,d,e\n);Push(s,'a');Push(s,'b');Push(s,'c');Push(s,'d');Push(s,'e');printf((4)栈为%s\n,(StackEmpty(s)?空:非空));printf((5)栈长度:%d\n,StackLength(s));printf((6)从栈顶到栈底元素:);DispStack(s);printf((7)出栈序列:);while(!StackEmpty(s)){Pop(s,e);printf(%c,e);}printf(\n);printf((8)栈为%s\n,(StackEmpty(s)?空:非空));printf((9)释放栈\n);DestoryStack(s);}3.程序运行结果:4.心得体会及建议这次实验虽然程序很长,但有了第一次的经验,而且初始化栈,销毁栈等算法课本上都有,所以借鉴了一下,在求栈长度,打印栈上花费的时间比较多,这两个算法课本上没有,编写了好多次才成功,期间跟同学也进行了很多讨论,很感谢同学帮我找出我编写的代码中的很多错误,同时也学会了几个调试程序找出错误的方法,比如设置断点,还有将不行运行的部分加注释符使其不被运行,感觉我的编程能力有了很大提高。一开始编一个程序感觉很难,但当自己把每一步都分析出来,再将它用代码表示出来后也不再感觉有多么多么难了,自己首先要进行分析,然后逐步化解。不过感觉自己指针这块儿还是很吃力,很多地方都是因为指针用错卡到那里,因此我还是要继续学习,多多实践,在看一些例子的时候多分析一下。