1. //=================================================
  2. // File Name : LinkQueue_demo
  3. //------------------------------------------------------------------------------
  4. // Author : Common
  5.  
  6. //类名:FirstLastList
  7. //属性:
  8. //方法:
  9. class FirstLastList_long{
  10. private Link_long first;
  11. private Link_long last;
  12.  
  13. public FirstLastList_long() { //构造函数
  14. this.first = null;
  15. this.last = null;
  16. }
  17.  
  18. public boolean isEmpty(){
  19. return (first == null);
  20. }
  21.  
  22. public void insertFirst(long dd){ //从链表的头开始插入
  23. Link_long newLink = new Link_long(dd);
  24. if(isEmpty()){
  25. last = newLink; //不用改变first
  26. }
  27. newLink.next = first;
  28. first = newLink;
  29. }
  30.  
  31. public void insertLast(long dd){ //从链表的尾开始插入
  32. Link_long newLink = new Link_long(dd);
  33. if(isEmpty()){
  34. first = newLink; //不用改变last
  35. }else{
  36. last.next = newLink; //在last后面添加新元素,并修改last的位置
  37. }
  38. last = newLink; //注意:只有一个元素的时候,插入要把last也赋为newLink
  39. }
  40.  
  41. public long deleteFirst(){
  42. Link_long temp = first; //暂存first
  43. if(first.next == null){ //如果只有一个元素,把last也赋为null
  44. last = null;
  45. }
  46. first = first.next; //把next设为first
  47. return temp.dData; //返回原来的first
  48. }
  49.  
  50. public void displayList(){
  51. System.out.println("List(first-->last):");
  52. Link_long current = first; //用于不断改变位置实现遍历
  53. while(current != null){
  54. current.displayLink();
  55. current = current.next;
  56. }
  57. }
  58.  
  59. }
  60.  
  61. //类名:LinkQueue
  62. //属性:
  63. //方法:用双端链表实现队列
  64. class LinkQueue{
  65. private FirstLastList_long theList;
  66.  
  67. public LinkQueue() { //构造函数
  68. theList = new FirstLastList_long(); //创建一个双端链表对象
  69. }
  70.  
  71. public void push(long j){ //从链表的尾开始插入,新来的元素在尾部
  72. theList.insertLast(j);
  73. }
  74.  
  75. public long pop(){
  76. return theList.deleteFirst(); //从链表的头开始弹出,先进的元素先被弹出
  77. }
  78.  
  79. public boolean idEmpty(){
  80. return theList.isEmpty();
  81. }
  82.  
  83. public void displayQueue(){
  84. System.out.println("Queue (front-->rear)");
  85. theList.displayList();
  86. }
  87. }
  88.  
  89. //主类
  90. //Function : LinkQueue_demo
  91. public class LinkQueue_demo {
  92.  
  93. public static void main(String[] args) {
  94. // TODO 自动生成的方法存根
  95. LinkQueue theQueue = new LinkQueue();
  96. theQueue.push(10);
  97. theQueue.push(20);
  98. theQueue.push(30);
  99. theQueue.displayQueue();
  100.  
  101. theQueue.pop();
  102. theQueue.pop();
  103. theQueue.displayQueue();
  104. }
  105.  
  106. }

