浙江大学城市学院实验报告
课程名称数据结构基础
实验项目名称实验九栈的应用
学生姓名丁汀专业班级信管1006 学号31001444
实验成绩指导老师(签名)日期
一.实验目的和要求
1、学会通过对问题的分析,设计一种合理的数据结构,并进行定义及操作的实现。
2、掌握利用栈各种操作来进行具体的实际应用。
3、加强综合程序的分析、设计能力。
二.实验内容
1、共享栈的设置,问题描述如下:
在一个数组空间stack[MaxSize]中可以同时存放两个顺序栈,栈底分别处在数组的两端,当第1个栈的栈顶指针top1等于-1时则栈1为空,当第2个栈的栈顶指针top2等于MaxSize时则栈2为空。
两个栈均向中间增长,当有元素向栈1进栈时,使top1增1得到新的栈顶位置,当有元素向栈2进栈时,使top2减1得到新的栈顶位置。
当top1==top2-1或top1+1==top2时,存储空间用完,无法再向任一栈做进栈操作,此时可考虑给出错误信息并停止运行。
要求:
⑴给出共享栈的顺序存储类型定义。
⑵给出共享栈的抽象数据类型定义。
⑶建立头文件test9_stack.h,包含共享栈的基本操作实现函数;建立主程序文件test9.cpp,在主函数中对共享栈的各个操作进行测试。
2、利用上述共享栈,实现火车车厢的调度模拟
设火车车厢分为三类:硬座、硬卧、软卧,分别用A、B、C表示。
下图描述车厢调度的示意图,图中右端为排列无序的车厢,左端为调度后的车厢排列,使得所有软卧车厢在最前面、所有硬卧车厢在中间、所有硬座车厢在最后。
编程模拟上述车厢调度过程。
提示:两个辅助铁轨相当于两个栈,右端车厢进入用相应字符串给出,如“BBACBCAABBCAA”,左端车厢的用新生成的字符串给出。
在test9_stack.h 给出模拟函数,并在主函数中进行调用测试。
3、填写实验报告,实验报告文件取名为report9.doc 。
4、上传实验报告文件report9.doc 、源程序文件test9.cpp 及test9_stack.h 到Ftp 服务器上( ftp://10.66.28.222:2007 )的文件夹下。
三. 抽象数据类型定义
ADT STACK is
Data: 元素具有ElemType 类型的栈,用标示符StackType 表示栈对象类型 Operation:
void InitStack(Stack &S)
操作结果:初始化栈S ,即构造一个空栈 S
void Push(Stack &S, ElemType item,int i)
操作结果:元素item 进栈,作为新的栈顶元素
ElemType Pop(Stack &S,int i)
操作结果:栈顶元素出栈,并返回其值
ElemType Peek(Stack S,int i)
操作结果:取S 当前栈顶元素,并返回,但元素不出栈
End STACK
四. 存储结构定义及算法思路
一、定义共建栈的相关属性
struct Stack {
ElemType *stack ; // 存栈元素
int top1; // 栈顶指示器1,直接指向栈的一端
int MaxSize; // 栈的最大长度
int top2; //栈顶指示器2,直接指向栈的另外一端
};
二、创建动态的共建栈
void InitStack(Stack &S)
{
S.MaxSize=20;
S.stack=new ElemType[S.MaxSize];
BBACBCAABBCAA CCCBBBBBAAAAA
铁轨 辅助铁轨。