抽象資料和鍊錶

2021-09-10 06:01:29 字數 3170 閱讀 3800

class first_linked_last():

def __init__(self,first=none,last=none):

self.__first = first

self.__last = last

def inser_first(self,data):

n = node(data)

if self.__first == none:

self.__first = n

self.__last = n

else:

n.set_next(self.__first)

self.__first = n

def insert_last(self,data):

n = node(data)

if self.__first == none:

self.__first = n

self.__last = n

else:

self.__last.set_next(n)

self.__last = n

def insert(self,data0,data):

n = node(data)

if self.__first == none:

self.__first = n

self.__last = n

else:

currentnode = self.__first

flag = false

while currentnode.get_next()!=none:

if currentnode.get_data()==data0:

flag = true

break

else:

currentnode = currentnode.get_next()

if flag:

n.set_next(currentnode.get_next())

currentnode.set_next(n)

else:

if currentnode.get_data()==data0:

self.insert_last(data)

def delete_first(self):

if self.__first == none:

print("空鍊錶,不能刪除")

else:

self.__first = self.__first.get_next()

def delete(self,data):

if self.__first == none:

print("空鍊錶,不能刪除")

else:

currentnode = self.__first

precurrentnode = self.__first

flag = false

while currentnode.get_next!=none:

if currentnode.get_data()==data:

flag = true

break

else:

precurrentnode = currentnode

currentnode = currentnode.get_next()

if flag:

if currentnode == precurrentnode:

self.delete_first()

else:

precurrentnode.set_next(currentnode.get_next())

else:

if currentnode.get_data() == data:

precurrentnode.set_next(none)

self.__last = precurrentnode

def update_first(self,data):

if self.__first == none:

print("空鍊錶,不能修改")

else:

self.__first.set_data(data)

def update_last(self,data):

if self.__first == none:

print("空鍊錶,不能修改")

else:

self.__last.set_data(data)

def update(self,data0,data):

if self.__first == none:

print("空鍊錶,不能修改")

else:

currentnode = self.__first

flag = false

while currentnode.get_next!=none:

if currentnode.get_data() == data0:

flag = true

break

else:

currentnode = currentnode.get_next()

if flag:

currentnode.set_data(data)

else:

self.update_last(data)

def show(self):

if self.__first == none:

print("該鍊錶為空")

else:

currentnode = self.__first

while currentnode!=none:

print(currentnode.get_data())

currentnode = currentnode.get_next()

a = first_linked_last()

a.inser_first("張三")

a.insert_last("李四")

a.insert("張三","李李")

a.insert_first("王五")

a.update_first("王五一")

a.update_last("李四四")

a.update("張三","張一")

a.delete_first()

a.delete("李李")

a.show()

資料結構 靜態鍊錶和動態鍊錶

通過指標將資料連線起來 整個資料結構中,很重要的一點是,初始化和銷毀對應,插入和刪除對應,有malloc new 有free delete 一定要對應。鍊錶的各項操作,最關鍵的,其實就是找到被操作元素的上乙個元素,插入位置的上乙個元素,或者要刪除元素的上乙個元素,這都是非常關鍵的,同時也要注意,鍊錶...

資料結構與演算法 鍊錶 雙向鍊錶和環形鍊錶

1 雙向鍊錶和單向鍊錶之間有什麼區別?答 雙向鍊錶和單向鍊錶之間最大的區別就是其多了乙個指向前乙個節點的指標域。2 雙向鍊錶對比於單鏈表有什麼優點?答 3 雙向鍊錶功能實現時和單向鍊錶有何區別?答 具體功能實現大體上沒有區別,在遍歷節點和修改節點兩個功能上只需要將節點修改為雙向節點,根本不需要進行其...

線性表 線性表 抽象鍊錶類 單向鍊錶講解

線性表兩種分類 順序表,鍊錶 線性表 記錄 資料元素 資料項 順序表 只有唯一乙個節點只存在乙個後繼,不存在前驅,只有唯一乙個節點存在前驅,不存在後繼,中間所有的節點都存在位移的前驅和後繼 順序表的優點 可以隨機訪問,方便訪問,儲存密度大,空間利用率高 順序表缺點 難以實現插入資料的操作,而且空間一...