1. 程式人生 > >problem-solving-with-algorithms-and-data-structure-usingpython(使用python解決算法和數據結構) -- 基本數據結構(一)

problem-solving-with-algorithms-and-data-structure-usingpython(使用python解決算法和數據結構) -- 基本數據結構(一)

匹配 剛才 第一個 ems sem spl pla 查看 線性數據結構

1. 什麽是線性數據結構?

棧,隊列,deques, 列表是一類數據的容器,它們數據項之間的順序由添加或刪除的順序決定。

一旦一個數據項被添加,它相對於前後元素一直保持該位置不變。

諸如此類的數據結構被稱為線性數據結構。

2. 什麽是棧?

棧(有時稱為“後進先出棧”)是一個項的有序集合,其中添加移除新項總發生在同一端。

這一端通常稱為“頂部”。與頂部對應的端稱為“底部”。
實際應用:
每個 web 瀏覽器都有一個返回按鈕。當你瀏覽網頁時,這些網頁被放置在一個棧中(實際是網頁的網址)。

你現在查看的網頁在頂部,你第一個查看的網頁在底部。如果按‘返回’按鈕,將按相反的順序瀏覽剛才的頁面。
技術分享圖片
Stack() 創建一個空的新棧。 它不需要參數,並返回一個空棧。

push(item)將一個新項添加到棧的頂部。它需要 item 做參數並不返回任何內容。

pop() 從棧中刪除頂部項。它不需要參數並返回 item 。棧被修改。

peek() 從棧返回頂部項,但不會刪除它。不需要參數。 不修改棧。

isEmpty() 測試棧是否為空。不需要參數,並返回布爾值。

size() 返回棧中的 item 數量。不需要參數,並返回一個整數。
棧的一些相關操作

3. python實現棧

class Stack:
    def __init__
(self): self.items = [] def isEmpty(self): return self.items == [] def push(self, item): self.items.append(item) def pop(self): return self.items.pop() def peek(self): return self.items[-1] def size(self): return len(self.items) s
= Stack() print(s.isEmpty()) # True s.push(4) s.push(dog) print(s.peek()) # dog s.push(True) print(s.size()) # 3 print(s.isEmpty()) # False s.push(8.4) print(s.pop()) # 8.4 s.pop() print(s.size()) # 2

4. 簡單括號匹配

class Stack:
    def __init__(self):
        self.items = []
    def isEmpty(self):
        return self.items == []
    def push(self, item):
        self.items.append(item)
    def pop(self):
        return self.items.pop()
    def peek(self):
        return self.items[-1]
    def size(self):
        return len(self.items)


def parChecker(symbolString):
    s = Stack()
    balanced = True
    index = 0
    while index < len(symbolString) and balanced:
        symbol = symbolString[index]
        if symbol == (:
            s.push(symbol)
        else:
            if s.isEmpty():
                balanced = False
            else:
                s.pop()
        index += 1
    return balanced and s.isEmpty()

print(parChecker(((())()())))
print(parChecker(()(((()(()())))))

5. 符號匹配 ()、[]、{}

class Stack:
    def __init__(self):
        self.items = []
    def isEmpty(self):
        return self.items == []
    def push(self, item):
        self.items.append(item)
    def pop(self):
        return self.items.pop()
    def peek(self):
        return self.items[-1]
    def size(self):
        return len(self.items)

def parChecker(symbolString):
    s = Stack()
    balanced = True
    index = 0
    while index < len(symbolString) and balanced:
        symbol = symbolString[index]
        if symbol in ([{:
            s.push(symbol)
        else:
            if s.isEmpty():
                balanced = False
            else:
                top = s.pop()
                if not ([{.index(top) == )]}.index(symbol):
                    balanced = False
        index += 1
    return balanced and s.isEmpty()

print(parChecker({({}){}([][])}))
print(parChecker([{()]))

6. 十進制轉換成二進制

class Stack:
    def __init__(self):
        self.items = []
    def isEmpty(self):
        return self.items == []
    def push(self, item):
        self.items.append(item)
    def pop(self):
        return self.items.pop()
    def peek(self):
        return self.items[-1]
    def size(self):
        return len(self.items)

def divideBy2(decNumber):
    remstack = Stack()
    while decNumber > 0:
        rem = decNumber % 2
        remstack.push(rem)
        decNumber = decNumber // 2
    binString = ‘‘
    while not remstack.isEmpty():
        binString = binString + str(remstack.pop())
    return binString
print(divideBy2(11))
print(divideBy2(42))

7. 十進制轉換成任意進制

class Stack:
    def __init__(self):
        self.items = []
    def isEmpty(self):
        return self.items == []
    def push(self, item):
        self.items.append(item)
    def pop(self):
        return self.items.pop()
    def peek(self):
        return self.items[-1]
    def size(self):
        return len(self.items)

def divideBy2(decNumber,base):
    ‘‘‘
    十進制數轉換成任意進制(16以下)
    :param decNumber: 十進制數
    :param base: 要轉換成多少進制
    :return: 結果
    ‘‘‘
    digits = 0123456789ABCDEF         # 假如余數為13,則通過13索引找到D
    remstack = Stack()
    while decNumber > 0:
        rem = decNumber % base
        remstack.push(rem)
        decNumber = decNumber // base
    newString = ‘‘
    while not remstack.isEmpty():
        newString = newString + digits[remstack.pop()]
    return newString
print(divideBy2(11,8))
print(divideBy2(42,16))

problem-solving-with-algorithms-and-data-structure-usingpython(使用python解決算法和數據結構) -- 基本數據結構(一)