精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

用棧實(shí)現(xiàn)隊(duì)列 & 用隊(duì)列實(shí)現(xiàn)棧

開(kāi)發(fā)
以下是用棧實(shí)現(xiàn)隊(duì)列 & 用隊(duì)列實(shí)現(xiàn)棧的思路,主要是用來(lái)考察棧和隊(duì)列的特性。

棧和隊(duì)列

棧和隊(duì)列都是一種數(shù)據(jù)結(jié)構(gòu),它們的作用都是存儲(chǔ)。

每種數(shù)據(jù)結(jié)構(gòu)都有著其對(duì)應(yīng)的特性。隊(duì)列的特性是先進(jìn)先出,而棧的特性是先進(jìn)后出:

圖片

只有滿足了它們的以上特性,一個(gè)數(shù)據(jù)結(jié)構(gòu)才能被稱為棧或者隊(duì)列。

接下來(lái)我們看一下這兩道經(jīng)典的數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)題:

用棧實(shí)現(xiàn)隊(duì)列

要用棧實(shí)現(xiàn)隊(duì)列,就得實(shí)現(xiàn)隊(duì)列的以下API:

void push(int x) // 將元素添加到隊(duì)列的尾處
int pop() //刪除隊(duì)列的頭部元素并且返回
int peek() //返回隊(duì)列的頭個(gè)元素
boolean empty() //判斷隊(duì)列是否為空

我們要讓設(shè)計(jì)的隊(duì)列滿足以上API的使用。

隊(duì)列有隊(duì)列頭部和隊(duì)列尾部。所以我們可以用兩個(gè)棧,通過(guò)棧的特性讓它們相互配合從而實(shí)現(xiàn)一個(gè)隊(duì)列:

圖片

    Stack<Integer> stackPush;  //一個(gè)棧用來(lái)負(fù)責(zé)push元素
Stack<Integer> stackPop; //一個(gè)棧用來(lái)負(fù)責(zé)將元素pop掉

//初始化
public MyQueue() {
stackPush = new Stack<Integer>();
stackPop = new Stack<Integer>();
}

push():

push()要做的,就是將一個(gè)元素添加到隊(duì)列的尾處。

所以這里我們可以直接調(diào)用棧的push(),然后把元素打入stachPush這個(gè)棧就好了:

    public void push(int x) {
stackPush.push(x);
}

此時(shí),元素1就在stachPush這個(gè)棧的底部:

圖片

pop():

pop()就是刪除隊(duì)列的頭部元素并且返回。

有了剛才push()的經(jīng)驗(yàn),pop()依然可以按照push()剛才經(jīng)驗(yàn),就是當(dāng)stackPop為空的時(shí)候,按順序把stackPush里面的元素一個(gè)一個(gè)pop()掉,并且返回給stackPop:

圖片

然后再將stackPop()里面的元素pop()返回:

圖片

    public int pop() {
if (stackPop.isEmpty() && stackPush.isEmpty()) {
throw new RuntimeException("Queue is empty.");
} else {
if (stackPop.isEmpty()) {
while (!stackPush.isEmpty()) {
stackPop.push(stackPush.pop());
}
}
}
return stackPop.pop();
}

peek():

peek就是返回隊(duì)列的頭個(gè)元素:

pop()和peek()的區(qū)別是什么呢?就是pop()返回隊(duì)列頭個(gè)元素并且要?jiǎng)h除,但是peek()返回卻不刪除呀。

所以,和pop()的思路一樣,只需要在最后返回的時(shí)候把stackPop.pop()換成stackPop.peek()就完事了。

    public int peek() {
if (stackPush.isEmpty() && stackPop.isEmpty()) {
throw new RuntimeException("Queue is empyt.");
} else {
if (stackPop.isEmpty()) {
while (!stackPush.isEmpty()) {
stackPop.push(stackPush.pop());
}
}
}
return stackPop.peek();
}

empty():

判斷隊(duì)列是否為空,為空就返回true,不為空就返回false。

所以我們也可以直接判斷兩個(gè)棧是否同時(shí)為空。只要同時(shí)為空就返回true,不同時(shí)為空就返回false:

    public boolean empty() {
return stackPop.isEmpty() && stackPush.isEmpty();
}

可以看出,用棧實(shí)現(xiàn)隊(duì)列思路還是比較簡(jiǎn)單的。主要利用的是兩個(gè)棧的相互配合。其核心思路就是一個(gè)數(shù)據(jù)從一個(gè)棧的隊(duì)尾移動(dòng)到另一個(gè)棧,就處于隊(duì)頭的位置。

