数据结构之单链表
一、单链表的结构
单链表由具有特定属性的节点构成,其中每个节点包含两个属性,一个信息属性和一个链接属性。信息属性指向该节点元素,链接属性指向链表中的下一个节点,而最后一个节点的链接属性则指向一个空值。
class SingleNode:
'''
单节点类
'''
def __init__(self, item):
self.next = None
self.item = item
二、一个单链表对象包含的操作
# is_empty() 链表是否为空
#
# length() 链表长度
#
# travel() 遍历整个链表
#
# add(item) 链表头部添加元素
#
# append(item) 链表尾部添加元素
#
# insert(pos, item) 指定位置添加元素
#
# remove(item) 删除节点
#
# search(item) 查找节点是否存在
三、实现一个单链表
import operator as op
class SingleLinkedList:
'''单链表类'''
def __init__(self):
self.head = None
self.length = 0
def is_empty(self):
'''
判断链表是否为空
:return:
'''
return self.length == 0
def length(self):
'''
返回链表长度
:return:
'''
return self.length
def travel(self):
'''
遍历输出链表值
:return:
'''
cur = self.head
if self.head is None:
print()
while cur is not None:
print(cur.item, " ")
cur = cur.next
def add(self, item):
'''
在链表头部插入item
:param item:
:return:
'''
node = SingleNode(item)
node.next = self.head
self.head = node
self.length += 1
def append(self, item):
'''
在链表尾部插入item
:param item:
:return:
'''
node = SingleNode(item)
if self.is_empty():
self.add(item)
else:
cur = self.head
while cur.next is not None:
cur = cur.next
cur.next = node
self.length += 1
def insert(self, pos, item):
'''
在链表pos位置插入item
:param pos:
:param item:
:return:
'''
if pos <= 0:
self.add(item)
elif pos >= self.length:
self.append(item)
else:
node = SingleNode(item)
cur = self.head
while pos > 1:
cur = cur.next
pos -= 1
node.next = cur.next
cur.next = node
self.length += 1
def remove(self, item):
'''
删除链表中值=item的第一个元素
:param item:
:return:
'''
cur = self.head
pre = None
while cur is not None:
if op.eq(cur.item, item):
# 删除链表中第一个元素
if pre is None:
self.head = cur.next
else:
pre.next = cur.next
self.length -= 1
break
else:
pre = cur
cur = cur.next
def search(self, item):
'''
查找链表中是否存在item
:param item:
:return:
'''
cur = self.head
is_exist = False
while cur is not None:
if op.eq(cur.item, item):
is_exist = True
break
else:
cur = cur.next
return is_exist