特點
棧——先進後出
佇列——後進先出
思路
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...