Python之資料結構 線性表

2021-10-03 02:49:17 字數 3166 閱讀 9048

線性表作為一種基本的資料結構型別,在計算機儲存器中的儲存一般有兩種形式,一種是順序儲存,一種是鏈式儲存。

1. 定義

若將線性表

l=(a0,a1, ……,an-1)

中的各元素依次儲存於計算機一片連續的儲存空間,這種機制表示為線性表的順序儲存            結構。

2. 特點

邏輯上相鄰的元素

ai, ai+1

,其儲存位置也是相鄰的;

儲存密度高,方便對資料的遍歷查詢。

對錶的插入和刪除等運算的效率較差。

3. 程式實現 在

python

中,list

存放於一片單一連續的記憶體塊,故可借助於列表型別來描述線性表的順序儲存結構,而且列表本身就提           供了豐富的介面滿足這種資料結構的運算。

>>>l = [1,2,3,4]

l[1, 2, 3, 4, 10]

>>>l.insert(1,20) #插入元素

l[1, 20, 2, 3, 4, 10]

>>>l.remove(3) #刪除元素

l[1, 20, 2, 4, 10]

>>>l[4] = 30 #修改

l[1, 20, 2, 4, 30]

>>>l.index(2) #查詢

2

1. 定義

將線性表

l=(a0,a1,……,an-1)

中各元素分布在儲存器的不同儲存塊,稱為結點,每個結點(尾節點除外)中都持有乙個指向下乙個節點的引用,這樣所得到的儲存結構為鍊錶結構。

2. 特點

邏輯上相鄰的元素

ai, ai+1

,其儲存位置也不一定相鄰;

儲存稀疏,不必開闢整塊儲存空間。

對錶的插入和刪除等運算的效率較高。

邏輯結構複雜,不利於遍歷。

3. 程式實現

示例:

"""

(重點)鏈式儲存示例:

思路:1、結點如何表示?

自定義物件:代表資料元素

2、如何建立關聯?

3、實現什麼樣的鍊錶操作?

初始化--顯示--追加--插入--刪除--根據索引取值--獲取長度--是否為空--清空

"""class node:

def __init__(self, name, n=none):

self.name = name # 自身資料

self.next = n # 下乙個結點

def __str__(self):

return str(self.name)

class linklist:

def __init__(self):

self.head = node(none)

# 初始化資料

def init_list(self, list_data):

p = self.head

for item in list_data:

p.next = node(item)

p = p.next

# 顯示資料

def show(self):

p = self.head.next

while p:

print(p, end=" ")

p = p.next

print()

# 末尾新增資料

last = self.head

while last.next is not none:

last = last.next

last.next = node(value)

# 指定位置插入

def insert(self, index, value):

node = node(value)

length = self.length()

if index >= length:

return

i = 0

p = self.head

while i < index:

i += 1

p = p.next

node.next = p.next

p.next = node

# 刪除

def delete(self, item):

p = self.head

while p.next:

if p.next.name == item:

p.next = p.next.next

break

else:

raise valueerror("value not in list")

p = p.next

# 根據索引獲取值

def get(self, index):

i = 0

item = self.head

while item.next:

if i == index:

return item.next

item = item.next

i += 1

else:

raise indexerror("index out of range")

# 返回長度

def length(self):

length = 0

last = self.head

while last.next:

length += 1

last = last.next

return length

# 返回是否為空

def is_empty(self):

return false if self.head.next else true

# 清空鍊錶

def clear(self):

self.head.next = none

if __name__ == '__main__':

link_list = linklist()

link_list.init_list([1, 2, 3])

link_list.delete(2)

link_list.show()

mysql 線性表 資料結構之線性表

概要 參考 大話資料結構 把常用的基本資料結構梳理一下。線性表定義 線性表 list 零個或多個資料元素的有限序列。若將線性表記為 a 1,cdots,a a i,a cdots,a n 則表中 a 領先於 a i a i 領先於 a 稱 a 是 a i 的直接前驅元素,a 是 a i 的直接後繼元...

資料結構之線性表

從現在開始,我們開始討論如何實現一些常用的資料結構和其中的一些經典演算法.等把資料結構講完了.我可能會繼續討論vc 的程式設計只是以及vs平台下的c c 開發等等.呵呵.我們進入正題吧.我在這裡就只實現線性表的連表結構.當然了,這裡實際上包含了好多知識.我希望大家在引用的時候.一定要領悟裡面的一些變...

資料結構之線性表

線性表是具有相同特性的資料元素的乙個有限序列。該序列中所含元素的個數叫做線性表的長度,用n表示,n 0。當n 0時,表示線性表是乙個空表,即表中不包含任何元素。設序列中第i i表示位序 個元素為ai 1 i n 線性表的一般表示為 a1,a2,ai,ai 1,an include include d...