那么來(lái)說(shuō)一下時(shí)間復(fù)雜度,當(dāng)隊(duì)列為空的時(shí)候pop()和peek()都要通過(guò)while循環(huán)把元素從stackPush移動(dòng)到stackPop,所以復(fù)雜度是O(n)。

用隊(duì)列實(shí)現(xiàn)棧

先看看棧的API:

void push(int x) //將元素壓入棧頂
int pop() //移除并返回棧頂元素
int top() //返回棧頂元素
boolean empty() //如果棧是空的,返回 true ;否則,返回 false 。

和隊(duì)列的API一樣。只不過(guò)這一次我們是要模擬由隊(duì)列實(shí)現(xiàn)棧。

如果說(shuō)用棧實(shí)現(xiàn)隊(duì)列是一種相互配合的方式的話,那么由隊(duì)列實(shí)現(xiàn)棧就不需要了。我們可以使用ArrayDeque()來(lái)實(shí)現(xiàn)隊(duì)列。

    Queue<Integer> queue;
// 使用ArrayDeque作為隊(duì)列
public MyStack() {
queue = new ArrayDeque<>();
}

push(int x):

根據(jù)棧的特性,第一個(gè)入棧的元素會(huì)處于棧底部。所以在使用隊(duì)列模擬棧的時(shí)候,可以先把元素入隊(duì)列,然后再一個(gè)一個(gè)拿出來(lái),最后再入一次隊(duì)列,這樣子原本處于隊(duì)列頭的元素就到了隊(duì)列尾部,相當(dāng)于棧頭:

圖片

    // 入棧時(shí),將新元素x進(jìn)入隊(duì)列后,將新元素x之前的所有元素重新入隊(duì),此時(shí)元素x處于隊(duì)頭
public void push(int x) {
queue.offer(x);
int size = queue.size();
for (int i = 0; i < size - 1; i++) {
queue.offer(queue.poll());
}
}

pop():

由于出棧的操作是和出隊(duì)列的操作是相同的,當(dāng)我們把元素從隊(duì)列頭變到隊(duì)列尾部后,就直接poll()出來(lái)即可:

圖片

    public int pop() {
if (queue.isEmpty()) {
throw new RuntimeException("EMPTY STACK");
}
return queue.poll();
}

top() :

獲取棧頭部元素,就相當(dāng)于隊(duì)列的peek():

    public int top() {
if (queue.isEmpty()) {
throw new RuntimeException("EMPTY STACK");
}
return queue.peek();
}

empty():

返回隊(duì)列是否為空,都是通用的:

    public boolean empty() {
return queue.isEmpty();
}

相比于用棧實(shí)現(xiàn)隊(duì)列,用隊(duì)列實(shí)現(xiàn)棧就非常簡(jiǎn)單。核心思想就是將隊(duì)列的元素先拿出來(lái)再放進(jìn)去從而滿足先進(jìn)后出的特性。

那么它們的時(shí)間復(fù)雜度是多少呢?其它操作都是O(1)。只有pop()操作需要通過(guò)循環(huán)把元素從隊(duì)列拿出來(lái)再放進(jìn)去,所以時(shí)間復(fù)雜度是O(n)。

以上就是用棧實(shí)現(xiàn)隊(duì)列 & 用隊(duì)列實(shí)現(xiàn)棧的思路。主要是用來(lái)考察棧和隊(duì)列的特性。

責(zé)任編輯:趙寧寧 來(lái)源: fancyJava
相關(guān)推薦

2021-03-01 23:31:48

隊(duì)列實(shí)現(xiàn)棧存儲(chǔ)

2021-09-08 09:52:34

語(yǔ)言

2024-02-02 08:25:34

隊(duì)列與棧Python數(shù)據(jù)結(jié)構(gòu)

2021-03-27 11:02:04

JavaScript隊(duì)列編程語(yǔ)言

2015-09-10 08:46:15

Java面試題

2020-12-17 10:12:33

數(shù)據(jù)結(jié)構(gòu)算法隊(duì)列

2009-04-20 10:09:46

C#優(yōu)先隊(duì)列.NET Framew

2020-10-26 08:19:53

算法隊(duì)列

2020-10-28 10:10:03

Java單鏈表數(shù)據(jù)結(jié)構(gòu)

2020-11-02 08:18:11

