開篇點題,今天做了幾道棧和佇列的題,
在此,記錄分享
來分析一下,
思路1:我們可以底層用兩個棧來實現
先建個類,寫個框架,實現3個介面
class minst
void pop()
int min()
protected:
stack
_st;
stack
_minst;
};
然後我們再來分析一下如何寫,分析一下過程
雖然我們底層是用兩個棧實現的,但外面看起來要像乙個棧,那麼我們這兩個棧要保持一致,同進同出
這裡進棧出棧時,_st棧不用特殊考慮,但_minst我們是用它記錄最小值的所以要特殊考慮
我們可以從上圖看到,_minst入棧的要求是比當前棧頂的數小或者等於才能入棧,否則將當前棧頂再入棧
void push(const int& x)
else
}
此時我們_minst的棧頂永遠是最小值
出棧時,只要考慮不為空即可
void pop()
}
返回最小值就pop出_minst棧頂int min()
}
測試一下
void test1()
這個寫法還可以優化,_minst中重複入棧3,我們還可以用其他方法優化,後面再補充
我們先來畫圖分析一下
;先建立兩個棧,乙個用來入,乙個用來出
我們大概先說一下思路
入棧1,2,3
當要pop時,將1,2,3匯入進popstack,這時的棧頂,就是我們應該要pop的正確數了
然後我們再入棧時應該入pushstack
首先我們先來實現push()介面,這個介面我們不用特別考慮什麼,想清楚入棧都入pushstack
void push(const
int&x)
然後就是出棧
我們每次出popstack即可,如果為空了,就將pushstack倒過去,再出就好
下面是全部**
入佇列1,2,3,4
可是我們現在要出4,所以我們可以將1,2,3全放到另乙個佇列中去,就可以出4了
我們如資料的時候都入不為空有資料的那個,這樣我們才能就乙個在出的時候將前面資料移過去,出佇列
要知道哪個空佇列,寫個函式就好了
還有就是移資料也可以單獨寫個函式,方便後面呼叫,並最好都設為私有,外面看不到,這樣只能看到那些棧有的介面,更好一些
private:
void putempty()
}void qempty()
}
其它的也就沒什麼了,不說了,上全部**
class twoqueueonestack
void pop()
int& top()
bool empty()
size_t size()
private:
void putempty()//移資料
以上,今天總結完畢,剩下的以後再寫吧!
———-【菜鳥日記】by 小宣子
棧和列表面試題2 菜鳥學習日記
開篇接說明,接著上次沒有寫完的題接著寫 如 入棧的序列 1,2,3,4,5 出棧序列為 4,5,3,2,1 是合法序列,入棧的序列 1,2,3,4,5 出棧序列為 1,5,3,2,4 是不合法序列 出棧 4,5,3,2,1 怎麼出的1,2,3,4入棧,4出棧,入棧5,5出棧,然後3,2,1出棧,這種...
棧和佇列面試題
遞迴反轉乙個棧 void reverse stack s reverse s int tmp2 s.top s.pop reverse s s.push tmp1 reverse s s.push tmp2 遞迴排序乙個棧 void sort stack s sort s int tmp2 s.to...
棧和佇列面試題
1.使用兩個棧,實現乙個佇列。棧 先進後出,且只能從棧頂pop出資料。佇列 先進先出,對頭pop資料,隊尾push資料。如下 include template class myqueue void pop else if stack2.empty private stack stack1 stack...