數據結構 Python實現
參考博客:淺談算法和數據結構: 一 棧和隊列 Python數據結構——棧、隊列的實現(一) Python數據結構——棧、隊列的實現(二) Python數據結構——鏈表的實現
數據結構
定義:簡單來說,數據結構就是設計數據以何種方式組織並存儲在計算機中。比如:列表、集合與字典等都是一種數據結構。
PS:“程序=數據結構+算法”
列表:在其他編程語言中稱為“數組”,是一種基本的數據結構類型。
關於:列表的存儲問題!
棧:
棧(Stack)是一個數據集合,可以理解為只能在一端進行插入或刪除操作的列表。
棧的特點:後進先出(last-in, first-out)
棧的概念:
棧頂
棧底
棧的基本操作:
進棧(壓棧):push
出棧:pop
取棧頂:gettop
利用python簡單實現棧操作
class Stack(object): def __init__(self): self.stack=[] def isEmpty(self): return self.stack==[] def push(self,item): self.stack.append(item) def pop(self): if self.isEmpty(): raise IndexError,‘pop from empty stack‘ return self.stack.pop() def peek(self): return self.stack[-1] def size(self): return len(self.stack)
棧的應用——括號匹配問題
括號匹配問題:給一個字符串,其中包含小括號、中括號、大括號,求該字符串中的括號是否匹配。
例如:
()()[]{} 匹配
([{()}]) 匹配
[]( 不匹配
[(]) 不匹配
def kuohaopipei(exp="{[()]}"): stack = [] for i in exp: if i in {‘(‘,‘[‘,‘{‘}: stack.append(i) if i == ‘)‘: if len(stack)>0 and stack[-1] == ‘(‘: stack.pop() else: return False if i == ‘]‘: if len(stack)>0 and stack[-1] == ‘[‘: stack.pop() else: return False if i == ‘}‘: if len(stack)>0 and stack[-1] == ‘{‘: stack.pop() else: return False if len(stack)==0: return True else: return False print(kuohaopipei("{()()[(([]{}))]}"))
隊列
隊列(Queue)是一個數據集合,僅允許在列表的一端進行插入,另一端進行刪除。
進行插入的一端稱為隊尾(rear),插入動作稱為進隊或入隊
進行刪除的一端稱為隊頭(front),刪除動作稱為出隊
隊列的性質:先進先出(First-in, First-out)
雙向隊列:隊列的兩端都允許進行進隊和出隊操作。
隊列實現:
使用方法:from collections import deque
創建隊列:queue = deque(li)
進隊:append
出隊:popleft
雙向隊列隊首進隊:appendleft
雙向隊列隊尾進隊:pop
隊列的實現原理
普通隊列:
初步設想:列表+兩個下標指針
創建一個列表和兩個變量,front變量指向隊首,rear變量指向隊尾。初始時,front和rear都為0。
進隊操作:元素寫到li[rear]的位置,rear自增1。
出隊操作:返回li[front]的元素,front自減1。
環形隊列:
改進方案:將列表首尾邏輯上連接起來。
環形隊列:當隊尾指針front == Maxsize + 1時,再前進一個位置就自動到0。
實現方式:求余數運算
隊首指針前進1:front = (front + 1) % MaxSize
隊尾指針前進1:rear = (rear + 1) % MaxSize
隊空條件:rear == front
隊滿條件:(rear + 1) % MaxSize == front
數據結構 Python實現