链表
- 特性: 链表结构可以充分利用计算机的内存空间,实现灵活的内存动态管理且进行扩展时不需要进行数据搬迁。
- 链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是不像顺序表一样连续存储数据,而是每一个结点(数据存储单元)里存放下一个结点的信息(即地址)
"""
add(item):链表头部添加元素
travel():遍历整个链表
is_empty():链表是否为空
length():链表长度
append(item):链表尾部添加元素
insert(pos, item):指定位置添加元素
remove(item):删除节点
search(item):查找节点是否存在
"""
class Node:
""" 节点类 """
def __init__(self, item):
self.item = item
self.next = None
class Link:
""" 链表 """
def __init__(self):
self._head = None
def add(self, item):
""" 链表头部添加元素 """
node = Node(item)
node.next = self._head
self._head = node
def travel(self):
""" 遍历整个链表 """
cur = self._head
while cur:
""" 存在节点时,就触发循环 """
print(cur.item)
cur = cur.next
def is_empty(self):
""" 链表是否为空 """
return self._head is None
def length(self):
""" 链表长度 """
count = 0
cur = self._head
while cur:
""" 存在节点时,就触发循环 """
count += 1
cur = cur.next
return count
def append(self, item):
""" 链表尾部添加元素 """
node = Node(item)
if self._head is None:
""" 说明链表为空 """
self.add(node)
return
cur = self._head
pre = None
while cur:
pre = cur
cur = cur.next
pre.next = node
def search(self, item):
""" 查找节点是否存在 """
cur = self._head
while cur:
if cur.item == item:
""" 存在返回True """
return True
else:
cur = cur.next
return False
def insert(self, pos, item):
""" 指定位置添加元素 """
if pos == 0:
self.add(item)
return
node = Node(item)
cur = self._head
pre = None
for i in range(pos):
pre = cur
cur = cur.next
pre.next = node
node.next = cur
def remove(self, item):
""" 删除节点 """
cur = self._head
if item == cur.item:
""" 如果删除的是第一个节点 """
self._head = cur.next
return
pre = None
while cur:
pre = cur
cur = cur.next
if cur.item == item:
pre.next = cur.next
return
def reverse(self):
""" 反转 """
pre = None
cur = self._head
n = cur.next
while cur:
""" 当cur为空时,也就是此时pre是节点A """
cur.next = pre
pre = cur
cur = n
if cur is not None:
n = n.next
self._head = pre
link = Link()
link.add(1)
link.add(2)
link.add(3)
link.insert(0, 12)
link.remove(3)
print(link.search(22))
link.reverse()
link.travel()