Java数据结构——用双端链表实现队列的更多相关文章

  1. java数据结构-09双端队列

    一.相关概念: (Deque)双端队列能够在队头.队尾进行添加.删除等操作  二.接口设计:  三.代码实现 public class Deque<E> { private List< ...

  2. Java数据结构和算法(四)--链表

    日常开发中,数组和集合使用的很多,而数组的无序插入和删除效率都是偏低的,这点在学习ArrayList源码的时候就知道了,因为需要把要 插入索引后面的所以元素全部后移一位. 而本文会详细讲解链表,可以解 ...

  3. 队列(存储结构双端链表)--Java实现

    /*用链表实现的队列--使用的是双端链表 *注意:空指针错误肯定是引用没有指向对象 * */ public class MyLinkedQueue { private MyFirstAndLastLi ...

  4. 《Java数据结构与算法》笔记-CH5-链表-3双端链表

    /** * 双端链表的实现 */ class LinkA { public long dData; public LinkA next; public LinkA(long d) { dData = ...

  5. java数据结构——单链表、双端链表、双向链表(Linked List)

    1.继续学习单链表,终于摆脱数组的魔爪了,单链表分为数据域(前突)和引用域(指针域)(后继),还有一个头结点(就好比一辆火车,我们只关心火车头,不关心其它车厢,只需知晓车头顺藤摸瓜即可),头结点没有前 ...

  6. Java单链表、双端链表、有序链表实现

    单链表: insertFirst:在表头插入一个新的链接点,时间复杂度为O(1) deleteFirst:删除表头的链接点,时间复杂度为O(1) 有了这两个方法,就可以用单链表来实现一个栈了,见htt ...

  7. JAVA基础——链表结构之双端链表

    双端链表:双端链表与传统链表非常相似.只是新增了一个属性-即对最后一个链结点的引用 如上图所示:由于有着对最后一个链结点的直接引用.所以双端链表比传统链表在某些方面要方便.比如在尾部插入一个链结点.双 ...

  8. java实现双端链表

    PS:双端链表(持有对最后一个节点的引用,允许表尾操作与表头操作等效的功能) public class DoubleLinkedList { //节点类 static class Node { pub ...

  9. 双端链表--Java实现

    /*双端链表--比普通链表多了一个指向最后一个节点的引用 * 特点: 链表可以进行尾巴插入--输出顺序和输入顺序一致 * 但是不可以进行尾巴删除因为没有倒数第二节点的引用 * */ public cl ...

随机推荐

  1. CAP理论

    自打引入CAP理论的十几年里,设计师和研究者已经以它为理论基础探索了各式各样新颖的分布式系统,甚至到了滥用的程度.NoSQL运动也将CAP理论当作对抗传统关系型数据库的依据. CAP理论主张任何基于网 ...

  2. android 之 surfaceView和普通View的重绘使用

    !自定义控件式需要实现AttrbuteSet   可在xml文件中配置略过创建该对象 普通的View只能在主线程中绘制界面,适用于简单的被动绘制 SurfaceView则可以在新线程中绘制界面,不会阻 ...

  3. Android studio配置Git

    Android studio配置Git 1.下载window 版git并安装:下载地址 2.Android Studio设置git插件:File->Setting->Version Con ...

  4. js类型转换的坑

    JS的灵活 说好听是说JS灵活, 说不好听就是JS的坑太多, JS类型转换就是一个大坑, JS的类型包括了原始类型的[null, undefined, String ,Number, Boolean] ...

  5. linux下mysql基本命令

    1, 创建mysqld数据库的管理用户:             要把root用户设置为管理员,我们应该运行下面的命令:    # mysqladmin -u root password 一般情况下, ...

  6. js调用浏览器打印

    <input type="button" id="print" onclick="printdiv('list');" value=& ...

  7. OPRNGL之渲染过程大概梳理

    将OPENGL绘制对象的过程类比为摄像机拍摄物体的过程 视图变换:对摄像机位置与朝向(还有朝上朝下)进行定义 模型变换:对物体的位置,旋转,缩放进行定义 以上是对摄像机和物体的两个基础定义 投影:对摄 ...

  8. asp.net MVC中获取当前URL/Controller/Action

    一.获取URL(ASP.NET通用): [1]获取完整url(协议名+域名+虚拟目录名+文件名+参数) string url=Request.Url.ToString(); [2]获取虚拟目录名+页面 ...

  9. SQLite Learning、SQL Query Optimization In Multiple Rule

    catalog . SQLite简介 . Sqlite安装 . SQLite Programing . SQLite statements 1. SQLite简介 SQLite是一款轻型的数据库,是遵 ...

  10. Zabbix邮件报警-->Script

    Version:3.0.1 邮件报警有两种media 1.Email zabbix发送报警邮件到指定smtp服务器(使用系统自带的sendmail,发送邮箱是zabbix服务器的本地邮箱账号) 再由s ...