这篇文章主要为大家详细介绍了python数据结构之单链表的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
本文实例为大家分享了python数据结构之单链表的具体代码,供大家参考,具体内容如下
# 节点类
class node():
__slots__=['_item','_next'] # 限定node实例的属性
def __init__(self,item):
self._item = item
self._next = none # node的指针部分默认指向none
def getitem(self):
return self._item
def getnext(self):
return self._next
def setitem(self,newitem):
self._item = newitem
def setnext(self,newnext):
self._next=newnext
# 单链表
class singlelinkedlist():
def __init__(self):
self._head = none #初始化链表为空 始终指向链表的头部
self._size = 0 # 链表大小
# 返回链表的大小
def size(self):
current = self._head
count = 0
while current != none:
count += 1
current = current.getnext()
return count
# 遍历链表
def travel(self):
current = self._head
while current != none:
print(current.getitem())
current = current.getnext()
# 检查链表是否为空
def isempty(self):
return self._head == none
# 在链表前端添加元素
def add(self,item):
temp = node(item) # 创建新的节点
temp.setnext(self._head) # 新创建的next指针指向_head
self._head = temp # _head指向新创建的指针
# 在链表尾部添加元素
def append(self,item):
temp = node(item)
if self.isempty():
self._head = temp # 若为空表就直接插入
else:
current = self._head
while current.getnext() != none:
current = current.getnext() # 遍历列表
current.setnext(temp) # 此时current为链表最后的元素,在末尾插入
# 检索元素是否在链表中
def search(self,item):
current = self._head
founditem = false
while current != none and not founditem:
if current.getitem() == item:
founditem = true
else:
current = current.getnext()
return founditem
# 索引元素在表中的位置
def index(self,item):
current = self._head
count = 0
found = none
while current != none and not found:
count += 1
if current.getitem() == item:
found = true
else:
current = current.getnext()
if found:
return count
else:
return -1 # 返回-1表示不存在
# 删除表中的某项元素
def remove(self,item):
current = self._head
pre = none
while current!=none:
if current.getitem() == item:
if not pre:
self._head = current.getnext()
else:
pre.setnext(current.getnext())
break
else:
pre = current
current = current.getnext()
# 在链表任意位置插入元素
def insert(self,pos,item):
if pos <= 1:
self.add(item)
elif pos > self.size():
self.append(item)
else:
temp = node(item)
count = 1
pre = none
current = self._head
while count < pos:
count += 1
pre = current
current = current.getnext()
pre.setnext(temp)
temp.setnext(current)
if __name__=='__main__':
a=singlelinkedlist()
for i in range(1,10):
a.append(i)
print('链表的大小',a.size())
a.travel()
print(a.search(6))
print(a.index(5))
a.remove(4)
a.travel()
a.insert(4,100)
a.travel()
以上就是实例详解python数据结构之单链表的详细内容。