`

java 实现数据结构之队列

 
阅读更多
队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,只允许在表的后端(rear)进行插入操作。
1.队列的顺序存储结构及实现
Java代码 收藏代码
  1. publicclassSequenceQueue<T>
  2. {
  3. privateintDEFAULT_SIZE=10;
  4. //保存数组的长度。
  5. privateintcapacity;
  6. //定义一个数组用于保存顺序队列的元素
  7. privateObject[]elementData;
  8. //保存顺序队列中元素的当前个数
  9. privateintfront=0;
  10. privateintrear=0;
  11. //以默认数组长度创建空顺序队列
  12. publicSequenceQueue()
  13. {
  14. capacity=DEFAULT_SIZE;
  15. elementData=newObject[capacity];
  16. }
  17. //以一个初始化元素来创建顺序队列
  18. publicSequenceQueue(Telement)
  19. {
  20. this();
  21. elementData[0]=element;
  22. rear++;
  23. }
  24. /**
  25. *以指定长度的数组来创建顺序队列
  26. *@paramelement指定顺序队列中第一个元素
  27. *@paraminitSize指定顺序队列底层数组的长度
  28. */
  29. publicSequenceQueue(Telement,intinitSize)
  30. {
  31. this.capacity=initSize;
  32. elementData=newObject[capacity];
  33. elementData[0]=element;
  34. rear++;
  35. }
  36. //获取顺序队列的大小
  37. publicintlength()
  38. {
  39. returnrear-front;
  40. }
  41. //插入队列
  42. publicvoidadd(Telement)
  43. {
  44. if(rear>capacity-1)
  45. {
  46. thrownewIndexOutOfBoundsException("队列已满的异常");
  47. }
  48. elementData[rear++]=element;
  49. }
  50. //移除队列
  51. publicTremove()
  52. {
  53. if(empty())
  54. {
  55. thrownewIndexOutOfBoundsException("空队列异常");
  56. }
  57. //保留队列的rear端的元素的值
  58. ToldValue=(T)elementData[front];
  59. //释放队列的rear端的元素
  60. elementData[front++]=null;
  61. returnoldValue;
  62. }
  63. //返回队列顶元素,但不删除队列顶元素
  64. publicTelement()
  65. {
  66. if(empty())
  67. {
  68. thrownewIndexOutOfBoundsException("空队列异常");
  69. }
  70. return(T)elementData[front];
  71. }
  72. //判断顺序队列是否为空队列
  73. publicbooleanempty()
  74. {
  75. returnrear==front;
  76. }
  77. //清空顺序队列
  78. publicvoidclear()
  79. {
  80. //将底层数组所有元素赋为null
  81. Arrays.fill(elementData,null);
  82. front=0;
  83. rear=0;
  84. }
  85. publicStringtoString()
  86. {
  87. if(empty())
  88. {
  89. return"[]";
  90. }
  91. else
  92. {
  93. StringBuildersb=newStringBuilder("[");
  94. for(inti=front;i<rear;i++)
  95. {
  96. sb.append(elementData[i].toString()+",");
  97. }
  98. intlen=sb.length();
  99. returnsb.delete(len-2,len).append("]").toString();
  100. }
  101. }
  102. }

2.循环队列(顺序结构存储实现)

Java代码 收藏代码
  1. importjava.util.Arrays;
  2. publicclassLoopQueue<T>
  3. {
  4. privateintDEFAULT_SIZE=10;
  5. //保存数组的长度。
  6. privateintcapacity;
  7. //定义一个数组用于保存循环队列的元素
  8. privateObject[]elementData;
  9. //保存循环队列中元素的当前个数
  10. privateintfront=0;
  11. privateintrear=0;
  12. //以默认数组长度创建空循环队列
  13. publicLoopQueue()
  14. {
  15. capacity=DEFAULT_SIZE;
  16. elementData=newObject[capacity];
  17. }
  18. //以一个初始化元素来创建循环队列
  19. publicLoopQueue(Telement)
  20. {
  21. this();
  22. elementData[0]=element;
  23. rear++;
  24. }
  25. /**
  26. *以指定长度的数组来创建循环队列
  27. *@paramelement指定循环队列中第一个元素
  28. *@paraminitSize指定循环队列底层数组的长度
  29. */
  30. publicLoopQueue(Telement,intinitSize)
  31. {
  32. this.capacity=initSize;
  33. elementData=newObject[capacity];
  34. elementData[0]=element;
  35. rear++;
  36. }
  37. //获取循环队列的大小
  38. publicintlength()
  39. {
  40. if(empty())
  41. {
  42. return0;
  43. }
  44. returnrear>front?rear-front
  45. :capacity-(front-rear);
  46. }
  47. //插入队列
  48. publicvoidadd(Telement)
  49. {
  50. if(rear==front
  51. &&elementData[front]!=null)
  52. {
  53. thrownewIndexOutOfBoundsException("队列已满的异常");
  54. }
  55. elementData[rear++]=element;
  56. //如果rear已经到头,那就转头
  57. rear=rear==capacity?0:rear;
  58. }
  59. //移除队列
  60. publicTremove()
  61. {
  62. if(empty())
  63. {
  64. thrownewIndexOutOfBoundsException("空队列异常");
  65. }
  66. //保留队列的rear端的元素的值
  67. ToldValue=(T)elementData[front];
  68. //释放队列的rear端的元素
  69. elementData[front++]=null;
  70. //如果front已经到头,那就转头
  71. front=front==capacity?0:front;
  72. returnoldValue;
  73. }
  74. //返回队列顶元素,但不删除队列顶元素
  75. publicTelement()
  76. {
  77. if(empty())
  78. {
  79. thrownewIndexOutOfBoundsException("空队列异常");
  80. }
  81. return(T)elementData[front];
  82. }
  83. //判断循环队列是否为空队列
  84. publicbooleanempty()
  85. {
  86. //rear==front且rear处的元素为null
  87. returnrear==front
  88. &&elementData[rear]==null;
  89. }
  90. //清空循环队列
  91. publicvoidclear()
  92. {
  93. //将底层数组所有元素赋为null
  94. Arrays.fill(elementData,null);
  95. front=0;
  96. rear=0;
  97. }
  98. publicStringtoString()
  99. {
  100. if(empty())
  101. {
  102. return"[]";
  103. }
  104. else
  105. {
  106. //如果front<rear,有效元素就是front到rear之间的元素
  107. if(front<rear)
  108. {
  109. StringBuildersb=newStringBuilder("[");
  110. for(inti=front;i<rear;i++)
  111. {
  112. sb.append(elementData[i].toString()+",");
  113. }
  114. intlen=sb.length();
  115. returnsb.delete(len-2,len).append("]").toString();
  116. }
  117. //如果front>=rear,有效元素为front->capacity之间、0->front之间的
  118. else
  119. {
  120. StringBuildersb=newStringBuilder("[");
  121. for(inti=front;i<capacity;i++)
  122. {
  123. sb.append(elementData[i].toString()+",");
  124. }
  125. for(inti=0;i<rear;i++)
  126. {
  127. sb.append(elementData[i].toString()+",");
  128. }
  129. intlen=sb.length();
  130. returnsb.delete(len-2,len).append("]").toString();
  131. }
  132. }
  133. }
  134. }

3.队列的链式存储结构及实现
Java代码 收藏代码
  1. publicclassLinkQueue<T>
  2. {
  3. //定义一个内部类Node,Node实例代表链队列的节点。
  4. privateclassNode
  5. {
  6. //保存节点的数据
  7. privateTdata;
  8. //指向下个节点的引用
  9. privateNodenext;
  10. //无参数的构造器
  11. publicNode()
  12. {
  13. }
  14. //初始化全部属性的构造器
  15. publicNode(Tdata,Nodenext)
  16. {
  17. this.data=data;
  18. this.next=next;
  19. }
  20. }
  21. //保存该链队列的头节点
  22. privateNodefront;
  23. //保存该链队列的尾节点
  24. privateNoderear;
  25. //保存该链队列中已包含的节点数
  26. privateintsize;
  27. //创建空链队列
  28. publicLinkQueue()
  29. {
  30. //空链队列,front和rear都是null
  31. front=null;
  32. rear=null;
  33. }
  34. //以指定数据元素来创建链队列,该链队列只有一个元素
  35. publicLinkQueue(Telement)
  36. {
  37. front=newNode(element,null);
  38. //只有一个节点,front、rear都指向该节点
  39. rear=front;
  40. size++;
  41. }
  42. //返回链队列的长度
  43. publicintlength()
  44. {
  45. returnsize;
  46. }
  47. //将新元素加入队列
  48. publicvoidadd(Telement)
  49. {
  50. //如果该链队列还是空链队列
  51. if(front==null)
  52. {
  53. front=newNode(element,null);
  54. //只有一个节点,front、rear都指向该节点
  55. rear=front;
  56. }
  57. else
  58. {
  59. //创建新节点
  60. NodenewNode=newNode(element,null);
  61. //让尾节点的next指向新增的节点
  62. rear.next=newNode;
  63. //以新节点作为新的尾节点
  64. rear=newNode;
  65. }
  66. size++;
  67. }
  68. //删除队列front端的元素
  69. publicTremove()
  70. {
  71. NodeoldFront=front;
  72. front=front.next;
  73. oldFront.next=null;
  74. size--;
  75. returnoldFront.data;
  76. }
  77. //访问链式队列中最后一个元素
  78. publicTelement()
  79. {
  80. returnrear.data;
  81. }
  82. //判断链式队列是否为空队列
  83. publicbooleanempty()
  84. {
  85. returnsize==0;
  86. }
  87. //清空链队列
  88. publicvoidclear()
  89. {
  90. //将front、rear两个节点赋为null
  91. front=null;
  92. rear=null;
  93. size=0;
  94. }
  95. publicStringtoString()
  96. {
  97. //链队列为空链队列时
  98. if(empty())
  99. {
  100. return"[]";
  101. }
  102. else
  103. {
  104. StringBuildersb=newStringBuilder("[");
  105. for(Nodecurrent=front;current!=null
  106. ;current=current.next)
  107. {
  108. sb.append(current.data.toString()+",");
  109. }
  110. intlen=sb.length();
  111. returnsb.delete(len-2,len).append("]").toString();
  112. }
  113. }
  114. }
分享到:
评论

相关推荐

    Java队列实现,数据结构

    在这个Java队列实现的数据结构作业练习中,我们将会探讨如何使用Java来创建一个简单的队列,并分析`Queue.java`和`Node.java`这两个文件可能包含的内容。 首先,`Queue.java`很可能是实现队列接口或类的文件。在...

    用Java实现数据结构中的队列

    在计算机科学中,数据结构是组织、存储和处理数据的方式,...通过理解这些基本概念和代码示例,你可以轻松地在Java项目中实现和使用队列数据结构。记住,选择哪种实现取决于具体的需求,如性能、内存使用和功能需求。

    java实现数据结构

    下面将详细介绍Java中实现链表、栈、队列、优先级队列以及哈希表这些基本数据结构的方法。 首先,我们来看链表。链表是一种线性数据结构,其中的元素不连续存储,而是通过指针连接。Java中的`LinkedList`类实现了`...

    Java语言编写的数据结构-队列实现

    Java作为一种广泛使用的编程语言,提供了丰富的库支持来实现各种数据结构。在这个主题中,我们将深入探讨Java中队列的实现,包括顺序队列(SqQueueCycle)和链队列(LinkQueue)。 1. **队列的基本概念** 队列是一...

    数据结构:链队列

    链队列,顾名思义,是基于链表实现的队列数据结构。队列是一种遵循“先进先出”(FIFO,First In First Out)原则的数据结构,类似于现实生活中的排队等待。在链队列中,元素按照加入的顺序排列,第一个加入的元素被...

    java队列实现(顺序队列、链式队列、循环队列)

    Java中的队列是一种数据结构,它遵循先进先出(FIFO)原则,即最先插入的元素将是最先被删除的。在Java中,队列的实现主要有三种:顺序队列、链式队列和循环队列。下面我们将详细探讨这三种队列的实现方式。 1. **...

    常用数据结构(堆栈,队列,列表)JAVA代码

    在这个主题中,我们将深入探讨Java实现的三种基本数据结构:堆栈(Stack)、队列(Queue)和列表(List)。这些概念是计算机科学的核心部分,对理解和解决复杂问题至关重要。 1. **堆栈(Stack)**: - 堆栈是一种...

    数据结构JAVA实现

    在这个名为“数据结构JAVA实现”的压缩包中,我们可以看到作者提供了三种重要的数据结构——链表、有序二叉树和队列的Java代码实现。 首先,让我们详细探讨链表。链表是一种线性数据结构,与数组不同,它不连续存储...

    Java常见数据结构面试题(带答案)

    "Java常见数据结构面试题(带答案)" 以下是对Java常见数据结构面试题的...本篇文章主要介绍了Java常见数据结构面试题,涵盖了栈、队列、链表、线性表、树、算法、数据结构等知识点,希望对广大的程序爱好者有所帮助。

    用数组实现的优先队列(JAVA)

    总之,`PriorityQ.java`文件可能是一个简单的数组实现优先队列的示例,通过分析这个文件,我们可以学习到如何利用数组数据结构实现优先队列,以及理解其核心的插入、删除和查找操作。同时,这也能帮助我们更好地掌握...

    java队列模拟实现

    Java队列模拟实现是一个典型的计算机科学中的数据结构应用,它主要涉及了Java编程语言和队列数据结构。在这个工程中,开发者已经创建了一个基于图形用户界面(GUI)的应用程序,用于演示和操作队列的各种功能。以下...

    java基础数据结构-队列

    ### Java基础数据结构—队列 #### 一、队列的概念与特性 队列是一种特殊类型的线性表,它的特点是先进先出(FIFO,First In First Out)。我们可以将其想象成现实生活中的排队情景,比如排队购买火车票时,最早...

    java-数据结构代码实现

    本资料包“java-数据结构代码实现”提供了使用Java语言实现数据结构的实例,旨在帮助开发者加深对数据结构的理解并提升编程技能。 1. **链表**:链表是一种动态数据结构,其元素在内存中不是顺序排列的。Java中的...

    数据结构——队列的实现

    3. 高级数据结构实现:如Java的`java.util.Queue`接口,提供了多种队列实现,如`ArrayDeque`(基于数组的双端队列)、`LinkedList`(链表实现)等。 队列的应用场景: 1. 打印机任务调度:新任务入队,完成的任务出...

    JAVA基本5种数据结构的实现。

    队列是一种先进先出(FIFO)的数据结构,`Queue.java`和`QueueApp.java`可能实现了这一概念。在Java中,可以使用`java.util.Queue`接口及其实现如`LinkedList`来创建队列。队列的主要操作包括添加元素(enqueue)、...

    Java数据结构之队列的简单定义与使用方法

    Java中实现队列的方法有多种,本文将详细介绍Java数据结构之队列的简单定义与使用方法。 一、队列的定义 队列是一种特殊的线性表,元素的添加和删除只能在队列的两端进行,即队头和队尾。队列的原则是先进先出,就...

    java多线程模拟队列实现排队叫号

    总的来说,通过Java多线程和队列数据结构,我们可以有效地模拟排队叫号系统。这种模拟有助于理解和实践并发编程,同时也为我们解决实际问题提供了思路。在这个过程中,我们学习了线程同步、队列操作以及如何在Java中...

    数据结构-从应用到实现 (java版)

    《计算机科学丛书·数据结构从应用到实现(Java版)》系统地介绍了数据结构以及数据结构与对象之间的联系。主要内容包括:算法效率的输入规模、阶和大O,数据结构的无序和有序列表,队列和栈基于数组和链表的设计实例...

    Java版本数据结构实验报告

    总的来说,"Java版本数据结构实验报告"是一个全面的学习资源,它涵盖了数据结构的基本理论和Java实现,旨在提升学生的算法思维能力和编程技巧。通过这一系列的实验,学生不仅能熟练掌握各种数据结构,还能学会如何...

    java数据结构实例

    "Java数据结构实例"这个主题,旨在通过具体的代码实例帮助初学者掌握数据结构的基本概念和使用方式,以此来提升编程思维和问题解决能力。在这个压缩包文件中,我们可以预期找到一些用Java实现的数据结构的源代码。 ...

Global site tag (gtag.js) - Google Analytics