数据结构与算法7 - 链表

链表:

  1. 链表由一系列数据记录构成,在每个记录里有个区域包含一个指向下一个数据记录的索引

  2. 链表vs数组列表

    (1)使用固定步数的操作可以在列表中任意节点做插入、删除操作

    (2)不允许随机访问

  3. 循环链表和双向链表

    

   4. 哨兵节点

    在某些实现中,可能会在第一个数据记录之前或者最后一个数据记录之后添加一个额外的哨兵节点或者哑元节点

扫描二维码关注公众号,回复: 7443250 查看本文章

    简化和加快一些列表处理的算法

  5. 抽象数据类型(ADT)列表操作

    (1)创建一个空列表

    (2)判断列表是否为空

    (3)确定列表中元素个数

    (4)在列表中给定位置添加一个元素

    (5)在列表中给定位置删除一个元素

    (6)删除列表中所有元素

    (7)在列表中取到给定位置上的元素

    (8)每一项操作的时间复杂度

class Node:
    def __init__(self, value, next):
        self.value = value
        self.next = next
class LinkedList:
    def __init__(self):
        self.head = Node(None, None)
        self.size = 0
    def add_first(self, value):
        node = Node(value, None)
        node.next = self.head.next
        self.head.next = node
        self.size += 1
    def add_last(self, value):
        new_node = Node(value,None)
        node = self.head
        while node.next != None:
            node = node.next
        node.next = new_node
        self.size += 1
    def print_list(self):
        node = self.head
        while node.next != None:
            node = node.next
            print(node.value, end = " ")
        print()
    def length(self):
        return self.size

ll = LinkedList()
ll.add_first(5)
ll.add_first(8)
ll.add_last(14)
print(ll.length())
ll.print_list()

猜你喜欢

转载自www.cnblogs.com/lvxiaoning/p/11646808.html