1棧和隊列是兩種基本的數據結構
數據結構之-棧
1.1 棧(stacks)是一種只能通過訪問其一端來實現數據存儲與檢索的線性數據結構,具有後進先出(last in first out,LIFO)的特徵,僅能夠在棧頂進行操作,,下面這張圖展示了棧的工作特點:
僅能夠在棧頂進行操作生活中的一個非常貼切的列子,玩羽毛球的同學都會買一筒羽毛球,羽毛球就是這種典型的堆棧結構。
1.2 基本用法
>>> stack = [3, 4, 5]
>>> stack.append(6)
>>> stack.append(7)
>>> stack
[3, 4, 5, 6, 7]
>>> stack.pop()
7
>>> stack
[3, 4, 5, 6]
>>> stack.pop()
6
>>> stack.pop()
5
>>> stack
[3, 4]
1.3一個實例說明
函數 | 說明 |
---|---|
Stack() | 創建堆棧 |
push(item) | 向棧頂插入項 |
pop() | 刪除棧頂的項 |
clear() | 清空堆棧 |
is-empty() | 判斷堆棧是否爲空 |
size() | 返回堆棧中的個數 |
top() | 返回堆棧得項 |
print() | 打印堆棧 |
class Stack(object):
"""堆棧"""
def __init__(self, item = []):
self.item = []
if len(item):
for i in item:
self.item.append(i)
def push(self, item):
self.item.append(item)
def clear(self):
del self.item
def is_empty(self):
return self.size() == 0
def size(self):
return len(self.item)
def print(self):
print(self.item)
def top(self):
return self.item[-1]
def pop(self):
data = self.top()
self.item.pop()
return data
print("創建堆棧")
stack = Stack([1,2,3])
stack.print()
print("向棧頂插入元素")
stack.push(4)
stack.print()
print("判斷堆棧是否爲空")
print(stack.is_empty())
print("返回堆棧中項的個數")
print(stack.size())
print("返回棧頂的項")
print(stack.top())
print("刪除棧頂的項")
stack.pop()
stack.print()
print("清空堆棧")
print(stack.clear())
輸出結果如下所示;
2.數據結構之-隊列
2.1 隊列定義:
隊列是一種先進先出的線性表。它只允許在表的一端進行插入,在另一端刪除元素。
2.2關於隊列
>>> from collections import deque
>>> queue = deque(["Eric", "John", "Michael"])
>>> queue.append("Terry") # Terry arrives
>>> queue.append("Graham") # Graham arrives
>>> queue.popleft() # The first to arrive now leaves
'Eric'
>>> queue.popleft() # The second to arrive now leaves
'John'
>>> queue # Remaining queue in order of arrival
deque(['Michael', 'Terry', 'Graham'])
2.3 隊列函數說明
函數 | 說明 |
---|---|
Queue() | 創建隊列 |
enqueue(item) | 向隊列尾部插入元素 |
dequeue() | 刪除隊列頭部棧頂的元素 |
clear() | 清空隊列 |
is-empty() | 判斷隊列是否爲空 |
size() | 返回隊列中的個數 |
print() | 打印隊列 |
class Queue(object):
"""模擬隊列"""
def __init__(self, item = []):
self.item = []
if len(item):
for i in item:
self.item.append(i)
def enqueue(self, item):
self.item.append(item)
def dequeue(self):
self.item.pop(0)
def clear(self):
del self.item
def is_empty(self):
return self.size() == 0
def size(self):
return len(self.item)
def print(self):
print(self.item)
print("創建隊列")
queue = Queue([1,2,3])
queue.print()
print("向隊列插入元素")
queue.enqueue(4)
queue.print()
print("從隊列中刪除元素")
queue.dequeue()
queue.print()
print("判斷隊列是否爲空")
print(queue.is_empty())
print("返回隊列中項的個數")
print(queue.size())
queue.print()
print("清空隊列")
print(queue.clear())