資料結構 判斷棧的出棧順序是否合理

2021-09-26 02:02:22 字數 1023 閱讀 4086

題目:設乙個棧的輸入序列為1,2,3…n,編寫演算法,判斷序列,p1,p2,…pn是否是合理的棧輸出序列

思想:將預期的出棧順序用乙個輔助棧儲存起來,然後將元素按照入棧的順序依次存入,若元素等於輔助棧的棧頂元素,則可以不用存入(當做出棧一樣),然後考慮下乙個要入棧的元素,按照這樣的操作之後,等到所有元素按照原有的序列入完棧時候,最後在棧中剩下的元素的棧頂元素,和輔助棧中的棧頂元素依次比較,直至棧空,這過程中如果出現禪定元素不同的現象,則這個預期出棧順序是不可能存在的,反之則存在。

**展示:

#include #include #include #define maxsize 100

/* * 題目:設乙個棧的輸入序列為1,2,3…n,編寫演算法,判斷序列,p1,p2,..pn是否是合理的棧輸出序列

* */

typedef struct

sqstack;

void initstack(sqstack &s)

int stackempty(sqstack s)

else

}void push(sqstack &s,int &x)

s.top++;

s.data[s.top] = x;

}void pop(sqstack &s,int &x)

x = s.data[s.top--];

}int gettop(sqstack s,int &x)

x = s.data[s.top];

return 1;

}void print(sqstack s)

printf("\n");

}void dispose()

else

n--;

}int tops,topq,x,flag = 1;

while(stackempty(q)!=1 && stackempty(s)!=1)

else

}if(flag)

else

}int main()

資料結構實驗題 判斷入棧出棧操作序列是否合法

假設以i和o分別代表入棧和出棧操作,設計乙個演算法判斷任一給定的棧操作序列是否合法。例如 ioioiiooio 演算法的設計思想 依次掃瞄出棧入棧操作序列,每掃瞄至乙個位置,需檢查出棧次數是否大於入棧次數,若大則非法。掃瞄結束後,再檢查出棧次數與入棧次數是否相等,若不相等,則非法。c 如下 incl...

資料結構實驗題 判斷入棧出棧操作序列是否合法

假設以i和o分別代表入棧和出棧操作,設計乙個演算法判斷任一給定的棧操作序列是否合法。例如 ioioiiooio 演算法的設計思想 依次掃瞄出棧入棧操作序列,每掃瞄至乙個位置,需檢查出棧次數是否大於入棧次數,若大則非法。掃瞄結束後,再檢查出棧次數與入棧次數是否相等,若不相等,則非法。c 如下 1 in...

資料結構實驗題 判斷入棧出棧操作序列是否合法

假設以i和o分別代表入棧和出棧操作,設計乙個演算法判斷任一給定的棧操作序列是否合法。例如 ioioiiooio 演算法的設計思想 依次掃瞄出棧入棧操作序列,每掃瞄至乙個位置,需檢查出棧次數是否大於入棧次數,若大則非法。掃瞄結束後,再檢查出棧次數與入棧次數是否相等,若不相等,則非法。c 如下 1 in...