棧和佇列面試題1 菜鳥學習日記

2021-08-13 08:17:20 字數 2586 閱讀 1576

開篇點題,今天做了幾道棧和佇列的題,

在此,記錄分享

來分析一下,

思路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...