数据结构03栈的基本操作

2026/4/24 22:30:21

附录 实验报告参考规范

《数据结构》实验报告

院系____________________ 专业 ____________________ __________级 __________班 _______年____月____日 1.实验题目

姓名_林桢曦___________ 学号___106052010235_________ 电话____________

栈的基本操作

2.需求分析

编写栈的基本操作函数(分别用顺序和链接两种方式实现)调用进栈函数建立一个栈,读取栈顶元素,删除栈中元素,并且输出栈中所有元素。 顺序栈:

(1)建立空栈 int InitStack(SqStack &s) (2)进栈 void Push(SqStack &S,int e) (3)出栈 int Pop(SqStack *S,int e) (4)输出 void OutputStack(SqStack *S) 链栈:

(1)建立空栈void InitStack(Lnode *S) (2)进栈void Push(Lnode *S, int x) (3)出栈void Pop(Lnode *S, int *x) (4)输出void OutputStack(Lnode *S) 输入形式:整型数。 3.概要设计

(1)

ADT SqStack {

数据对象:D={ai|ai∈IntegerSet,i=0,1,2,…,n,n≥0} 结构关系:R={|ai,ai+1 ∈D} 基本操作:

InitStack(SqStack &s)

操作前提:s是一个未初始化的顺序栈 操作结果:将s初始化为一个空的顺序栈 Push(SqStack *S, int e) 操作前提:顺序栈S已存在 操作结果:将元素e插入到顺序栈中 Pop(SqStack *S,int *e) 操作前提:顺序栈S已存在

操作结果:将顺序栈S中栈顶元素删除,删除的元素值通过e返回

OutputStack(SqStack *S) 操作前提:顺序栈S已存在

操作结果:将顺序栈S中的元素显示到屏幕上

}

ADT Lnode {

数据对象:D={ai|ai∈IntegerSet,i=0,1,2,…,n,n≥0} 结构关系:R={|ai,ai+1 ∈D}

福建师范大学物光院计算机教学辅导讲义

基本操作: InitStack(Lnode&s)

操作前提:s是一个未初始化的链栈 操作结果:将s初始化为一个空的链栈 Push(Lnode *S, int e) 操作前提:链栈S已存在 操作结果:将元素e插入到链栈中 Pop(Lnode *S,int *e) 操作前提:链栈S已存在

操作结果:将链栈S中栈顶元素删除,删除的元素值通过e返回

OutputStack(Lnode *S) 操作前提:链栈S已存在

操作结果:将链栈S中的元素显示到屏幕上

} (2)顺序栈:

本程序包含6个函数:

? ? ? ? ? 链栈:

本程序包含6个函数:

? ? ? ? ?

(3)顺序栈: 主函数的伪码

main()

{ 定义一个顺序栈s; 定义变量i,n,m; 初始化 s ;

2

主函数main()

初始化顺序栈函数InitStack() 进栈函数Push() 出栈函数Pop()

输出栈中元素函数 OutputStack()

各函数调用关系:主函数main调用其他四个函数

主函数main()

初始化顺序栈函数InitStack() 进栈函数Push() 出栈函数Pop()

输出栈中元素函数 OutputStack()

各函数调用关系:主函数main调用其他四个函数

For循环(i=0;i

{*S=申请新结点; 定义整型变量n,e,i; 初始化S;

显示输入链栈元素个数; 输入整型数,赋给n; For循环(i=1; i<=n; i++) {调用push()函数;} 将栈顶元素赋给e; 显示栈顶元素e; 显示栈中所有元素; 换行; 调用pop函数; 显示栈中元素; }

4.详细设计 顺序栈: (1) 类型定义 typedef struct SqStack{ int *base; int *top; int stacksize;

}SqStack; 基本操作的伪码算法

(1)初始化

int InitStack(SqStack &s){ *s=申请新结点;

如果申请失败,结束程序; s.top=s.base;

s.stacksize=STACK_INIT_SIZE;

返回1;

福建师范大学物光院计算机教学辅导讲义

3

福建师范大学物光院计算机教学辅导讲义

}

(2)进栈

void Push(SqStack &S,int e)

{ 如果栈满{S.base=申请新的空间;

如果申请失败,结束程序 S.top=S.base+S.stacksize;

S.stacksize+=STACKINCREMENT;} 否则 }

(3)出栈

int Pop(SqStack *S,int e) {如果栈空,返回0;

e=*--S->top;

--S->stacksize;

*S.top++=e;

返回1; }

(4)输出元素

void OutputStack(SqStack *S)

{ 定义整型变量i和指向整型的指针型变量q; q=S->top-1;

For(i=0;istacksize;i++)循环 {输出q指向的元素; q--; } 换行;

} 链栈: 类型定义

typedef struct Lnode {

int data;

struct Lnode *next; }Lnode;

基本操作的伪码算法

(1)初始化

int InitStack(Lnode &s){ S->next=NULL} (2)进栈

void Push(Lnode &S,int x)

4


数据结构03栈的基本操作.doc 将本文的Word文档下载到电脑
搜索更多关于: 数据结构03栈的基本操作 的文档
相关推荐
相关阅读
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 10

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219