算法与数据结构(part5)--栈与队列
生活随笔
收集整理的這篇文章主要介紹了
算法与数据结构(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)--栈与队列的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 耳听八方出自哪个故事
- 下一篇: 算法与数据结构(part6)--单向链表