【数据结构】使用栈解决火车硬席(H)和软席(S)的调度问题
2017-10-22 22:17
337 查看
解决问题描述:
火车调度站的入口处有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; }
运行结果截图:
相关文章推荐
- 【数据结构】使用栈Stack解决迷宫问题
- 解决AFN不能使用GCD调度组的问题
- 火车调度问题的回溯法解决
- 【数据结构】使用栈Stack解决迷宫问题
- 火车调度问题的两种解决方法(C语言描述)
- [递归]使用栈解决n辆列车调度问题(列车编号1-n)
- 练习使用链表数据结构解决一件小问题
- 遇及不能使用MSN问题,终归解决(zz)
- 使用Apache Axis部署 Web服务时的常见问题及其解决方法
- 请求帮助:如何解决烦人的VS.NET2003编译时“无法将程序集复制到文件,另一个程序正在使用,进程无法访问”的问题?
- 使用内存DC解决重画闪烁问题
- FedoraCore2正式版使用问题解决集中
- 在sps中使用第三方smtp软件解决邮件服务器不允许匿名访问的问题
- 解决使用ASP无法连接 ORACLE 9i 数据库的问题。
- 在sps中使用第三方smtp软件解决邮件服务器不允许匿名访问的问题
- 使用一个简单的webframe来解决EAI和分工合作问题
- 关于在struts 框架中使用Filter过滤器解决汉字编码问题
- 蛙蛙推荐:使用FreeTextBox出现脚本错误的问题解决
- 水晶报表使用经验谈4--使用视图解决在报表中的多表关联问题
- 使用java mail 包收发中文邮件的编码,解码问题以及解决方法