#!/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中...