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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

算法与数据结构(part5)--栈与队列

發布時間:2023/12/19 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 算法与数据结构(part5)--栈与队列 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

學習筆記,僅供參考,有錯必糾


文章目錄

    • 算法與數據結構–基于python
        • 棧是什么
        • 棧(ADT)的操作
        • 棧的實現
      • 隊列
        • 隊列是什么
        • 隊列的操作
        • 隊列的實現
      • 雙端隊列
        • 雙端隊列是什么
        • 雙端隊列的操作
        • 雙端隊列的實現


算法與數據結構–基于python



棧是什么


  • 棧的概念

    • 棧(stack)是一種容器,可存入數據元素、訪問元素、刪除元素。

    • 它的特點在于只能允許在容器的一端(稱為棧頂端指標)進行加入數據(push)和輸出數據(pop)的運算。

    • 沒有了位置概念,保證任何時候可以訪問、刪除的元素都是此前最后存入的那個元素,確定了一種默認的訪問順序。

    • 由于棧數據結構只允許在一端進行操作,因而按照后進先出(Last In First Out)的原理運作,簡稱LIFO。


  • 圖示


棧(ADT)的操作


Stack() #創建一個新的空棧 push(item) #添加一個新的元素item到棧頂 pop() #彈出棧頂元素 peek() #返回棧頂元素 is_empty() #判斷棧是否為空 size() #返回棧的元素個數

棧的實現


定義一個棧:

class Stack:# 初始化空棧def __init__(self):self.__list = []def push(self, item):self.__list.append(item)def pop(self):if self.__list:return self.__list.pop()else:return Nonedef peek(self):if self.__list:return self.__list[-1]else:return Nonedef is_empty(self):return self.__list is Nonedef size(self):return len(self.__list)if __name__ == '__main__':s = Stack()s.push(1)s.push(2)s.push(3)print(s.pop())print(s.pop())print(s.pop())

輸出:

3 2 1

隊列


隊列是什么


  • 隊列的概念
    • 隊列(queue)是只允許在一端進行插入操作,而在另一端進行刪除操作線性表
    • 隊列是一種先進先出的(First In First Out)的線性表,簡稱FIFO。

  • 圖示


隊列的操作


Queue() #創建一個新的空隊列 enqueue(item) #往隊列中添加一個item元素 dequeue() #從隊列頭部刪除一個元素 is_empty() #判斷一個隊列是否為空 size() #返回隊列的大小

隊列的實現


定義一個隊列:

# 定義隊列 class Queue:# 初始化def __init__(self):self.__list = []def enqueue(self,item):self.__list.append(item)def dequeue(self):return self.__list.pop(0)def is_empty(self):return self.__list is Nonedef size(self):return len(self.__list)if __name__ == '__main__':q = Queue()q.enqueue(1)q.enqueue(2)q.enqueue(3)print(q.dequeue())print(q.dequeue())print(q.dequeue())

輸出:

1 2 3

雙端隊列


雙端隊列是什么


  • 雙端隊列的概念

    • 雙端隊列(deque,全名double-ended queue),是一種具有隊列和棧的性質的數據結構。

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


  • 圖示


雙端隊列的操作


Deque() #創建一個空的雙端隊列 add_front(item) #從隊頭加入一個item元素 add_rear(item) #從隊尾加入一個item元素 pop_front() #從隊頭取一個item元素 pop_rear() #從隊尾取一個item元素 is_empty() #判斷雙端隊列是否為空 size() #返回隊列的大小

雙端隊列的實現


class Deque:def __init__(self):self.__list = []def add_front(self,item):self.__list.insert(0,item)def add_rear(self,item):self.__list.append(item)def pop_front(self):return self.__list.pop(0)def pop_rear(self):return self.__list.pop()def is_empty(self):return self.__list is Nonedef size(self):return len(self.__list)if __name__ == '__main__':d = Deque()d.add_front(1)d.add_front(2)d.add_rear(3)d.add_rear(4)print(d.size())print(d.pop_front())print(d.pop_front())print(d.pop_rear())print(d.pop_rear())

輸出:

4 2 1 4 3

總結

以上是生活随笔為你收集整理的算法与数据结构(part5)--栈与队列的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。