python資料結構 鍊錶基礎知識

2021-09-14 00:18:10 字數 3165 閱讀 4826

#!/usr/bin/env python

# -*- coding: utf-8 -*-

# @file : 鍊錶基礎知識.py

# @date : 2019/3/24 0024

# @contact : [email protected]

# @author: deepman

class node:

def __init__(self, initdata):

self.data = initdata

self.next = none

def getdata(self):

return self.data

def getnext(self):

return self.next

def setnext(self, newdata):

self.data = newdata

def setnext(self, nextnode):

self.next = nextnode

# 定義乙個無序鍊錶

class list():

def __init__(self):

# self.node = node(10)/

self.head = none

def isempty(self):

return self.head == none

def add(self, value):

newnode = node(value)

newnode.setnext(self.head)

self.head = newnode # 更新 頭節點指標指向新的節點

newnode = node(value)

current = self.head

if self.isempty():

self.head = newnode

else:

while current.getnext() is not none:

# 這裡有乙個關鍵點,就是判斷current是否是最後乙個節點而不再是current是否為none ,

# 因為最後乙個節點的判斷要素是其後沒有節點, 也就是getnext()為none

current = current.getnext()

current.setnext(newnode)

def size(self):

current = self.head

count = 0

while current is not none:

count += 1

current = current.getnext()

return count

def search(self, value): # 查詢某個值 並返回其index

current = self.head

found = false

p = none

previous = none

while current is not none and not found:

if current.getdata() == value:

found = true

p = current

else:

previous = current

current = current.getnext()

if previous == none: # 當如果第乙個就是要找的,那麼就無法得到之前的節點.

previous = self.head

return found, p, previous

def remove(self, value):

current = self.head

found, p, previous = self.search(value)

# 我們先找到 再進行刪除,同時要返回之前的節點。

if not found:

print("can't delet it, beacause of not find")

else:

previous.setnext(p.getnext())

def insert(self, index, value): # 首先要找到對應的位置然後插入,如果是在表頭index = 0 的情況下直接插入

current = self.head

newnode = node(value)

count = 0

while current is not none:

current = current.getnext()

count += 1

if count == index:

newnode.setnext(current.getnext())

current.setnext(newnode)

if index == 0:

self.head = newnode

mylist = list()

mylist.add(31) # 這裡的add 相當於是在鍊錶的前面加 最後加入的反而在鍊錶的head位置

mylist.add(77)

mylist.add(17)

mylist.add(93)

mylist.add(26)

mylist.add(54)

mylist.add(31)

mylist.add(77)

mylist.add(17)

mylist.add(93)

mylist.add(26)

mylist.add(54) # head

print(mylist.size())

found = mylist.search(17)

print(found)

print(mylist.size())

found = mylist.search(100)

print(found)

mylist.remove(54)

found = mylist.search(54)

print(found)

print(mylist.head)

mylist.insert(10, 500)

found = mylist.search(500)

print(found)

資料結構基礎 鍊錶

1.鍊錶 表明這種資料結構是一種鏈式儲存結構 它不同於線性表的順序儲存結構。鍊錶的相鄰元素 在物理記憶體中不連續 所以這種結構可以充分利用一些系統的記憶體碎片來完成一些事務,即如果採用鍊錶結構有時可以解決當連續記憶體分配不足時的問題。鍊錶支援插入和刪除這兩種操作,並且 刪除 插入鍊錶頭部 尾部結點的...

資料結構基礎 鍊錶

typedef struct node node typedef struct node linklist 思路 獲取第i個資料 1.宣告乙個指標p指向鍊錶的第乙個結點,初始化j從1開始 2.當jgeteelm linklist l,int i,elemtype e if p j i e p dat...

python資料結構 鍊錶

資料結構是電腦科學必須掌握的一門學問,很多的教材都是用c語言實現鍊錶,因為c有指標,可以很方便的控制記憶體,很方便就實現鍊錶,其他的語言,則沒那麼方便,有很多都是用模擬鍊錶,因為python是動態語言,可以直接把物件賦值給新的變數。在c c 中,通常採用 指標 結構體 來實現鍊錶 而在python中...