数据结构栈的基本操作,进栈,出栈

  • 格式:doc
  • 大小:47.50 KB
  • 文档页数:16

下载文档原格式

  / 16
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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={|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执行出栈操作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);

printf("请输入%d个元素",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)//判断栈是否为满,追加存储空间

{

S.base=(int*)realloc(S.base,(S.stacksize+STACKINCREMENT) *sizeof(int));

if(!S.base)

exit(OVERFLOW);//存储分配失败

S.top=S.base+S.stacksize;

S.stacksize+=STACKINCREMENT;

}

*S.top++=e;//插入元素

return S;

}

出栈函数(邱建美)

SqStack Pop(SqStack S)//删除函数

{

int e;

if(S.top==S.base)

printf("线性栈为空");