基於Python實現嚴蔚敏版順序表基本操作

基於Python實現順序表基本操作

1. 項目背景

​ 基於嚴蔚敏數據結構中順序表思想,本人編寫了Python語言的順序表。感謝一些博主的文章,幫助我完成本項目。嚴蔚敏書中順序表操作方法,已在本項目實現。

2. 項目結構

基於嚴蔚敏數據結構中順序表思想,本人編寫了Python語言的順序表。感謝一些博主的文章,幫助我完成本項目。嚴蔚敏書中順序表操作方法,已在本項目實現。
在這裏插入圖片描述在這裏插入圖片描述

3. 項目函數

3.1 初始化

在__init__(self, Listsize)方法裏,我將順序表最大值讓用戶自己傳入,以便自己修改。self.elem是順序表中的存儲區域,self.elem中下標爲0的元素設爲’Linear_logo’並作爲順序表創建的標誌。爲什麼將self.elem中下標爲0的元素設爲’Linear_logo’?因爲在嚴蔚敏版本的順序表中,self.elem中下標0內存區域不存儲數據,只有下標1的存儲區域存數據。self.elem中下標爲0是可以存儲數據,只不過本項目爲貼近嚴蔚敏的思想才編寫。
self.length是順序表的長度,這個長度是根據實際情況變化。
self.Listsize是順序表的最大存儲空間,如果順序表長度大於最大存儲空間,會自動擴空間,或者就是報錯。
self.increment是順序表的增量,如果要增加一個空間則可使用這個變量。但是,在本項目實現時,self.increment這個變量可以不設。

    def __init__(self, Listsize):
        self.elem = ['Linear_logo']
        self.length = len(self.elem)
        self.Listsize = Listsize
        self.increment = 1

3.2 插入函數

插入操作函數是根據嚴蔚敏書中所寫思想編寫的,但是就是一些判斷條件和書中寫的位置不一致。

    def ListInsert(self, pos, item):
        if pos < 1 | pos > self.length + 1:
            return IndexError
        if pos == self.length:
            self.elem += [item]
            self.length += self.increment
        else:
            for i in range(self.length - 1, pos + 1, -1):
                self.elem[i] = self.elem[i - 1]
            self.elem[pos] = item
            if len(self.elem) <= (self.Listsize - 1):
                self.elem = self.elem + [item]
                self.length = self.length + 1
            else:
                print("數組已滿")
        return True

3.3 刪除函數

    def ListDelete(self, pos):
        if pos < 1 | pos > self.length:
            return IndexError
        for i in range(pos, self.length - 1):
            self.elem[i] = self.elem[i + 1]
        self.length -= 1
        return True

3.4 定位函數

    def LocateElem(self, item):
        for i in range(self.length):
            if self.elem[i] == item:
                return i
        else:
            return False

3.5 清空順序表函數

編寫這個函數時,我借鑑Java編寫的清空順序表函數。若想清空順序表函數,只需將長度爲0(即self.length=0)。

  def ClearList(self):
        self.length=0

3.6 銷燬順序表函數

編寫這個函數時,我仍借鑑Java編寫的銷燬順序表函數。根據Python/Java面對對象的思想,銷燬一張順序表相當於銷燬一個對象。在Python裏,有一個方法如下↓

   def __del__(self):
        print("銷燬順序表")

注意,Python對象創建時自帶的方法,不可隨便更改。

4. 關於使用self的總結

本項目實現過程中,本人發現了利用Python順序表中操作函數中都帶有參數self。我猜想self函數參數,類似於利用C語言實現順序表時所設置的操作函數中參數SqList &L。後來,我在CSDN中找到此博文:https://blog.csdn.net/CLHugh/article/details/75000104去驗證我的猜想。
self是表示創建的類實例本身,當利用自定義的__init__方法就將把各種屬性綁定到self。在本項目中,__init__方法是一個類初始化的必備方法。我在__init__方法設置了存儲域、長度,最大內存和增量。__init__方法內設置的東西都會綁到self中,以便完成項目存儲、刪除等操作

5. 項目代碼

class LinearList(object):

    def __init__(self, Listsize):
        self.elem = ['Linear_logo']
        self.length = len(self.elem)
        self.Listsize = Listsize
        self.increment = 1
    
     def __del__(self):
        print("銷燬順序表")

    def ClearList(self):
        self.length=0

    def ListEmpty(self):
        return self.length is 0

    def ListLength(self):
        return len(self.elem)

    def GetElem(self, pos):
        if pos <= self.length:
            return self.elem[pos]
        else:
            return False

    def LocateElem(self, item):
        for i in range(self.length):
            if self.elem[i] == item:
                return i
        else:
            return False

    def PriorElem(self, item):
        if self.LocateElem(item) == False:
            return False
        else:
            return self.elem[self.LocateElem(item) - 1]

    def NextElem(self, item):
        if self.LocateElem(item) == False:
            return False
        else:
            return self.elem[self.LocateElem(item) + 1]

    def ListInsert(self, pos, item):
        if pos < 1 | pos > self.length + 1:
            return IndexError
        if pos == self.length:
            self.elem += [item]
            self.length += self.increment
        else:
            for i in range(self.length - 1, pos + 1, -1):
                self.elem[i] = self.elem[i - 1]
            self.elem[pos] = item
            if len(self.elem) <= (self.Listsize - 1):
                self.elem = self.elem + [item]
                self.length = self.length + 1
            else:
                print("數組已滿")
        return True

    def ListDelete(self, pos):
        if pos < 1 | pos > self.length:
            return IndexError
        for i in range(pos, self.length - 1):
            self.elem[i] = self.elem[i + 1]
        self.length -= 1
        return True

    def ListTraverse(self):
        print('<', end='')
        for i in range(0, self.length):
            if i != self.length - 1:
                print(self.elem[i], end=',')
            else:
                print(self.elem[i], end='')
        print('>')


if __name__ == '__main__':
    list = LinearList(20)
    for i in range(1, 12, 1):
        list.ListInsert(i, i)
    list.ListTraverse()

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章