目錄棧
棧結構實現
棧的操作 佇列
佇列的實現 操作
雙端佇列 操作
實現
棧(stack),有些地方稱為堆疊,是一種容器,可存入資料元素、訪問元素、刪除元素,它的特點在於只能允許在容器的一端(稱為棧頂端指標,英語:top)進行加入資料(英語:push)和輸出資料(英語:pop)的運算。沒有了位置概念,保證任何時候可以訪問、刪除的元素都是此前最後存入的那個元素,確定了一種預設的訪問順序。由於棧資料結構只允許在一端進行操作,因而按照後進先出(lifo, last in first out)的原理運作。
棧可以用順序表實現,也可以用鍊錶實現。
class stack(object):
"""棧"""
def __init__(self):
self.items =
def is_empty(self):
"""判斷是否為空"""
return self.items ==
def push(self, item):
"""加入元素"""
def pop(self):
"""彈出元素"""
return self.items.pop()
def peek(self):
"""返回棧頂元素"""
return self.items[len(self.items)-1]
def size(self):
"""返回棧的大小"""
return len(self.items)
if __name__ == "__main__":
stack = stack()
stack.push("hello")
stack.push("world")
stack.push("itcast")
print stack.size()
print stack.peek()
print stack.pop()
print stack.pop()
print stack.pop()
執行過程如下:
佇列(queue)是只允許在一端進行插入操作,而在另一端進行刪除操作的線性表。
佇列是一種先進先出的(first in first out)的線性表,簡稱fifo。允許插入的一端為隊尾,允許刪除的一端為隊頭。佇列不允許在中間部位進行操作!假設佇列是q=(a1,a2,……,an),那麼a1就是隊頭元素,而an是隊尾元素。這樣我們就可以刪除時,總是從a1開始,而插入時,總是在佇列最後。這也比較符合我們通常生活中的習慣,排在第乙個的優先出列,最後來的當然排在隊伍最後。
同棧一樣,佇列也可以用順序表或者鍊錶實現。
class queue(object):
"""佇列"""
def __init__(self):
self.items =
def is_empty(self):
return self.items ==
def enqueue(self, item):
"""進佇列"""
self.items.insert(0,item)
def dequeue(self):
"""出佇列"""
return self.items.pop()
def size(self):
"""返回大小"""
return len(self.items)
if __name__ == "__main__":
q = queue()
q.enqueue("hello")
q.enqueue("world")
q.enqueue("itcast")
print q.size()
print q.dequeue()
print q.dequeue()
print q.dequeue()
雙端佇列(deque,全名double-ended queue),是一種具有佇列和棧的性質的資料結構。
雙端佇列中的元素可以從兩端彈出,其限定插入和刪除操作在表的兩端進行。雙端佇列可以在佇列任意一端入隊和出隊。
"""雙端佇列"""
def __init__(self):
self.items =
def is_empty(self):
"""判斷佇列是否為空"""
return 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()
def size(self):
"""返回佇列大小"""
return len(self.items)
if __name__ == "__main__":
deque = deque()
deque.add_front(1)
deque.add_front(2)
deque.add_rear(3)
deque.add_rear(4)
print deque.size()
print deque.remove_front()
print deque.remove_front()
print deque.remove_rear()
print deque.remove_rear()
佇列 , 雙端佇列, 棧
注意 linkedlist中新增或者取出的方法有很多,比如add,offer,offerfirst,offerlast,push.根據使用的資料結構不同,最好區分使用.一,佇列queue fifo first in first out 0,模型上一般為右進左出,右端入隊並稱為隊尾,左端出隊並稱為隊頭...
棧 佇列 雙端佇列
棧 stack 有些地方稱為堆疊,是一種容器,可存入資料元素 訪問元素 刪除元素,由於棧資料結構只允許在一端進行操作,因而按照後進先出 lifo,last in first out 的原理運作。棧結構實現 棧可以用順序表實現,也可以用鍊錶實現。棧的操作 功能stack 建立乙個新的空棧 push i...
棧 佇列 雙端佇列
一 棧結構實現 class stack object 棧 def init self self.items defis empty self 判斷是否為空 return self.items defpush self,item 加入元素 defpop self 彈出元素 return self.it...