演算法 (五)陣列模擬棧和佇列

2021-09-10 05:59:23 字數 1454 閱讀 2680

陣列模擬棧挺簡單的,弄乙個指標index,壓棧就arr[index++],彈棧就arr[ -- index]

陣列模擬佇列有點複雜,要弄三個指標,index、first和last,index防止越界(這裡是固定陣列,即使用者需要給出棧和佇列的初始大小),first和last模擬先進先出(這個地方有個小技巧,指標碰到邊界就重新指向0,然後加入佇列的數歸last管,從佇列取數歸first管,就可以實現先進先出了,有點像貪吃蛇的感覺)

具體**如下:

package cn.nupt.sort;

/** * @description: 用固定陣列來模擬棧和佇列

* * @author pizan

* @date 2023年1月25日 下午7:24:35

* */

public

class

arraystackandqueue

arr =

newinteger

[initsize]

; index =0;

// 初始指標指在0處

}// 壓棧

public

void

push

(int obj)

arr[index++

]= obj;

}// 彈棧

public

intpop()

return arr[

--index]

;// 其實原先這個index所指的值是空的

}// 獲得棧頂元素

public

intpeek()

return arr[index -1]

;// 其實原先這個index所指的值是空的}}

public

static

class

arrayqueue

arr =

newint

[initsize]

; index =0;

first =0;

last =0;

}public

void

push

(int obj)

index++

; arr[last]

= obj;

last =

(last == arr.length -1?

0: last +1)

;}public

intpop()

index--

;int temp = first;

first =

(first == arr.length -1?

0: first +1)

;return arr[temp];}

//拿出佇列第乙個元素

public integer peek()

return arr[first];}

}}

用棧模擬佇列和佇列模擬棧

棧 先進後出 filo 佇列 先進先出 fifo class myqueue 兩棧模擬佇列 def init self self.input self.output 進佇列 defpush self,x 出佇列 defpop self self.peek return self.output.pop...

使用陣列模擬佇列 迴圈佇列和棧

在一些考試題中以及筆試面試的過程中,在需要使用stack和queue的時候,可能被要求不能使用stl中相關的庫函式,也就意味著我們需要使用純c進行程式設計。但是如果在考試中或者筆試面試中,為了要使用棧和佇列,而去寫乙個完整的資料結構是比較大費周章,況且在時間上也不一定允許,因此,使用陣列來模擬棧和佇...

演算法基礎課 陣列模擬棧 佇列

二 陣列模擬佇列 用陣列模擬棧,可以幫助我們理解棧的本質。模擬棧的關鍵點就是 棧頂指標 這比鍊錶簡單多了,鍊錶需要知道頭尾 每個節點的前後指標,而棧只有乙個指標!隨著不斷地push和pop,棧頂指標會不斷向後移動,前面的空間就浪費了。這對於演算法題來說是可以忍受的,畢竟更看重時間效率。include...