美文网首页
基础数据结构学习记录:链表

基础数据结构学习记录:链表

作者: 统计学徒 | 来源:发表于2018-11-10 17:32 被阅读0次

    链表(linked list)这种数据结构的各对象按线性顺序排列,其顺序是由各对象中的指针决定的(数组的线性顺序是由数组下标决定的)。链表为动态集合提供了一种简单而灵活的表示方法(前面的栈和队列都是通过数组实现的)。

    链表可以有多种形式。可以是单链接的或双链接的,可以是已排序的或未排序的,可以是循环的或非循环的。此处以未排序的双向链表(doubly linked list)L 为例。L 的每一个元素都是一个对象,每个对象有一个关键字 key 和两个指针:next 和 prev(对象中还可以包括其他数据或称为卫星数据)。

    设 x 为列表的一个元素,x.next指向它在链表中的后继元素,x.prev 指向它的前驱元素。链表的(head)对应 的情况为x.prev=NIL;链表的(tail)对应情况为 x.next = NIL。

    链表的基本操作有:搜索、插入和删除

    搜索

    LIST-SEARCH(L,k)
        x = L.head
        while x != NIL and x.key != k    # 链表非空 与 键值不等于 k
            x = x.next
        return x
    

    过程 LIST-SEARCH(L,k) 采用简单的线性搜索方法,查找链表 L 中第一个关键字为 k 的元素,并返回指向该元素的指针。如果 L 没有符合条件的对象,则过程返回 NIL。

    插入

    LIST-INSERT(L,x)
        x.next = L.head
        if L.head != NIL
            L.head.prev = x
        L.head = x
        x.prev = NIL
    

    给定一个已设置好关键字 key 的元素 x,将 x 插入到链表的表头。

    删除

    LIST-DELETE(L,x)
        if x.prev != NIL
            x.prev.next = x.next
        else
            L.head = x.next
        if x.next  != NIL
            x.next.prev = x.prev
    

    程序实现(C):

    
    

    参考《算法导论》

    相关文章

      网友评论

          本文标题:基础数据结构学习记录:链表

          本文链接:https://www.haomeiwen.com/subject/trgzxqtx.html