数据结构栈的基本操作,进栈,出栈
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第五次实验报告——顺序栈、链栈的插入和删除一需求分析
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={
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={
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 执行出栈操作choice=");
scanf("%d",&choice);
switch(choice)
case 1:
{
printf(" 请输入插入元素的值e=");
scanf("%d",&e);
S=Push(S,e);
printf(" 执行入栈操作后的线性栈为");
Print_Stack(S);
};break;
case 2:
{S=Pop(S);
printf(" 执行出栈操作后的线性栈为");
Print_Stack(S);
};break;
default : printf(" 您输入的值不合法");
}
}
线性栈的创建(峰)
SqStack InitStack()// 线性栈的创建
{
SqStack S;
S.base=(int*)malloc(STACK_INIT_SIZE * sizeof(int));//
分配存储空间
if(!S.base)
exit(OVERFLOW);// 存储分配失败S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return S;
} 输入函数(胡高飞)
SqStack Input_Sq(SqStack S)// 输入函数{
int n,i;
printf(" 请输入元素个数n="); scanf("%d",&n);
prin tf(" 请输入%c个元素",n);
for(i=0;i { scanf("%d",S.top); S.top++; } return S; } 进栈函数(峰) SqStack Push(SqStack S,int e)// 进栈函数 { if(S.top-S.base>=S.stacksize)// 判断栈是否为满,追加存储空间{