C++基于棧實現(xiàn)鐵軌問題
更新時間:2015年04月20日 11:55:25 作者:司青
這篇文章主要介紹了C++基于棧實現(xiàn)鐵軌問題,實例分析了C++使用棧實現(xiàn)鐵軌問題的思路與解決方法,具有一定參考借鑒價值,需要的朋友可以參考下
本文實例講述了C++基于棧實現(xiàn)鐵軌問題。分享給大家供大家參考。具體分析如下:
示例圖如下所示:
經(jīng)典棧問題!第一次做的時候思路太混亂了,現(xiàn)在看了劉汝佳的書,重新整理下。
#include <stdio.h> #include <string.h> /****************************************************************** * 用數(shù)組A存儲調整前的車廂號序列,用數(shù)組B存儲調整好的車廂號序列 * 用棧stack存儲存放在中轉站C中的車廂 * 用ix_A指向A中最前面的車廂,用ix_B指向B中最前面的車廂 * * 如果ix_B已經(jīng)指向了\0,則說明所有車廂已經(jīng)按指定次序出站,否則 * 如果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) /* 車已經(jīng)全出去了,操作成功 */ 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++網(wǎng)絡編程下Linux的epoll技術和Windows下的IOCP模型
c++ 網(wǎng)絡編程LINUX-epoll/windows-IOCP下socket opoll函數(shù)用法 優(yōu)于select方法的epoll 以及windows下IOCP 解決多進程服務端創(chuàng)建進程資源浪費問題,感興趣的小伙伴一起來學習吧2021-08-08C++17 使用 std::string_view避免字符串拷貝優(yōu)化程序性能
這篇文章主要介紹了C++17 使用 std::string_view避免字符串拷貝優(yōu)化程序性能,幫助大家提高程序運行速度,感興趣的朋友可以了解下2020-10-10