佇列及棧相關題目的實現

2021-07-12 02:49:04 字數 3175 閱讀 4788

定義棧的資料結構,請在該型別中實現乙個能夠得到棧最小元素的min函式。

使用兩個棧即可

class solution 

void pop()

}int top()

int min()

private:

stack

basestack;

stack

minstack;

};

編寫乙個類,只能用兩個棧結構實現佇列,支援佇列的基本操作(push,pop)。

給定乙個操作序列ope及它的長度n,其中元素為正數代表push操作,為0代表pop操作,保證操作序列合法且一定含pop操作,請返回pop的結果序列。

測試樣例:

[1,2,3,0,4,0],6

返回:[1,2]

class twostack 

return res;

}void qpush(int value)

int qpop()

else

if (!popstack.empty())

}return top;

}private:

stack

pushstack;

stack

popstack;

};

請編寫乙個程式,按公升序對棧進行排序(即最大元素位於棧頂),要求最多只能使用乙個額外的棧存放臨時資料,但不得將元素複製到別的資料結構中。

給定乙個int numbers(c++中為vector),其中第乙個元素為棧頂,請返回排序後的棧。請注意這是乙個棧,意味著排序過程中你只能訪問到第乙個元素。

測試樣例:

[1,2,3,4,5]

返回:[5,4,3,2,1]

每次將最小元素放到另乙個棧的棧底即可

class twostacks 

helper[helper_id++] = top;

while (id > id_tmp)}}

return helper;}};

實現乙個棧的逆序,但是只能用遞迴函式和這個棧本身的pop操作來實現,而不能自己申請另外的資料結構。

給定乙個整數陣列a即為給定的棧,同時給定它的大小n,請返回逆序後的棧。

測試樣例:

[4,3,2,1],4

返回:[1,2,3,4]

依次將棧底元素放到相應的位置上

class stackreverse 

private:

bool reversestack(vector

& a, int n, int depth)

private:

// 取出棧底元素, 並刪除

int getlast(vector

& a, int n)

};

有乙個整型陣列 arr 和乙個大小為 w 的視窗從陣列的最左邊滑到最右邊,視窗每次向右邊滑乙個位置。 返回乙個長度為n-w+1的陣列res,res[i]表示每一種視窗狀態下的最大值。 以陣列為[4,3,5,4,3,3,6,7],w=3為例。因為第乙個視窗[4,3,5]的最大值為5,第二個視窗[3,5,4]的最大值為5,第三個視窗[5,4,3]的最大值為5。第四個視窗[4,3,3]的最大值為4。第五個視窗[3,3,6]的最大值為6。第六個視窗[3,6,7]的最大值為7。所以最終返回[5,5,5,4,6,7]。

給定整形陣列arr及它的大小n,同時給定w,請返回res陣列。保證w小於等於n,同時保證陣列大小小於等於500。

測試樣例:

[4,3,5,4,3,3,6,7],8,3

返回:[5,5,5,4,6,7]

維護乙個遞減的deque 雙端佇列

class slidewindow 

else

myqueue.push_back(i);

}if (!myqueue.empty() && (i - myqueue.front() + 1 > w))

myqueue.pop_front();

if (i - w + 1 >= 0)

res[i - w + 1] = arr[myqueue.front()];

}return res;}};

對於乙個沒有重複元素的整數陣列,請用其中元素構造一棵maxtree,maxtree定義為一棵二叉樹,其中的節點與陣列元素一一對應,同時對於maxtree的每棵子樹,它的根的元素值為子樹的最大值。現有一建樹方法,對於陣列中的每個元素,其在樹中的父親為陣列中它左邊比它大的第乙個數和右邊比它大的第乙個數中更小的乙個。若兩邊都不存在比它大的數,那麼它就是樹根。請設計o(n)的演算法實現這個方法。

給定乙個無重複元素的陣列a和它的大小n,請返回乙個陣列,其中每個元素為原陣列中對應位置元素在樹中的父親節點的編號,若為根則值為-1。

測試樣例:

[3,1,4,2],4

返回:[2,0,-1,2]

佇列實現棧棧實現佇列

佇列是一種先進先出的資料結構,要想實現先進後出,需加乙個輔助佇列進行資料的來回倒 引用交換 從而實現棧結構。例如 5 4 3 2 1 用乙個輔助佇列裝 4 3 2 1,把5彈出,在把 4 3 2 1放回原佇列,如此反覆可變成5 4 3 2 1的棧結構。棧是一種先進後出的資料結構,要想實現先進先出,同...

佇列實現棧,棧實現佇列

兩個佇列實現棧 每次進入乙個佇列,取出得時候,把所有元素進入另乙個佇列,只留下乙個元素,以此實現棧的先進後出 filo package algorithmbymyself import j a.util.linkedlist import j a.util.queue 用兩個佇列實現乙個棧 publ...

佇列實現棧以及棧實現佇列

232.用棧實現佇列 簡單 225.用佇列實現棧 簡單 佇列是一種先進先出的資料結構,棧是一種先進後出的資料結構,形象一點就是這樣 這兩種資料結構底層其實都是陣列或者鍊錶實現的,只是 api 限定了它們的特性,那麼今天就來看看如何使用 棧 的特性來實現乙個 佇列 如何用 佇列 實現乙個 棧 首先,佇...