棧和佇列:都是動態集合
動態集合自己不儲存資料,每次使用都要重新查詢一遍
棧:後進先出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...