棧(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...