C++基于栈实现铁轨问题

本文实例讲述了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++程序设计有所帮助。

以上是 C++基于栈实现铁轨问题 的全部内容, 来源链接: utcz.com/z/337717.html

回到顶部