zoukankan      html  css  js  c++  java
  • 链表——哨兵

    没有哨兵的链表:

    ListSearch(L,k) {
      x = L.head;
      while(x!=null && x.key!=k)
        x = x.next;
      return x;
    }

    ListInsert(L,x){
      x.next = L.head;
      if(L.head!=null)
        L.head.pre = x
      L.head = x;
      x.prev = null;
    }

    ListDelete(L,x) {
      if(x.prev!=null)
        x.prev.next = x.next;
      else
        L.head = x.next;
      if(x.next!=null)
        x.next.prev = x.prev;
    }

    存在哨兵的链表:

    L.nil便是链表的哨兵

    ListSearch(L,k){
      x = L.nil.next;
      while(x!=L.nil&&x.key!=k)
        x = x.next;
      return x;
    }

    ListInsert(L,x){
      x.next = L.nil.next;
      L.nil.next.prev = x;
      L.nil.next = x;
      x.prev = L.nil;
    }

    ListDelete(L,x){
      x.prev.next = x.next;
      x.next.prev = x.prev;
    }

    哨兵基本不能降低数据结构相关操作的渐近时间界,但可以降低常数因子。

    带哨兵节点的链表,需要额外的一个节点,但插入和删除等操作不需要额外的判断;不带哨兵节点,在处理链表为空时,和其他情况不一样,需要单独判断一次。
    带哨兵节点的链表,插入或删除时,不论操作的位置,表头都不变,不需要额外的判断;不带哨兵节点的链表,插入或删除操作发生在第一个节点时,表头指针都要变化,需要额外的处理。

     

     

  • 相关阅读:
    单表查询与多表查询
    我对Jenkins的认识
    Jenkins的使用
    关于CDN的认识
    linux permission denied解决方法
    linux 最近使用的命令
    JVM相关参数的采集
    double 和 float
    BlockingQueue 阻塞队列,很有用的一种
    使用maven打包的注意事项
  • 原文地址:https://www.cnblogs.com/lvcoding/p/7473224.html
Copyright © 2011-2022 走看看