用python 實現連結串列(實現__getitem__,__set__,__len__ 魔法方法)
'''
用python 實現資料結構--連結串列的實現
'''
class LinkListException(Exception):
def __init__(self,ex_info):
self.info = ex_info
#print(self.info)
class Node():
def __init__(self,data,next = None):
self.next = next
self.data = data
class LinkList():
dict = {}
def __init__(self):
self._head = None
self._lenth = 0
def is_empty(self):
if self._lenth == 0:
return True
else:
return False
def __getitem__(self, index):
if isinstance(index,int):
if 0 <= index <self._lenth:
node = self._getdata(index)
self.dict[index] = node.data
return self.dict[index]
else:
raise IndexError
else:
raise LinkListException('index 必須是一個非負整數')
def __setitem__(self, index, value):
if isinstance(index,int):
if 0 <= index <self._lenth:
node = self._getdata(index)
node.data = value
else:
raise IndexError
self.dict[index] = node.data
else:
raise LinkListException('index 必須是一個非負整數')
def append(self,data):
if self.is_empty():
self._head = Node(data)
self._lenth += 1
else:
cus = self._head
while cus.next:
cus = cus.next
cus.next = Node(data)
self._lenth += 1
def __len__(self):
return self._lenth
def _getdata(self,index):
cur = self._head
target = None
for _ in range(index):
cur = cur.next
target = cur
return target
def getitems(self):
items = []
if self.is_empty():
return items
else:
cur = self._head
while cur:
items.append(cur.data)
cur = cur.next
return items
def delete(self,index):
if self.is_empty():
raise LinkListException('不能對空連結串列進行刪除操作')
else:
if index == 0:
self._head = self._head.next
self._lenth -= 1
else:
cur = self._head
for _ in range(index - 1):
cur = cur.next
cur.next = cur.next.next
self._lenth -= 1
def insert(self,index,data):
if self.is_empty():
if index == 0:
self._head = Node(data)
self._lenth += 1
else:
raise LinkListException('只能在空連結串列頭插入資料(index 必須是0')
else:
if index == 0:
node = Node(data)
node.next = self._head
node ,self._head = self._head ,node
self._lenth += 1
else:
cur = self._head
node =Node(data)
for _ in range(index -1 ):
cur = cur.next
node.next = cur.next
cur.next = node
測試:
ll = LinkList()
新增資料:
ll.append(1)
ll.append(‘ab’)
ll.append(‘aabb’)
ll.append(‘aabbcc’)
ll[0]
Out[6]: 1
ll.getitems()
Out[5]: [1, ‘ab’, ‘aabb’, ‘aabbcc’]變更元素
ll[1] ,ll[2] = ll[2],ll[1]
ll.getitems()
Out[8]: [1, ‘aabb’, ‘ab’, ‘aabbcc’]插入資料:
ll.insert(0,’head’)
print(len(ll))
print(ll.getitems())
ll.insert(1,’2’)
print(ll.getitems())
5
[‘head’, 1, ‘aabb’, ‘ab’, ‘aabbcc’]
[‘head’, ‘2’, 1, ‘aabb’, ‘ab’, ‘aabbcc’]
相關文章
- Python實現單連結串列Python
- 連結串列-單連結串列實現
- 連結串列找環(python實現)Python
- python3實現連結串列Python
- 單連結串列實現
- 用連結串列實現佇列的功能佇列
- FreeRTOS連結串列實現
- 實現雙向連結串列
- C#實現連結串列C#
- Python資料結構——連結串列的實現Python資料結構
- 教你如何運用python/golang實現迴圈連結串列PythonGolang
- 用連結串列的方式實現大數相減-Java實現Java
- Python實現單向連結串列詳解Python
- Python實現環形連結串列詳解Python
- 連結串列以及golang介入式連結串列的實現Golang
- Linux核心連結串列-通用連結串列的實現Linux
- Rust 程式設計,用連結串列實現棧Rust程式設計
- 資料結構-雙向連結串列(Python實現)資料結構Python
- python dict實現的魔法方法Python
- java實現連結串列反轉Java
- go 實現單向連結串列Go
- Go實現雙向連結串列Go
- TypeScript 實現連結串列反轉TypeScript
- golang 實現連結串列爽不爽?Golang
- java實現雙向連結串列Java
- C語言實現連結串列C語言
- c++實現單連結串列C++
- pta重排連結串列(一個很清晰的實現,完全模擬連結串列的實現)
- python 資料結構之單連結串列的實現Python資料結構
- 用JavaScript實現功能齊全的單連結串列JavaScript
- 詳解Python魔術方法__getitem__、__setitem__、__delitem__、__len__Python
- PHP 使用連結串列實現對映PHP
- Java實現連結串列帶註釋Java
- Java雙向連結串列的實現Java
- 迴圈連結串列(約瑟夫問題)--python實現Python
- c語言單向連結串列逆轉實現方法C語言
- 用c語言實現資料結構——單連結串列C語言資料結構
- python 資料結構之雙向連結串列的實現Python資料結構