zoukankan      html  css  js  c++  java
  • 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)让女朋友住上大房子,永远年轻,永远热泪盈眶,很多人都是这样,他们都把自己当成身在梦中一样,浑浑噩噩地过日子,只有痛苦或爱或危险可以让他们重新感到这个世界的真实。
  • 相关阅读:
    使用 C# .NET 在 ASP.NET 应用程序中实现基于窗体的身份验证
    高性能 Windows Socket 组件 HPSocket
    Linux下的C编程实战
    Scrum实践
    hadoop之NameNode,DataNode,Secondary NameNode
    代码抽象层次
    分布式统计的思考以及实现
    GCC起步
    学习 easyui 之一:easyloader 分析与使用
    从Prism中学习设计模式之MVVM 模式简述MVVM
  • 原文地址:https://www.cnblogs.com/make-big-money/p/10323344.html
Copyright © 2011-2022 走看看