1. 程式人生 > >數據結構 Python實現

數據結構 Python實現

數據集 tro log class 返回 max index 簡單實現 方案

參考博客:淺談算法和數據結構: 一 棧和隊列 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實現