1、数据结构实验二数据结构实验二实验二 堆栈的实现与应用一、实验目的掌握堆栈的基本操作和设计数据测试功能的方法 二、实验要求 1)编写一个将顺序堆栈S中所有数据元素均删去的算法 void ClearStack(SeqStack *S),并说明参数S为何要设计为指针参数。2)编写一个返回顺序堆栈S中结点个数的算法 int StackSize(SeqStack S),并说明参数S为何不用设计为指针类型。三、实验仪器设备及软件HP D538、C语言四、实验原理顺序堆栈的入栈和出栈操作只能对当前栈顶数据元素。五、实验步骤及程序(1)初始化StackInitiate(S)(2)非空否StackNotEmpt
2、y(S)(3)入栈StackPush(SeqStack*S,DataType x)(4)出栈StackPop(SeqStack*S,DataType *d)(5)取栈顶数据元素StackTTop(SeqStack*s,DataType*)上述实现顺序堆栈操作的所有函数中,都没有循环语句,所以顺序循环堆栈的所有操作的似箭复杂度均为1.六、实验结果与分析试验程序如下#include #include #define MAX 20typedef struct int elementMAX; int index;Stack;void ClearStack(Stack *S) S-index = 0;i
3、nt StackSize(Stack S)/因为未改动堆栈的数据,所以不用设置为指针 return S.index;int InitStack(Stack *s) s-index=0; return 1;int IsFull(Stack *s) if(s-index=MAX) return 1; else return 0; int IsEmty(Stack *s) if(s-index=0) return 1; else return 0; int Push(Stack *s,int elements) if(IsFull(s) return 0; else s-elements-index
4、=elements; s-index+; return 1; int Pop(Stack *s,int *elements) if(IsEmty(s) return 0; else s-index-; *elements=s-elements-index; return 1; int main() Stack *p; int element=0; p=(Stack *)malloc(sizeof(Stack); InitStack(p); for(int i=0;i21;i+) if(!Push(p,i) printf(Stack is Fulln); break; else printf(%
5、d Push to stackn,i+1); printf(栈中元素个数:%dn, StackSize(*p); ClearStack(p); printf(清堆栈之后栈中元素个数:%dn,StackSize(*p); 实验结果如图总结:1:该程序实现了数据元素的顺序入栈并把所有数据元素均删去的算法。2在编程序时,把最大数据元素定为20,可以看出,当数据元素个数小于20时,可以正常顺序入栈出栈,但当数据元素个数超过20时,会显示“Stack is Full”,并且只能将20个数据元素入栈。3 通过编写程序,加深了自己对顺序堆栈的理解,特别是数据显示的结果,是自己印象很深刻,同时学会了软件的基本操作。