文档介绍:第五次实验报告——顺序栈、链栈的插入和删除一需求分析在演示程序中,出现的元素以数字出现定义为int型,演示程序在计算机终端上,用户在键盘上输入演示程序中规定的运算命令,相应的输入数据和运算结果显示在终端上3、顺序栈的程序执行的命令包括如下:(1)定义结构体(2)顺序栈的初始化及创建(3)元素的插入(4)元素的删除(5)顺序栈的打印结果链栈的程序执行的命令包括如下:(1)定义结构体(2)链栈的初始化及创建(3)元素的插入(4)元素的删除(5)链栈的打印结果二概要设计1、顺序栈可能需要用到有序表的抽象数据类型定义:ADTList{数据对象:D={ai|ai∈ElemL,i=1,2,...,n,n≥0}数据关系:R1={<ai-1,ai>|ai-1,ai∈D,i=2,...,n}基本操作:InitStack(SqStack&S)操作结果:构造一个空栈Push(L,e)操作结果:插入元素e为新的栈顶元素StatusPop(SqStack&S)操作结果:删除栈顶元素}ADTList;2、链栈可能需要用到有序表的抽象数据类型定义:ADTList{数据对象:D={ai|ai∈ElemL,i=1,2,...,n,n≥0}数据关系:R1={<ai-1,ai>|ai-1,ai∈D,i=2,...,n}基本操作:LinkStack(SqStack&S)操作结果:构造一个空栈StatusPush(L,e)操作结果:插入元素e为新的栈顶元素StatusPop(SqStack&S)操作结果:删除栈顶元素}ADTList;3、顺序栈程序包含的主要模块:(1)已给定的函数库:(2)顺序栈结构体:(3)顺序栈初始化及创建:(4)元素插入(5)元素删除(6)主程序:4、链栈程序包含的主要模块:(1)已给定的函数库:(2)链栈结构体:(3)链栈初始化及创建:(4)元素插入(5)元素删除(6)主程序:三详细设计线性栈:结构体#defineSTACK_INIT_SIZE100//存储空间初始分配量#defineSTACKINCREMENT10//存储空间分配增量typedefstruct{ int*base;//在构造栈之前和销毁之后,base的值为NULL int*top;//栈顶指针 intstacksize;//当前已分配的存储空间,以元素为单位}SqStack#include""主函数#include""#include""intmain(){ SqStackS; intchoice,e; S=InitStack(); S=Input_Sq(S); printf("请选择执行的操作,输入1执行入栈操作,输入2执行出栈操作choice="); scanf("%d",&choice); switch(choice) { case1: { printf("请输入插入元素的值e="); scanf("%d",&e); S=Push(S,e); printf("执行入栈操作后的线性栈为"); Print_Stack(S); };break; case2: {S=Pop(S); printf("执行出栈操作后的线性栈为"); Print_Stack(S); };break; default:printf("您输入的值不合法"); }}线性栈的创建SqStackInitStack()//线性栈的创建{ SqStackS; =(int*)malloc(STACK_INIT_SIZE*sizeof(int));//分配存储空间 if(!) exit(OVERFLOW);//存储分配失败 =; =STACK_INIT_SIZE; returnS;}输入函数SqStackInput_Sq(SqStackS)//输入函数{ intn,i; printf("请输入元素个数n="); scanf("%d",&n); printf("请输入%d个元素",n); for(i=0;i<n;i++) { scanf("%d",); ++; } returnS;}进栈函数SqStackPush(SqStackS,inte)//进栈函数{ if(->=)//判断栈是否为满,追加存储空间 { =(int*)realloc(,(+STACKINCREMENT)*sizeof(int)); if(!) exit(OVERFLOW);//存储分配失败 =+; +=STACKINCRE