快速得到棧 佇列的最大值

2021-09-22 11:07:58 字數 2755 閱讀 1728

特點

棧——先進後出

佇列——後進先出

思路

1. 快速得到最大值的棧

結構

需要兩個陣列:乙個陣列stackitem儲存棧的元素,另乙個陣列link2nextmaxvalueindex儲存下乙個最大值的位置

兩個指標:乙個為stacktop指向棧頂,另乙個為maxvalueindex指向最大值的下標

操作

插入時:比較插入元素與最大值的大小,如果比最大值還大呢,link2nextmaxvalueindex指向原來最大值的位置(即maxvalueindex),而maxvalueindex變為現在插入元素的位置;否則link2nextmaxvalueindex指向-1

刪除時:刪除元素的位置出,如果maxvalueindex與當前位置相同,此時maxvalueindex為link2nextmaxvalueindex[satcktop]

返回棧的最大元素

圖示

以入棧2 7 1,出棧為例:

結果

2. 快速得到最大值的佇列

兩個棧可以實現佇列(參考),就用剛才的棧實現佇列

**

#include #include 

#define max 100

using

namespace

std;

class

stack

void push(int

val);

intpop();

intmax();

int size()

int empty()

private

:

intstackitem[max];

intlink2nextmaxvalueindex[max];

intstacktop;

intmaxvalueindex;

};class

queue

private

: stack stackin;

stack stackout;

};void stack::push(int

val)

else

else

link2nextmaxvalueindex[stacktop] = -1

; }

}int

stack::pop()

else

}int

stack::max()

void queue::enqueue(int

val)

intqueue::dequeue()

return

stackout.pop();

}int

main()

結果

棧 佇列 佇列的最大值

請定義乙個佇列並實現函式max value得到佇列裡的最大值,要求函式max value push back和pop front的均攤時間複雜度都是o 1 若隊列為空,pop front和max value需要返回 1。示例1 輸入 maxqueue push back push back max ...

雙棧佇列實現快速獲取佇列最大值最小值

1 思路 自己實現乙個棧,其中成員為標準庫中的棧,乙個存放全部的元素,乙個存放最小元素,乙個存放最大元素。使用自己實現的棧來實現乙個求最大值最小值的佇列,其中包含兩個成員,乙個作為出隊的棧,乙個作為入隊的棧。2 c 實現 include include include using namespace...

佇列的最大值

題目 給定乙個陣列和滑動視窗的大小,請找出所有滑動視窗裡的最大值。例如,如果輸入陣列及滑動視窗的大小3,那麼一共存在6個 滑動視窗,它們的最大值分別為,include include include using namespace std templateclass queuewithmax voi...