日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

栈与队列

發(fā)布時間:2025/7/14 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 栈与队列 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

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

由于棧數(shù)據(jù)結(jié)構(gòu)只允許在一端進行操作,因而按照后進先出(LIFO, Last In First Out)的原理運作。

棧結(jié)構(gòu)實現(xiàn)

棧可以用順序表實現(xiàn),也可以用鏈表實現(xiàn)。

棧的操作

  • Stack() 創(chuàng)建一個新的空棧
  • push(item) 添加一個新的元素 item 到棧頂
  • pop() 彈出棧頂元素
  • peek() 返回棧頂元素
  • is_empty() 判斷棧是否為空
  • size() 返回棧的元素個數(shù)
class Stack(object):"""棧"""def __init__(self):self.items = []def is_empty(self):"""判斷是否為空"""return self.items == []def push(self, item):"""加入元素"""self.items.append(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()

執(zhí)行過程如下:

隊列

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

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

隊列的實現(xiàn)

同棧一樣,隊列也可以用順序表或者鏈表實現(xiàn)。

操作

  • Queue() 創(chuàng)建一個空的隊列
  • enqueue(item) 往隊列中添加一個 item 元素
  • dequeue() 從隊列頭部刪除一個元素
  • is_empty() 判斷一個隊列是否為空
  • size() 返回隊列的大小
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),是一種具有隊列和棧的性質(zhì)的數(shù)據(jù)結(jié)構(gòu)。

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

操作

  • Deque() 創(chuàng)建一個空的雙端隊列
  • add_front(item) 從隊頭加入一個 item 元素
  • add_rear(item) 從隊尾加入一個 item 元素
  • remove_front() 從隊頭刪除一個 item 元素
  • remove_rear() 從隊尾刪除一個 item 元素
  • is_empty() 判斷雙端隊列是否為空
  • size() 返回隊列的大小

實現(xiàn)

class Deque(object):"""雙端隊列"""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):"""在隊尾添加元素"""self.items.append(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()

轉(zhuǎn)載于:https://www.cnblogs.com/oneTOinf/p/11142480.html

總結(jié)

以上是生活随笔為你收集整理的栈与队列的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。