題目:設乙個棧的輸入序列為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...