隊(duì)列數(shù)據(jù)

2023-12-28 09:55:08

隊(duì)列數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)

2012-03-29 15:15:49

Java

2020-08-10 14:46:30

JavaScriptStack

2011-11-09 14:59:37

LwIP協(xié)議棧

2023-12-07 12:59:46

C語(yǔ)言循環(huán)隊(duì)列代碼

2015-09-15 11:00:49

MEANWeb

2023-09-05 15:48:14

RabbitMQ延遲隊(duì)列

2023-10-10 13:39:53

Spring隊(duì)列優(yōu)化

2011-04-11 11:23:17

隊(duì)列數(shù)據(jù)結(jié)構(gòu)

2017-05-02 22:38:44

前端開(kāi)發(fā)JS事件循環(huán)機(jī)制
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

96成人在线视频| 久久成人精品视频| 日韩欧美黄色大片| 女女色综合影院| 国产精品99久久久久| 国产69精品久久久久99| 欧美大波大乳巨大乳| 激情不卡一区二区三区视频在线| 亚洲www啪成人一区二区麻豆| 欧美日韩在线精品一区二区三区| 国产黄频在线观看| 欧美与亚洲与日本直播| 亚洲国产一区二区在线观看| 日韩欧美国产午夜精品| 999香蕉视频| 午夜激情在线| 国产午夜精品一区二区三区嫩草 | 色综合视频一区二区三区44| 天天综合网天天综合色| 国产人妻互换一区二区| 欧美日韩激情视频一区二区三区| 国产一区二区三区精品欧美日韩一区二区三区 | 日日摸夜夜添夜夜添亚洲女人| 久久999免费视频| 91导航在线观看| 亚洲欧洲色图| 欧美r级电影在线观看| 色婷婷成人在线| 黑人巨大亚洲一区二区久| 亚洲综合清纯丝袜自拍| 26uuu成人| h视频在线免费| 久久亚洲综合av| 狠狠色综合色区| 精品人妻少妇嫩草av无码专区| 奇米在线7777在线精品 | 国产精品天堂蜜av在线播放| 欧美丝袜一区二区| 欧美一区二区中文字幕| 色帝国亚洲欧美在线| 亚洲色大成网站www久久九九| 亚洲春色在线视频| 岛国在线大片| 国产欧美日产一区| 欧美在线视频二区| 国产免费视频在线| 国产亚洲精品bt天堂精选| 久久国产精品-国产精品| 隣の若妻さん波多野结衣| 国产高清不卡一区二区| 91视频九色网站| 国产精品久久久久久久久毛片| 日本va欧美va瓶| 国产精品99蜜臀久久不卡二区| 4438国产精品一区二区| 亚洲在线免费| 日韩av毛片网| 少妇无套内谢久久久久| 麻豆91在线观看| 成人av电影天堂| 国产喷水吹潮视频www| 国产精品羞羞答答xxdd| 动漫精品视频| 亚洲欧美综合在线观看| 久久精品一区二区三区四区| 日韩欧美国产二区| 中文字幕在线视频区| 亚洲欧洲成人自拍| 免费看日本黄色| 图片区小说区亚洲| 午夜日韩在线观看| 日韩av播放器| 91精品在线免费视频| 欧美成人a∨高清免费观看| 精品久久久久一区二区| 亚洲aa在线| 色一区av在线| 久久久久黄色片| 新67194成人永久网站| 国产精品国产亚洲伊人久久| 国产又色又爽又黄又免费| 蜜桃视频在线观看一区| 99久久99久久| 极品白浆推特女神在线观看 | 日本一区二区欧美| 久久成人免费| 91系列在线观看| 天天摸天天碰天天爽天天弄| 国产人伦精品一区二区| 日韩精品免费一区| japanese23hdxxxx日韩| 3d动漫精品啪啪一区二区竹菊| 午夜影院福利社| av资源久久| 欧美国产日韩一区| 天天综合久久综合| 国产宾馆实践打屁股91| 日韩视频在线观看国产| 日韩成人伦理| 欧美视频三区在线播放| 精人妻一区二区三区| 国内精品视频在线观看| 欧美激情aaaa| 国产一区二区视频免费观看 | 亚洲综合图片一区| 99国产一区| 91丨九色丨国产在线| 黄色av网站在线免费观看| 一区二区免费在线| 三上悠亚在线一区二区| 青青一区二区| 欧美国产日产韩国视频| 亚洲无码精品在线观看| 久久综合九色综合久久久精品综合| 正义之心1992免费观看全集完整版| 国内激情视频在线观看| 日韩一卡二卡三卡| 欧美成人另类视频| 性色av一区二区怡红| 99视频国产精品免费观看| 在线免费看黄网站| 色老综合老女人久久久| 国产伦精品一区三区精东| 羞羞色午夜精品一区二区三区| 国产成人免费av| 少妇一区二区三区四区| 亚洲综合丁香婷婷六月香| 亚洲午夜精品一区| 99久久影视| 国产精品三级久久久久久电影| 天堂中文在线8| 午夜精品123| www.com日本| 欧美激情综合色综合啪啪| 成人福利在线视频| 久久黄色美女电影| 这里只有精品免费| 三级黄色录像视频| 精品一区二区三区香蕉蜜桃| 亚洲精品自在在线观看| 韩日精品一区| 中文字幕一区二区三区电影| 中文字幕在线观看欧美| 国产欧美日韩三级| 三级视频中文字幕| 色婷婷亚洲mv天堂mv在影片| 国产精品专区一| 蜜芽在线免费观看| 欧美亚洲动漫精品| 日韩福利在线视频| 理论电影国产精品| 中文字幕一区二区三区精彩视频| 日日夜夜综合| 九九热99久久久国产盗摄| www.久久精品.com| 亚洲国产精品一区二区www| 日本一级大毛片a一| 99热这里只有成人精品国产| 久久精品magnetxturnbtih| 中文在线8资源库| 亚洲区免费影片| 国产又粗又猛又爽又| 欧美激情一区二区三区蜜桃视频 | 久久久加勒比| 久久亚洲精品中文字幕冲田杏梨| a网站在线观看| 亚洲电影中文字幕在线观看| 国产精品无码电影| 日本三级亚洲精品| 黄色污污在线观看| 久久电影在线| 国产精品扒开腿做| 国产二区三区在线| 亚洲第一网站男人都懂| 欧美一级淫片免费视频黄| 国产精品免费久久| 中文在线字幕观看| 午夜一区不卡| 一级黄色免费在线观看| 日韩成人18| 日韩av日韩在线观看| 免费在线毛片网站| 亚洲成人av片| 中文字幕一区二区在线视频 | 中文字幕日韩av综合精品| 97超碰人人草| 欧美三级免费观看| 久久精品一区二区三区四区五区| 岛国精品在线观看| 五月婷婷之综合激情| 国内一区二区三区| 日韩性感在线| 懂色av一区二区| 国产精品免费小视频| 久久亚洲导航| 日韩在线视频中文字幕| 午夜成人鲁丝片午夜精品| 69堂成人精品免费视频| 久久一区二区三区视频| 亚洲视频小说图片| 实拍女处破www免费看| 国产精品一二三在| 91人人澡人人爽人人精品| 国产一区日韩欧美| 综合久久国产| 在线看成人短视频| 成人动漫视频在线观看完整版 | 欧美性受xxxx| 欧美福利视频一区二区| 亚洲激情欧美激情| 国产大屁股喷水视频在线观看| 91亚洲国产成人精品一区二区三 | 国产综合免费视频| 亚洲午夜伦理| 亚洲第一精品区| 欧美日韩有码| 久久精品日产第一区二区三区精品版 | 九七久久人人| 中文字幕日韩欧美精品在线观看| 人人九九精品| 亚洲第一页自拍| 成人av一区二区三区在线观看 | 男人天堂网在线视频| 在线91免费看| 亚洲自拍偷拍另类| 91久久精品一区二区| 伊人久久综合视频| 亚洲超碰精品一区二区| 国产一级在线免费观看| 亚洲在线成人精品| 青草草在线视频| 亚洲日本韩国一区| 国产第一页浮力| 国产精品私房写真福利视频| 一区二区三区四区免费| 久久精品一区二区三区不卡牛牛| 蜜桃精品成人影片| 2014亚洲片线观看视频免费| 在线天堂www在线国语对白| 成人h动漫精品一区二区| 国产精品日日摸夜夜爽| 国产不卡高清在线观看视频| 国产精品91av| av一区二区三区黑人| 亚洲一区二区三区四区五区六区| 成人的网站免费观看| 国产麻豆剧传媒精品国产av| 不卡视频免费播放| 国产精品无码电影| 久久精品人人做人人综合| 国产熟妇搡bbbb搡bbbb| 久久嫩草精品久久久久| 日本成人免费视频| 国产精品免费av| 国产免费无码一区二区视频 | 九九爱精品视频| 99精品国产在热久久| 久久国产色av免费观看| 麻豆国产精品官网| 永久免费黄色片| 成人午夜视频免费看| 女同毛片一区二区三区| 欧美激情一区二区三区全黄| 国产麻豆视频在线观看| 一级做a爱片久久| 好吊妞视频一区二区三区| 色av综合在线| 国产女人爽到高潮a毛片| 欧美xxxx老人做受| 欧美日韩激情视频一区二区三区| 中文字幕日韩在线观看| 青春草在线视频| 欧美一区二区三区四区在线| 成人在线免费av| 国产精成人品localhost| 婷婷精品视频| 黑人巨大国产9丨视频| 国产日韩亚洲| 久久久精品高清| 成人动漫一区二区三区| 成人在线观看免费高清| 一区二区高清在线| 欧美日韩在线视频播放| 日韩欧美中文字幕精品| 色视频在线观看| 欧美成人精品一区| 欧美成人黑人| 亚洲精品免费一区二区三区| 日韩精选在线| 黄色一级视频播放| 久久xxxx| 国产一级二级av| 欧美激情一区二区三区全黄| 久久在线视频精品| 欧美无乱码久久久免费午夜一区| 亚洲精品久久久久久久久久| 在线日韩第一页| 欧美裸体视频| 亚洲综合大片69999| 欧美日韩国产高清电影| 男人添女人下部视频免费| 鲁大师成人一区二区三区| 中文字幕无人区二| 中文av一区二区| 欧美一区二区三区四| 欧美一级片在线看| jyzzz在线观看视频| 午夜精品在线视频| 一区二区亚洲视频| 中文字幕av导航| 日韩av网站免费在线| 久久精品女同亚洲女同13| 亚洲欧美日韩国产成人精品影院| 国产美女www| 亚洲精品电影网| 三级资源在线| 亚洲free性xxxx护士hd| 成人综合久久| 成年人视频在线免费| 99麻豆久久久国产精品免费| 青草影院在线观看| 在线视频亚洲一区| 青青草手机在线| 97色在线观看| 国产主播性色av福利精品一区| 好色先生视频污| 精品一区在线看| 日韩在线一卡二卡| 欧美日韩一区中文字幕| 国产资源在线看| 欧美一区二区三区……| 小嫩嫩12欧美| 男人添女人下面高潮视频| 粉嫩13p一区二区三区| 青春草免费视频| 精品久久久久香蕉网| 午夜成年人在线免费视频| 成人免费网站在线| 久久精品青草| 五月天婷婷在线观看视频| 成人欧美一区二区三区1314| 一区二区三区免费在线| 日韩中文字幕视频| 99精品在线免费观看| 超碰在线免费观看97| 国产乱妇无码大片在线观看| 欧美卡一卡二卡三| 日韩欧美高清一区| 1234区中文字幕在线观看| 激情伦成人综合小说| 国产亚洲一区在线| wwwwxxxx国产| 欧美视频三区在线播放| 黄色免费在线观看| 99在线首页视频| 999亚洲国产精| xxxx日本免费| 欧美日韩国产大片| 2024最新电影在线免费观看| 99re视频在线播放| 国产乱码精品| 9.1片黄在线观看| 欧美精品xxxxbbbb| 精品一性一色一乱农村| 精品视频一区在线| 免费成人你懂的| 麻豆changesxxx国产| 日韩成人久久久| 久久99久久久精品欧美| 无颜之月在线看| 97久久超碰国产精品| 亚洲天堂网在线观看视频| 欧美成人免费在线视频| 欧洲精品一区| 人人干人人干人人| 亚洲福利一区二区三区| 国产对白叫床清晰在线播放| 91深夜福利视频| 美女精品网站| 久草视频中文在线| 亚洲丝袜一区在线| 我要色综合中文字幕| 日韩人妻精品无码一区二区三区| 国产精品亲子乱子伦xxxx裸| 黄色av网站免费在线观看| 日韩美女福利视频| 综合天堂av久久久久久久| 蜜桃av免费看| 日韩欧美国产高清| 日韩一级二级| 欧美人成在线观看| 国产精品情趣视频| 色视频在线观看免费| 亚洲最大激情中文字幕| 久久久久一区| 精品在线视频免费| www.久久久久| 美日韩中文字幕| 日本天堂在线播放| 91麻豆精品国产91久久久久久久久 |