思路:1.使用遞迴pop出棧中元素,直到棧中元素只剩下乙個元素
2.當前第一次遞迴返回的時候,棧中有2個元素,我們再利用另乙個遞迴函式putitem把兩個元素逆置
3.以此遞迴下去,直到棧中元素全部逆置。
過程如下
1)1 , 2, 3, 4 第乙個遞迴不斷出棧,第一次滿足返回條件時,棧中元素只有 1
2)回到第乙個遞迴的上一層,利用putitem把 2 壓入棧中,當putitem返回時,棧中元素為 2 1
3)繼續回到第乙個遞迴的上一層,利用putitem把 3 壓入棧中,當putitem返回時,棧中元素為 3 2 1
4)繼續回到第乙個遞迴的上一層,利用putitem把 4 壓入棧中,當putitem返回時,棧中元素為 4 3 2 1
5)至此遞迴結束
#include #include using namespace std;
stackst;
void putitem(stack&st, int data)
int tmp = st.top();
st.pop();
putitem(st, data);
st.push(tmp);
}void reversestack(stack&st)
int tmp = st.top();
st.pop();
reversestack(st);
putitem(st, tmp);
}int main()
return 0;
}
用佇列將棧中元素逆置
程式設計實現利用佇列將棧中元素逆置的演算法。void inverse stack s,queue q while isempty q include include define true 1 define false 0 define n 100 typedef int bool typedef ...
棧中元素排序
棧中元素排序 題目 乙個棧中元素型別為整型,現在想將棧頂到棧底從大到小排序。要求 只能申請乙個棧,但可以申請新的變數,不能申請額外的資料結構,如何完成排序。解析 將要排序的棧記為s,申請的輔助棧記為t,在棧s上執行pop操作,彈出的元素為cur,每次彈出乙個元素時,分兩種情況 情況一 如果cur小於...
棧中元素排序
題目描述 設計乙個演算法,將棧中的元素按公升序排列。可另外借用乙個棧來實現。思路 從主棧中依次彈出棧頂元素壓入輔助棧,每當將要壓入的元素使得輔助棧中的元素不是公升序排列,就將輔助棧裡的元素重新壓入原始棧,直到輔助棧裡的元素都小於當前要壓入的元素,然後再壓入當前元素。假設當前主棧裡的元素是。過程 如下...