Python資料結構 棧與佇列

2021-10-08 09:52:08 字數 4063 閱讀 4232

佇列雙端佇列

棧(stack)(也稱堆疊),是一種容器,可存入、訪問、刪除資料元素,它的特點在於只能允許在容器的一端(稱為棧頂端指標,英語:top)進行加入資料(英語:push)和輸出資料(英語:pop)的運算,保證在任何時候可以訪問、刪除的元素都是此前最後存入的那個元素,確定了一種預設的訪問順序。

由於棧資料結構只允許在一端進行操作,因而按照後進先出(lifo, last in first out)的原理運作。

棧可以用順序表實現,也可以用鍊錶實現。

棧的操作包含:

stack() 建立乙個新的空棧

push(item) 新增乙個新的元素item到棧頂

pop() 彈出棧頂元素

peek() 返回棧頂元素

is_empty() 判斷棧是否為空

size() 返回棧的元素個數

class stack(object):

def __init__(self):

self.items=

def is_empty(self):

return self.items==

def size(self):

return len(self.items)

def push(self,item):

def pop(self):

return self.items.pop()

def peek(self):

return self.items[len(self.items)-1]

class stack(object):

def __init__(self):

self.items=singlelinklist()

def is_empty(self):

return self.items.is_empty()

def size(self):

return self.items.length()

def push(self,item):

self.items.add(item)

def pop(self):

a=self.items._singlelinklist__head.item

self.items._singlelinklist__head=self.items._singlelinklist__head.next

return a

def peek(self):

return self.items._singlelinklist__head.item

佇列(queue)是只允許在一端進行插入操作,而在另一端進行刪除操作的線性表。

佇列是一種先進先出的(first in first out)的線性表,簡稱fifo。允許插入的一端為隊尾,允許刪除的一端為隊頭。

佇列不允許在中間部位進行操作!

同棧一樣,佇列也可以用順序表或者鍊錶實現。

佇列的操作包含:

queue() 建立乙個空的佇列

enqueue(item) 往佇列中新增乙個item元素

dequeue() 從佇列頭部刪除乙個元素

is_empty() 判斷乙個佇列是否為空

size() 返回佇列的大小

class queue(object):

def __init__(self):

self.items=

def is_empty(self):

return self.items==

def size(self):

return len(self.items)

def enqueue(self,item):

def dequeue(self):

return self.items.pop(0)

'''以上為出隊較少、入隊較多情形的寫法。

若出隊多、入隊少,則應寫為:

def enqueue(self,item):

self.items.insert(0,item)

def dequeue(self):

return self.items.pop() '''

class queue(object):

def __init__(self):

self.items=singlelinklist()

def is_empty(self):

return self.items.is_empty()

def size(self):

return self.items.length()

def enqueue(self,item):

def dequeue(self):

a=self.items._singlelinklist__head.item

self.items._singlelinklist__head=self.items._singlelinklist__head.next

return a

雙端佇列(deque,全名double-ended queue),是一種同時具有佇列和棧的性質的資料結構。

雙端佇列中的元素可以從兩端壓入或彈出,限定插入和刪除操作只能在表的兩端進行。

雙端佇列可以在佇列任意一端入隊和出隊。

雙端佇列也可以用順序表或者鍊錶實現。

雙端佇列的操作包含:

deque() 建立乙個空的雙端佇列

add_front(item) 從隊頭加入乙個item元素

add_rear(item) 從隊尾加入乙個item元素

remove_front() 從隊頭刪除乙個item元素

remove_rear() 從隊尾刪除乙個item元素

is_empty() 判斷雙端佇列是否為空

size() 返回佇列的大小

class deque(object):

def __init__(self):

self.items =

def is_empty(self):

return self.items ==

def size(self):

return len(self.items)

def add_front(self, item):

self.items.insert(0,item)

def add_rear(self, item):

def remove_front(self):

return self.items.pop(0)

def remove_rear(self):

return self.items.pop()

class deque(object):

def __init__(self):

self.items=singlelinklist()

def is_empty(self):

return self.items.is_empty()

def size(self):

return self.items.length()

def add_front(self,item):

self.items.add(item)

def add_rear(self,item):

def remove_front(self):

a=self.items._singlelinklist__head.item

self.items._singlelinklist__head=self.items._singlelinklist__head.next

return a

def remove_rear(self):

cur=self.items._singlelinklist__head

while cur.next.next!=none:

cur=cur.next

a=cur.next.item

cur.next=none

return a

Python資料結構之「棧」與「佇列」

棧 stacks 定義 是一種只能通過訪問其一端來實現的資料儲存於檢索的線性資料結構,具有後進先出 last in first out,lifo 的特徵 主要操作 1.stack 建立乙個空物件 2.push 把乙個元素新增到棧的最頂層 3.pop 刪除棧最頂層的元素,並返回這個元素 4.peek ...

資料結構 棧與佇列

題目 1.編寫函式,採用鏈式儲存實現棧的初始化 入棧 出棧操作 2.編寫函式,採用順序儲存實現棧的初始化 入棧 出棧操作 3.編寫函式,採用鏈式儲存實現佇列的初始化 入隊 出隊操作 4.編寫函式,採用順序儲存實現佇列的初始化 入隊 出隊操作 5.編寫乙個主函式,在主函式中設計乙個簡單的選單,分別除錯...

資料結構 棧與佇列

棧的原則是後進先出,即插入與刪除元素均在棧頂進行。獲取棧頂元素 s.top 佇列的原則是先進先出,即插入資料在隊尾進行,刪除資料在隊頭進行。獲取隊頭元素 q.front 思路 用兩個棧,乙個棧用來進隊,乙個棧用來出隊,當資料進入佇列的時候,我們將其壓入乙個棧,當資料出隊的時候,我們將儲存在棧內的資料...