附录 实验报告参考规范
《数据结构》实验报告
院系____________________ 专业 ____________________ __________级 __________班 _______年____月____日 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={
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={
福建师范大学物光院计算机教学辅导讲义
基本操作: 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;i } 链栈: 类型定义 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

