C++基於棧完成鐵軌成績。本站提示廣大學習愛好者:(C++基於棧完成鐵軌成績)文章只能為提供參考,不一定能成為您想要的結果。以下是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++法式設計有所贊助。