• 4-7 带有尾指针的链表:使用链表实现队列


    队列(先进先出)

    本节使用改进的链表实现队列

    从head端删除一个节点相对是容易的。

    由于对这个链表的操作全部在链表的一侧完成,也就是head端或tail端完成,所以就不使用虚拟的头结点。是因为

    不牵扯到对链表的中间元素进行删除或插入,所以也就没必要去统一→→对链表中间元素进行操作和对链表2侧元素进行操作他们之间会带来逻辑不统一的问题。

     

    带有尾节点的入队和出队操作

     1  @Override//入队
     2     public void enqueue(E e){
     3         if(tail == null){ //tail为空,同时也说明head也为空,
     4             tail = new Node(e);  //在尾部插入一个节点
     5             head = tail;
     6         }
     7         else{
     8             tail.next = new Node(e);
     9             tail = tail.next;
    10         }
    11         size ++;
    12     }
    13 
    14     @Override//出队
    15     public E dequeue(){
    16         if(isEmpty())            //首先判断能否出队
    17             throw new IllegalArgumentException("Cannot dequeue from an empty queue.");
    18 
    19         Node retNode = head;//出队元素所在节点应该是head位置所指的位置
    20         head = head.next;
    21         retNode.next = null;  //执行完上面2行代码后,此时retNode.next指向head,执行 retNode.next = null,将retNode.next从将链表中断开
    22         if(head == null)   //执行了head = head.next;后,原来的head节点指向了它的下一个,新的head节点可能是空的
    23             tail = null;
    24         size --;
    25         return retNode.e;
    26     }
    带女朋友搬家新家条件不好,累到女朋友了,让女朋友受苦了,特此明志:每天学习,明年这个时候(20190812)让女朋友住上大房子,永远年轻,永远热泪盈眶,很多人都是这样,他们都把自己当成身在梦中一样,浑浑噩噩地过日子,只有痛苦或爱或危险可以让他们重新感到这个世界的真实。
  • 相关阅读:
    3.1C#中的命名空间
    2章总结
    2.4冒泡排序
    2.3 C#中的数组
    2.2二重循环
    2.1c#中的循环语句
    1章总结
    docker内外数据拷贝
    搭建docker环境
    centos7 部署Apache的httpd服务器
  • 原文地址:https://www.cnblogs.com/make-big-money/p/10323344.html
Copyright © 2020-2023  润新知