时间:2021-05-20
本文实例讲述了C++基于栈实现铁轨问题。分享给大家供大家参考。具体分析如下:
示例图如下所示:
经典栈问题!第一次做的时候思路太混乱了,现在看了刘汝佳的书,重新整理下。
#include <stdio.h>#include <string.h>/******************************************************************* 用数组A存储调整前的车厢号序列,用数组B存储调整好的车厢号序列* 用栈stack存储存放在中转站C中的车厢* 用ix_A指向A中最前面的车厢,用ix_B指向B中最前面的车厢** 如果ix_B已经指向了\0,则说明所有车厢已经按指定次序出站,否则* 如果ix_B指向的车厢等于ix_A指向的车厢,则直接把ix_A开到B,否则* 如果ix_B指向的车厢等于stack中的栈元素,则把栈顶车厢开出,否则* 如果此时A中还有车厢,则把A开入中转站C中,否则* 输出无解。*******************************************************************/char stack[1010];char A[1010];char B[1010];int main(int argc, char *argv[]){ scanf("%s%s",A,B); int len_a = strlen(A); int len_b = strlen(B); int top = -1; int tot = 0; int ix_a = 0; int ix_b = 0; while(1) { if(A[ix_a] == B[ix_b]) { printf("in\n"); printf("out\n"); ++ix_b; ++ix_a; if(ix_b == len_b) break; } else if(tot != 0 && B[ix_b] == stack[top]) { printf("out\n"); --tot; --top; ++ix_b; if(ix_b == len_b) break; } else if(ix_a != len_a) { printf("in\n"); ++tot; ++top; stack[top] = A[ix_a]; ++ix_a; if(ix_b == len_b) break; } else { printf("无解!\n"); return 0; } } printf("完成!\n"); return 0;}希望本文所述对大家的C++程序设计有所帮助。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
C++数据结构实现两个栈实现一个队列栈为后进先出,队列为先进先出用两个栈实现一个队列。是一个比较经典的问题。看到这个问题,我的第一个解题思路为:定义两个栈,s1
C++自定义栈实现迷宫求解一:迷宫求解是一个锻炼我们的算法求解能力的问题,它的实现方法有很多;今天我们就介绍其中的用栈求解的方法。二:什么是栈:大家应该都有往袋
C/C++实现递归和栈逆序字符串的实例递归函数调用模型逆序方法voidrevers(char*buf){char*p=buf;if(p==NULL){retur
本文实例为大家分享了C++实现拓扑排序的具体代码,供大家参考,具体内容如下一、思路先扫描所有顶点,把入度为0的顶点(如C,E)进栈。然后,取栈顶元素,退栈,输出
1、引入inline关键字的原因在c/c++中,为了解决一些频繁调用的小函数大量消耗栈空间(栈内存)的问题,特别的引入了inline修饰符,表示为内联函数。栈空