实验2栈和队列
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
江南大学通信与控制工程学院标准实验报告
(实验)课程名称:计算机软件技术基础实验名称:栈和队列
班级:自动化
姓名:李玉书
学号:0704090303
指导教师:卢先领
江南大学通信与控制学院
江南大学
实验报告
学生姓名:曹劼学号:0704080123
实验地点:信控机房实验时间:90分钟
一、实验室名称:信控学院计算中心
二、实验项目名称:栈和队列
三、实验学时:4学时
四、实验原理:
用栈实现顺序表的操作
五、实验目的:
1、掌握栈的数据类型描述,栈的特点及栈的存储结构;
2掌握栈的基本运算及应用。
六、实验内容:
设车辆厂生产了硬座车厢和软座车厢共N节,混合在一起要求用顺序栈的5种运算使所有的硬座车厢排列到软座车厢前面。请完善主函数实现上述功能。
七、实验器材(设备、元器件):
计算机
八、实验步骤:
1、输入示例程序
2、构建按序插入函数实现算法
3、用C语言实现该算法
4、与源程序合并,编译,调试
5、测试,查错,修改
6、生成可执行文件,通过综合测试,完成实验
九、实验数据及结果分析:
测试用例
车厢数5,初始顺序SSHSH 测试结果
十、实验结论:
该程序能够判断是否输入错误,并且能够对正确情况下进行栈的数据处理,但是占用了额外的储存量,并且计算次数过多。并且函数不具有通用性。
十一对本实验过程及方法、手段的改进建议:
完善了主函数的功能,使其能够达到排序的目的,但是浪费了一个数组的空间量和运算次数多。
附:源程序
报告评分:
#include
#include
#define elemtype char
const int maxlen=20;
typedef struct
{
elemtype stack[maxlen];
int top;
}seqstack;
//栈初始化
void inistack(seqstack &s)
{
s.top=-1;
}
//进栈
void push(seqstack &s,elemtype x)
{
if(s.top==maxlen-1)cout<<"overflow";
else
{
s.top++;
s.stack[s.top]=x;
}
}
//出栈
void pop(seqstack &s)
{
if(s.top==-1)cout<<"underflow";
else
{
s.top--;
}
}
//取栈顶元素
elemtype getton(seqstack s)
{
if(s.top==-1){cout<<"underflow";return 0;}
else return s.stack[s.top];
}
//判栈空
int empty(seqstack s)
{
if(s.top==-1)return 1;
else return 0;
}
//打印栈内容
void prtstack(seqstack &s)
{
int i;
for(i=0;i<=s.top;i++)cout< } //按序入栈 void sortstack(seqstack &s,int &n) { elemtype x; while(0==n--||maxlen-1==s.top)return; //n次后或堆栈满时,递归结束while(!(('H'==(x=getchar()))||('S'==x))); //接受H或S,过滤无关量 if('H'==x)push(s,x); //H优先压栈 sortstack(s,n); if('S'==x)push(s,x); //H全入栈后,S入栈 } void main(void) { int n,i; elemtype x; seqstack s; inistack(s); cout<<"请输入车厢数"; cin>>n; cout<<"请输入"< prtstack(s); } 指导教师签字: