用兩個棧來實現乙個佇列,完成佇列的push和pop操作。 佇列中的元素為int型別。
乙個佇列包含兩個棧,操作兩個先進後出的棧實現乙個先進先出的佇列。在入隊的時候,直接壓入棧1。出隊時,先判斷棧2是否為空,如果為空,就把棧1裡已經有的元素pop出去,再push進棧2中;如果棧2不為空,先把棧2中的元素pop出去,再把棧1的元素push進來。
function
stack()
;this
.pop
=function()
;this
.isnull
=function()
}var stack1 =
newstack()
;var stack2 =
newstack()
;function
push
(node)
function
pop(
)else
if(stack2.
isnull()
)}return stack2.
pop(
)}
用陣列自帶的方法更簡單
var ans =
;function
push
(node)
function
pop(
)
1.佇列是先進先出,呼叫陣列的push和shift方法。佇列的push:在尾部插入節點;pop:在頭部刪除節點。
佇列是一種特殊的線性表,特殊之處在於它只允許在表的前端(front)進行刪除操作,而在表的後端(rear)進行插入操作。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。
2.棧是後進先出。在棧中查詢最大或最小元素時間複雜度:o(n)。
棧(stack)又名堆疊,它是一種運算受限的線性表。其限制是僅允許在表的一端進行插入和刪除運算。這一端被稱為棧頂,相對地,把另一端稱為棧底。向乙個棧插入新元素又稱作進棧、入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素;從乙個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使其相鄰的元素成為新的棧頂元素。
實現類似棧的行為
將push()和pop()結合在一起,我們就可以實現類似棧的行為:
//建立乙個陣列來模擬堆疊
var a=
newarray()
;console.
log(a)
;//push: 在陣列的末尾新增乙個或更多元素,並返回新的長度
console.
log(
"入棧");
a.push(1
)console.
log(a)
;//----->1
a.push(2
);console.
log(a)
;//----->1,2
a.push(3
);console.
log(a)
;//----->1,2,3
a.push(4
);console.
log(a)
;//----->1,2,3,4
console.
log(
"出棧,後進先出");
console.
log(a)
;//pop:從陣列中把最後乙個元素刪除,並返回這個元素的值
實現類似佇列的行為
將shift()和push()方法結合在一起,可以像使用佇列一樣使用陣列。即在陣列的後端新增項,從陣列的前端移除項:
//建立乙個陣列來模擬佇列
var a=
newarray()
;console.
log(a)
;//push: 在陣列的末尾新增乙個或更多元素,並返回新的長度
console.
log(
"入隊");
a.push(1
)console.
log(a)
;//----->1
a.push(2
);console.
log(a)
;//----->1,2
a.push(3
);console.
log(a)
;//----->1,2,3
a.push(4
);console.
log(a)
;//----->1,2,3,4
console.
log(
"出隊,先進先出");
console.
log(a)
;//shift:從陣列中把第乙個元素刪除,並返回這個元素的值
除此之外,還可以同時使用unshift()和pop()方法,從相反的方向來模擬佇列,即在陣列的前端新增項,從陣列的後端移除項。如下面的示例所示:
//建立乙個陣列來模擬佇列
var a=
newarray()
;console.
log(a)
;//unshift: 在陣列的前端新增乙個或更多元素,並返回新的長度
console.
log(
"入隊");
a.unshift(1
)console.
log(a)
;//----->1
a.unshift(2
);console.
log(a)
;//----->2,1
a.unshift(3
);console.
log(a)
;//----->3,2,1
a.unshift(4
);console.
log(a)
;//----->4,3,2,1
console.
log(
"出隊,先進先出");
console.
log(a)
;//pop:從陣列中把最乙個元素刪除,並返回這個元素的值
用兩個棧實現佇列 用兩個佇列實現棧
劍指offer 面試題7 用兩個棧實現佇列。templateclass cqueue 我們試著用兩個棧來模擬佇列的操作,發現如下可行操作 完整 實現 面試題7 用兩個棧實現佇列 分別完成在隊尾插入結點和在隊頭刪除結點的功能。date 2014 06 27 include include includ...
用兩個棧實現佇列與用兩個佇列實現棧
pragma once要在標頭檔案的最開始加入這條雜注,就能夠保證標頭檔案只被編譯一次 pragma once是編譯器相關的,就是說即使這個編譯系統上有效,但在其他編譯系統也不一定可以,不過現在基本上已經是每個編譯器都有這個雜注了。用兩個棧實現佇列 每個模板函式的實現都需要加template模板列表...
用兩個棧實現佇列 與 用兩個佇列實現棧
用兩個棧實現乙個佇列的功能?要求給出演算法和思路 分析 入隊 將元素進棧a 出隊 判斷棧b是否為空,如果為空,則將棧a中所有元素pop,並push進棧b,棧b出棧 如果不為空,棧b直接出棧。用兩個佇列實現乙個棧的功能?要求給出演算法和思路 分析 入棧 將元素進佇列a 出棧 判斷佇列a中元素的個數是否...