江南大学通信与控制工程学院标准实验报告
(实验)课程名称:计算机软件技术基础实验名称:栈和队列
班级:自动化
姓名:李玉书
学号:0704090303
指导教师:卢先领
江南大学通信与控制学院
江南大学
实验报告
学生姓名:曹劼学号:0704080123
实验地点:信控机房实验时间:90分钟
一、实验室名称:信控学院计算中心
二、实验项目名称:栈和队列
三、实验学时:4学时
四、实验原理:
用栈实现顺序表的操作
五、实验目的:
1、掌握栈的数据类型描述,栈的特点及栈的存储结构;
2掌握栈的基本运算及应用。
六、实验内容:
设车辆厂生产了硬座车厢和软座车厢共N节,混合在一起要求用顺序栈的5种运算使所有的硬座车厢排列到软座车厢前面。
请完善主函数实现上述功能。
七、实验器材(设备、元器件):
计算机
八、实验步骤:
1、输入示例程序
2、构建按序插入函数实现算法
3、用C语言实现该算法
4、与源程序合并,编译,调试
5、测试,查错,修改
6、生成可执行文件,通过综合测试,完成实验
九、实验数据及结果分析:
测试用例
车厢数5,初始顺序SSHSH 测试结果
十、实验结论:
该程序能够判断是否输入错误,并且能够对正确情况下进行栈的数据处理,但是占用了额外的储存量,并且计算次数过多。
并且函数不具有通用性。
十一对本实验过程及方法、手段的改进建议:
完善了主函数的功能,使其能够达到排序的目的,但是浪费了一个数组的空间量和运算次数多。
附:源程序
报告评分:
#include<iostream.h>
#include<stdio.h>
#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<<s.stack[i]<<endl;
}
//按序入栈
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<<"请输入"<<n<<"节车厢代号(H代表硬座车厢,S代表软座车厢)"<<endl; sortstack(s,n);
prtstack(s);
} 指导教师签字:。