第五次实验报告—— 顺序栈、链栈的插入和删除 一 需求分析 1、在演示程序中,出现的元素以数字出现定义为int型, 2、演示程序在计算机终端上,用户在键盘上输入演示程序中规定的运算命令,相应的输入数据和运算结果显示在终端上 3、顺序栈的程序执行的命令包括如下: (1) 定义结构体 (2) 顺序栈的初始化及创建 (3) 元素的插入 (4) 元素的删除 (5) 顺序栈的打印结果 3、链栈的程序执行的命令包括如下: (1) 定义结构体 (2) 链栈的初始化及创建 (3) 元素的插入 (4) 元素的删除 (5)链栈的打印结果 二 概要设计 1、顺序栈可能需要用到有序表的抽象数据类型定义: ADT List{ 数据对象:D={ai|ai∈ElemL, i=1,2,...,n, n≥0} 数据关系:R1={
|ai-1,ai ∈D, i=2,...,n } 基本操作: InitStack(SqStack &S) 操作结果:构造一个空栈 Push(L,e) 操作结果:插入元素 e为新的栈顶元素 Status Pop(SqStack &S) 操作结果:删除栈顶元素 }ADT List; 2、链栈可能需要用到有序表的抽象数据类型定义: ADT List{ 数据对象:D={ai|ai∈ElemL, i=1,2,...,n, n≥0} 数据关系:R1={|ai-1,ai ∈D, i=2,...,n } 基本操作: LinkStack(SqStack &S) 操作结果:构造一个空栈 Status Push(L,e) 操作结果:插入元素e为新的栈顶元素 Status Pop(SqStack &S) 操作结果:删除栈顶元素 }ADT List; 3、顺序栈程序包含的主要模块: (1) 已给定的函数库: (2)顺序栈结构体: (3)顺序栈初始化及创建: (4)元素插入 (5)元素删除 (6)主程序: 4、链栈程序包含的主要模块: (1) 已给定的函数库: (2)链栈结构体: (3)链栈初始化及创建: (4)元素插入 (5)元素删除 (6)主程序: 三 详细设计 线性栈: 结构体(邱建美) #define STACK_INIT_SIZE 100//存储空间初始分配量 #define STACKINCREMENT 10//存储空间分配增量 typedef struct { int *base;//在构造栈之前和销毁之后,base的值为 NULL int *top;//栈顶指针 int stacksize;//当前已分配的存储空间,以元素为单位 }SqStack#include"Base.h" 主函数(张涛) #include"construction.h" #include"stack_operation.c" int main() { SqStack S; int choice,e; S=InitStack(); S=Input_Sq(S); printf("请选择执行的操作,输入1执行入栈操作,输入2执行出栈操作choi...