基本資料結構 棧和佇列含python實現

2021-10-07 17:52:01 字數 2396 閱讀 1342

棧和佇列:都是動態集合

動態集合自己不儲存資料,每次使用都要重新查詢一遍

棧:後進先出lifo

佇列:先進先出fifo

運用指標可以構造多種複雜的資料結構

用乙個陣列s[1,…,n]實現乙個最多可容納n個元素的棧。該陣列有乙個屬性s.top,這個屬性指向最新插入的元素。棧中包含的元素為s[1,…,s.top],其中s[1]是棧底元素,s.top是棧頂元素。

s.top=0:棧中不包含任何元素,表示棧是空的。要測試乙個棧是否為空可以用查詢操作stack-empty。如果試圖對乙個空棧執行彈出(pop)操作,稱棧下溢(underflow)。

s.top>n:稱為上溢。

棧的操作

push入棧

pop出棧

棧的幾種操作(push和pop)用偽**實現如下:

stack-empty (s)

1.if s.top ==02.

return true

3.else

return false

push

(s,x)

1.s.top = s.top +

12.s[s.top]

= xpop

(s)1.

if stack-empty (s)

2. error"underflow"

3.else s.top = s.top -13.

return s[s.top +

1]

以上操作的執行時間均為o(1)

用python實現:

class

arraystack

:def

__init__

(self)

:'''create an empty stack.'''

self._data =

def__len__

(self)

:return

len(self._data)

defis_empty

(self)

:return

len(self._data)==0

defpush

(self,e)

:def

pop(self)

:if self.is_empty():

raise empty(

'stack is empty'

)return self._data.pop(

)def

top(self)

:if self.is_empty():

raise empty(

'stack is empty'

)return self._data[-1

]class

empty

(exception)

:pass

測試:

if __name__ ==

'__main__'

: stack = arraystack(

) stack.push(3)

stack.push(5)

stack.push(9)

print

(len

(stack)

)print

(stack.pop())

print

(stack.is_empty(

))

結果:

3

9false

就像排隊買飯,先排隊的人買到東西先走

利用陣列q[1…n]來實現乙個最多容納n-1個元素的佇列的一種方式。q.head指向隊頭元素。而屬性q.tail指向下乙個新元素要插入的位置。

當q.head = q.tail時,隊列為空。初始時有q.head = q.tail = 1。如果試圖從空佇列中刪除乙個元素,則佇列發生下溢。

當q.head = q.tail +1,佇列是滿的,若此時試圖加乙個元素,則佇列是上溢的。

下面的偽**,假設n = q.length。

enqueue

(q,x)

1.q[q.tail]

= x2.

if q.tail == q.length

3. q.tail =14.

else q.tail = q.tail +

1dequeue

(q)1.x = q[q.head]

2.if q.head == q.length

4. q.head =15.

else q.head = q.head +16.

return x

兩種操作的執行時間都為o(1)

基本資料結構 表 棧和佇列

1 棧 後進先出 的兩種實現方式 指標和表 用指標方式實現棧的基本操作 createstack void h檔案 ifndef stack h struct node struct node typedef struct node ptrtonode typedef ptrtonode stack ...

基本資料結構 棧 佇列和鍊錶

棧 stack 實現的是一種依照先進先出 last in,first out,lifo 原則的結構,也就是說最後放入的元素總是最先被取出。佇列 queue 實現的是一種依照先進先出 first in,first out,fifo 原則的結構,也就是說最先放入的元素總是最先被取出。至於為什麼會存在這兩...

基本資料結構 佇列

佇列實現的是一種先進先出 first in,first out,fifio 的策略,佇列中的插入的操作稱為入隊 enqueue 佇列的刪除操作稱為出隊 dequeue 定義乙個陣列來實現佇列 public class queue public queue int n public boolean i...