線性結構-線性表
編譯環境:python v3.5.0, mac osx 10.11.4
線性表的表示
<big>例如:</big>表示一個多項式Multinomial
<big>最</big>浪費的表示方法:f(x)=4x5-3x2+1,浪費大量的儲存空間(若多項式指數差異很大,即很多儲存單元都空著,為0)
- 陣列(計算機內連續的儲存單元)表示多項式
-
其下標表示指數,陣列中存放的數值表示係數
結構陣列儲存非零項:P1(x)= 9x12+15x8+3x^2
- 構造結構陣列(計算機內連續的儲存單元)表示多項式。結構陣列中單元列表第一位為係數,第二位為指數。
class Multinomial(): # 定義多項式結構陣列
def init(self,coef,expon):
self.coef = coef
self.expon = expon
連結串列結構儲存非零項:P1(x)= 9x12+15x8+3x^2
- 連結串列(單元隨機儲存於計算機中)每個節點儲存多項式的非零項
- 儲存單元包含三個小單元用來儲存係數、指數、和下一個連結串列單元的地址。
class Multinomial():
def init(self,chef,expon,link):
self.coef = coef
self.expon = expon
self.link = None
什麼是線性表
通過上述例子實踐,我們可以發想線性表(Linear List)有如下幾個特徵:
- 它是由同型別資料元素構成有序序列的線性結構
- 表中元素的個數稱為線性表的長度
- 線性表沒有元素時,稱為空表
- 表的起始位置稱為表頭,表的結束位置稱為表尾
線性表的順式儲存(陣列)實現
- List MakeEmpty():初始化一個空的線性表L;
L = [] - ElementType FindKth(int K, List L):根據位序K,返回相應的元素;
element = L[k] - int Find(ElementType X, List L):線上性L中查詢X的第一次出現的位置;
def Find(x,list):
i = 0
while x != list[i] and i < len(list):
i += 1
if i == len(list): # 若果沒有找到返回 -1
return -1
else: # 找到返回下標
return i -
void Insert(ElementType X, int i, List L):在位序i前插入一個元素X;
L.insert(index,x) -
void Delete(int i, List L):刪除指定位序i的元素;
del L[i] - int Length(List L):返回線性表長度n;
n = Length(L)
線性表的鏈式儲存(連結串列)實現
-
List MakeEmpty():初始化一個空的線性表L;
class chainList():
def init(self, value=None, Next=None): # 空表表頭
self.Value = value
self.Next = nextL = chainList()
ElementType FindKth(int K, List L):根據位序K,返回相應的元素;
def FindKth(k, chain_list):
index = 0 # 起始序列號為0
element = chain_list # 將指標指向第一個連結串列單元
while index != k and element.Next is not None : # 若找到k,或者到表尾,迴圈退出
index += 1
element = element.Next
if index == k : # 找到返回元素的值
return element
else: # 沒有返回 None
return Noneint Find(ElementType X, List L):線上性L中查詢X的第一次出現的位置;
def Find(x,chain_list):
index = 0 # 起始序列號為0
element = chain_list # 將指標指向第一個連結串列單元
while element.Value != x and element.Next is not None: # 若找到x,或者到表尾,迴圈退出
index += 1
element = element.Next
if element.Value == x : # 找到返回元素的值
return index
else: # 沒有返回 None
return None-
void Insert(ElementType X, int i, List L):在位序i前插入一個元素X;
def Insert(x,index ,chain_list):
element= chainList(x) # 生成新節點
if index == 0 : # 遇到頭節點的話則直接插入到頭節點前
element.Next = chain_list
return element
elementBefore = FindKth(index-1, chain_list) # 查詢序列前一個節點
if elementBefore is not None:
temp = elementBefore.Next
elementBefore.Next = element #將新節點插在index-1節點後
element.Next = temp # 將原來的index節點插在新節點後
del temp # 釋放記憶體
return chain_list # 返回頭指標
else:
return ‘引數錯誤' -
void Delete(int i, List L):刪除指定位序i的元素;
def Delete(index,chain_list):
if index == 0: # 遇到頭節點的話則直接刪除頭節點
p = chain_list.Next
del chain_list
return p
elementBefore = FindKth(index-1, L) # 查詢序列前一個節點
if elementBefore is not None:
temp = elementBefore.Next # 將指標指向要刪除的節點
elementBefore.Next = temp.Next #將index-1節點指向index+1節點
del temp # 釋放記憶體
return chain_list #返回頭指標
else:
return ‘引數錯誤' int Length(List L):返回線性表長度n;
def Length(chain_list):
p = chain_list # p 指向第一個節點
count = 0
while p.Next is not None: # p不斷指向下一個節點
count += 1
p = p.Next
return count
原始碼: GitHub
<big>後續內容:
相關文章
- 資料結構——線性表資料結構
- 資料結構 | 線性表資料結構
- 資料結構-線性表資料結構
- 資料結構—線性表資料結構
- [資料結構] - 線性表資料結構
- 線性表的結構詳解
- 資料結構 - 線性表 - 順序表資料結構
- 資料結構-線性表、連結串列資料結構
- 線性表__資料結構筆記資料結構筆記
- 資料結構:線性表-例題資料結構
- 線性結構總結
- 考研資料結構-線性表-順序表資料結構
- 【資料結構】線性表-單連結串列資料結構
- 線性表——連結串列
- 資料結構筆記——線性表(下)資料結構筆記
- 線性表之順序儲存結構
- 線性表之鏈式儲存結構
- 資料結構筆記——線性表(中)資料結構筆記
- 資料結構——線性表P35.1資料結構
- 資料結構與演算法 - 線性表資料結構演算法
- 11 線性表的順序儲存結構
- 資料結構線性表兩種方式分享資料結構
- 線性表
- 線性結構(二)--陣列陣列
- 資料結構基礎學習之線性表資料結構
- 資料結構:線性表(Python實現基本操作)資料結構Python
- 資料結構-第一篇:線性表資料結構
- 資料結構與演算法(一):線性表資料結構演算法
- 【資料結構&演算法】04-線性表資料結構演算法
- 資料結構與演算法 | 線性表 —— 順序表資料結構演算法
- 資料結構與演算法 | 線性表 —— 連結串列資料結構演算法
- 2.1線性表
- 線性結構 佇列與棧佇列
- 前端資料結構--線性結構-連結串列前端資料結構
- 資料結構:特殊的線性表之 棧 & 佇列資料結構佇列
- 資料結構與演算法-線性表-單連結串列資料結構演算法
- 線性結構 陣列與連結串列陣列
- 線性表 & 雜湊表
- Java實現資料結構之線性結構Java資料結構