python資料結構教程第一課
python的一些實用的資料結構,原理加上例項原始碼。
一、順序表的實現
二、鏈結表的實現
1.單鏈表
2.帶尾指標的單鏈表
3.迴圈單鏈表
4.雙鏈表
5.迴圈雙鏈表
三、線性表的應用—josephus問題
1.順序表解法
2.迴圈單鏈表解法
在程式裡經常需要將一組資料元素作為整體管理和使用,需要建立這種元素組,用變數記錄它們,一組資料中包含的元素個數可能發生變化,也可能會用元素在序列裡的位置和順序,表示實際應用中的某種有意義資訊。線性表就是這樣一組元素的抽象,其具體實現方式有兩種,順序表和鏈結表
線性表的基本操作應當有建立空表、返回長度資訊、插入、刪除等操作,其基本的adt如下:
adt list:
list(self) #建立乙個新錶
is_empty(self) #判斷self是否是乙個空表
len(self) #返回表長度
prepend(self,elem) #在表頭插入元素
insert(self,elem,i) #在表的位置i處插入元素
del_first(self) #刪除第乙個元素
def_last(self) #刪除最後乙個元素
del(self,i) #刪除第i個元素
search(self,elem) #查詢元素在表中第一次出現的位置
forall(self,op) #對錶元素的遍歷操作,op操作
python內部的tuple與list採用的就是順序表結構,其不同點在於tuple是固定結構,一旦建立就無法進行改動,而list則支援變動操作,具有上述adt所描述的全部操作,這裡不再具體重寫類**,其主要使用命令如下
list1 = list([1,2,3,4,5]) #建立新錶
k = len(list1) #返回表長度
list1.insert(k,7) #在位置k插入7
list1.pop() #返回並刪除尾部元素
print(list1) #輸出表的全部元素
list2 = list1[2:] #表的切片操作
順序表的優勢:在於o(1)時間的定位元素訪問,很多簡單的操作效率也比較高,
比較麻煩的地方:在於表中間位置元素的插入刪除操作,由於元素在順序表的儲存區里連續排列,插入/刪除操作可能要移動很多元素,代價很高
基於鏈結技術實現的線性表稱為鏈結表或者鍊錶,用鏈結關係顯式表示元素之間的順序關係,鏈結表結構的基本思想如下:
1.把表中的元素分別儲存在一批獨立的儲存塊(結點)裡
2.保證從組成表結構中的任乙個結點可找到與其相關的下乙個結點
3.在前一結點裡用鏈結的方式顯式地記錄與下一結點之間的關聯
在python裡鍊錶的實現有諸多方式和變形,接下來將選取主要的結構進行原始碼講解
Python之資料結構 線性表
線性表作為一種基本的資料結構型別,在計算機儲存器中的儲存一般有兩種形式,一種是順序儲存,一種是鏈式儲存。1.定義 若將線性表 l a0,a1,an 1 中的各元素依次儲存於計算機一片連續的儲存空間,這種機制表示為線性表的順序儲存 結構。2.特點 邏輯上相鄰的元素 ai,ai 1 其儲存位置也是相鄰的...
資料結構之線性表(一)
線性表的順序儲存結構 1.標頭檔案sqlist.h define true 1 define false 0 define ok 1 define error 0 define elemtype int define list init size 10 define list increment 1...
資料結構之線性表 一
因為準備考研的原因,想對資料結構進行深入學習,準備寫部落格來記錄學習的知識。如有問題的地方望各位大佬指出。首先定義 線性表是具有相同特性資料元素的乙個有限序列。線性表的儲存結構有順序儲存結構和鏈式儲存結構兩種。第一種稱為順序表,第二種稱為鍊錶。對於兩種結構的記憶,順序表跟陣列類似,而鍊錶像生活中的火...