- 说明:这是武汉理工大学计算机学院【数据结构】课程实验:使用栈解决火车硬席(H)和软席(S)的调度问题
- 武汉理工大学计算机专业课程资料汇总:https://cxhit.blog.csdn.net/article/details/
- >>点击查看WUTer计算机专业实验汇总
- 谨记:纸上得来终觉浅,绝知此事要躬行。
解决问题描述:
火车调度站的入口处有n节硬席或软席车厢(分别以H和S表示)等待调度,试编写算法,输出对这n节车厢进行调度的操作(即入栈或出栈操作)序列,以使所有的软席车厢都被调整到硬席车厢之前。
源代码:
// *.cpp: 定义控制台应用程序的入口点。 #include <iostream> using namespace std; #define STACK_INIT_SIZE 100 #define STACKINCREASE 10 #define SElemType char #define Status int #define OK 1 #define OVERFLOW 0 #define ERROR -1 typedef struct { SElemType *base; SElemType *top; int stacksize; }SqStack; //构造空栈S Status InitStack(SqStack &S) { S.base = (SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType)); if (!S.base) return OVERFLOW; S.top = S.base; S.stacksize = STACK_INIT_SIZE; return OK; } //取栈顶元素 Status GetTop(SqStack S, SElemType &e) { if (S.top == S.base){ //如果栈为空,返回错误 return ERROR; } e = *(S.top - 1); return OK; } //入栈操作 Status Push(SqStack &S, SElemType e) { if (S.top - S.base >=S.stacksize) { //栈满,追加空间 S.base = (SElemType *)realloc(S.base, (S.stacksize + STACKINCREASE) * sizeof(SElemType)); if (!S.base) return ERROR; //存储空间分配失败 S.top = S.base + S.stacksize; S.stacksize += STACKINCREASE; } *S.top = e; S.top++; return OK; } //出栈操作 Status Pop(SqStack &S, SElemType &e) { if (S.top == S.base) return ERROR; e = *--S.top; return OK; } int main() { SqStack S; InitStack(S); char coach[80]; cout << "硬席车厢请用字母“H”表示、软席车厢请用字母“S”表示\n"; cout << "请输入车厢序列:"; cin >> coach; cout << "输入成功!待调度车厢序列:" << coach << endl; int i = 0, j = 0; while (coach[i]) { if (coach[i] == 'H') { //如果是硬席车厢 Push(S, coach[i]); //执行入栈操作 i++; } else{ coach[j] = coach[i]; //如果是软席车厢, j++; i++; //将其从数组coach的第一个开始覆盖插入 } } //结束循环,栈中为H,数组中前j个为S for (j ;coach[j] ;j++) { //将栈中的H出栈,覆盖到coach数组第j个后面 Pop(S, coach[j]); } cout << "调度成功!调度后车厢序列:"; cout << coach << endl; //输出调度之后的序列 return 0; }
讯享网
运行结果截图:


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/50009.html