欢迎来到入门教程网!

C语言

当前位置:主页 > 软件编程 > C语言 >

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

来源:本站原创|时间:2020-01-10|栏目: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++实现图的邻接矩阵存储和广度、深度优先遍历实例分析

栏    目:C语言

下一篇:C字符串操作函数实现方法小结

本文标题:C++基于栈实现铁轨问题

本文地址:https://www.xiuzhanwang.com/a1/Cyuyan/3095.html

网页制作CMS教程网络编程软件编程脚本语言数据库服务器

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:835971066 | 邮箱:835971066#qq.com(#换成@)

Copyright © 2002-2020 脚本教程网 版权所有