1. 程式人生 > >算法(2):數據結構

算法(2):數據結構

概念 基本 cep 關系 中括號 個數 表頭 exc last

數據結構:

數據結構是指相互之間存在著一種或多種關系的數據元素的集合和該集合中數據元素之間的關系組成
簡單來說, 數據結構就是設計數據以何種方式組織度存儲在計算機中
比如:列表、集合和字典等都是一種數據結構
“程序=數據結構+算法”

數據結構的分類:

數據結構按照邏輯結構可分為線性結構、樹結構和圖結構
線性結構:數據結構中的元素存在一對一的相互關系
樹結構:數據結構中的元素存在一對多的相互關系
圖結構:數據結構中的元素存在多對多的相互關系

另外,32位機器上,一個整數占4個字節(4*8bit=32),一個地址也占4個字節

棧:

棧(Stack)是一個數據集合,可以理解為只能在一端進行插入或刪除操作的列表

棧的特點:後進先出(last-in,first-out)
棧的概念:棧頂(表尾;最後一個元素),棧底(表頭;0號元素)
棧的基本操作:
    進棧(壓棧):push
    出棧:pop
    取棧頂(只查看棧頂的值,但不把棧頂刪除): gettop
使用一般的列表結構即可實現棧

棧的應用 -- 括號匹配問題:

括號匹配問題:給一個字符串,其中包含小括號、中括號、大括號,求該字符串中的括號是否匹配
如:
    ()[]{}  # 匹配
    ([{()}])  # 匹配
    []( # 不匹配
    [(])  # 不匹配

示例代碼:

class BracketError(BaseException):
    
def __init__(self,msg): super(BracketError,self).__init__() self.msg = msg def __str__(self): return "<%s>" %self.msg class Stack(object): """實現棧的類""" def __init__(self): self.stack = [] def push(self,ele): self.stack.append(ele) def
pop(self): if len(self.stack) == 0: return None return self.stack.pop() def get_top(self): if len(self.stack) == 0: return None return self.stack[-1] def is_empty(self): return len(self.stack) == 0 # 返回的是一個Bool值 # 棧的應用:括號匹配問題 def bracket_match(s): stack = Stack() match_dict = { ")":"(", "]":"[", "}":"{" } for char in s: if char in ["(","[","{"]: # char 為左括號 stack.push(char) # 左括號放到 棧 裏面 else: # char 為右括號 if stack.is_empty(): raise BracketError("%s expected"%match_dict[char]) left_bracket = stack.get_top() if match_dict[char] != left_bracket: raise BracketError("%s not match"%char) else: stack.pop() if not stack.is_empty(): raise BracketError("lacking corresponding right brackets") s = "}[]()" bracket_match(s)

算法(2):數據結構