棧應用---元素出棧、入棧順序的合法性判斷
阿新 • • 發佈:2018-12-13
利用棧來判斷元素出入棧順序的合法性
- 例如:入棧的序列(1,2,3,4,5),出棧序列為 (4,5,3,2,1)
- 解決思路如下:
- 我們設定一箇中間棧:tempStack,記錄一個出棧順序下標index 1、按入棧順序,存入一個元素到tempStack中 2、比較tempStack的棧頂元素與出棧順序的第index個元素比較 相同,則進行3,否則進行1 3、彈出tempStack的棧頂元素,index++。執行2。 最後,如果迴圈結束後,tempStack為空,則表示出棧順序正確。否則,出棧順序錯誤。
void CheckPushPopStackLegal() { Stack s; int PushArray[] = { 1, 2, 3, 4, 5 }; int PopArray[] = { 4, 5, 1, 2, 3 }; int index = 0; int i = 0; InitStack(&s); while (i < 5) { PushStack(&s, PushArray[i]); while (TopStack(&s) == PopArray[index]) { PopStack(&s); index++; } i++; } if (EmptyStack(&s)) printf("出棧順序正確!\n"); else printf("出棧順序不正確!\n"); }
棧的封裝我就不往上放了,判斷元素出入棧順序合法性的思想就是這個。如有更好的思路,歡迎下方留言討論。