棧和佇列的結構實現

2021-09-02 11:35:31 字數 2908 閱讀 3883

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

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

寫乙個棧類支援以下操作 用python的list儲存:

class stack:

def __init__(self):

self.__list =

def push(self,item):#新增乙個新的元素item到棧頂

def pop(self):#彈出棧頂元素

return self.__list.pop()

def peek(self):#返回棧頂元素

if self.__list:

return self.__list[-1]

else:

return false

def is_empty(self):#判斷棧是否為空

return self.__list ==

def size(self):#返回棧的元素個數

return len(self.__list)

if __name__ == '__main__':

stack = stack()

stack.push(1)

stack.push(2)

stack.push(3)

stack.push(4)

print(stack.pop())

print(stack.pop())

print(stack.pop())

print(stack.pop())

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

佇列是一種先進先出的(first in first out)的線性表,簡稱fifo。允許插入的一端為隊尾,允許刪除的一端為隊頭。佇列不允許在中間部位進行操作!假設佇列是q=(a1,a2,……,an),那麼a1就是隊頭元素,而an是隊尾元素。這樣我們就可以刪除時,總是從a1開始,而插入時,總是在佇列最後。這也比較符合我們通常生活中的習慣,排在第乙個的優先出列,最後來的當然排在隊伍最後。

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

在隊頭入隊隊尾隊出隊還是隊頭出隊隊尾入隊,看你個人需求,因為這兩種的出隊入隊總有乙個時間複雜度時n乙個為1,看你的實際需求,是出隊多還是入隊多。

class queue:

def __init__(self):

self.__list =

def enqueue(self,item): #往佇列中新增乙個item元素

# self.__list.insert(0,item)

def dequeue(self):# 從佇列頭部刪除乙個元素

# self.__list.dequeue()

return self.__list.pop(0)

def is_empty(self): #判斷乙個佇列是否為空

return self.__list ==

def size(self): #返回佇列的大小

return len(self.__list)

if __name__ == '__main__':

queue = queue()

queue.enqueue(1)

queue.enqueue(2)

queue.enqueue(3)

queue.enqueue(4)

print(queue.dequeue())

print(queue.dequeue())

print(queue.dequeue())

print(queue.dequeue())

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

雙端佇列中的元素可以從兩端彈出,其限定插入和刪除操作在表的兩端進行。雙端佇列可以在佇列任意一端入隊和出隊。

class queue:

def __init__(self):

self.__list =

def add_front(self,item): #往佇列頭部新增乙個item元素

self.__list.insert(0,item)

def add_last(self, item): # 往佇列尾部新增乙個item元素

def pop_front(self):

return self.__list.pop(0)

def pop_last(self):

return self.__list.pop(-1)

def is_empty(self): #判斷乙個佇列是否為空

return self.__list ==

def size(self): #返回佇列的大小

return len(self.__list)

if __name__ == '__main__':

queue = queue()

queue.add_front(1)

queue.add_front(2)

queue.add_last(4)

queue.add_last(5)

queue.add_front(3)

queue.add_last(6)

print(queue.pop_front())

print(queue.pop_last())

print(queue.pop_front())

棧和佇列的手動實現 用棧實現佇列 用佇列實現棧

1 用陣列結構實現大小固定的棧和佇列 1 棧 public static class arraystack arr new integer initsize size 0 public integer peek 返回棧頂元素但並不讓元素出棧 return arr size 1 public void...

棧和佇列的實現

include using namespace std typedef int selemtype typedef struct stack void create stack s void destroy stack s s.base s.top null s.maxnum 0 void clea...

實現棧和佇列

一 棧的實現 入棧 出棧 取棧頂元素 順序表實現棧操作 實現 public class mystack data size val size 2.出棧 public integer pop integer result data size 1 size return result 3.取棧頂元素 p...