用兩個棧實現佇列 js

2021-09-23 06:10:58 字數 4080 閱讀 8798

用兩個棧來實現乙個佇列,完成佇列的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中元素的個數是否...