基础数据结构02:队列
来源:互联网 发布:淘宝卖霉菌龟头炎药品 编辑:程序博客网 时间:2024/06/05 15:26
介绍
队列是一种先进先出的数据结构。类似于一截水从一端流向另一端的水管,先进入水管的水最先从另一端出来。
Java实现
下面使用链表来实现先进先出的数据结构。
package com.algs.base;import java.util.Iterator;import java.util.NoSuchElementException;public class LinkQueue<Item> implements Iterable<Item> { private Node first; // 指向最早添加的节点的链接 private Node last; // 指向最近添加的节点的链接 private int N; // 队列中的元素总数量 // 队列中的一个元素 private class Node{ Item item; Node next; } public boolean isEmpty(){return N==0;} public int size(){return N;} // 向队列中添加一个元素 public void enqueue(Item item){ // 向链表的尾部添加一个元素 Node oldLast = last; last = new Node(); last.item = item; last.next = null; //只有一个节点时,首节点和尾节点相等 if(isEmpty()) first = last; else oldLast.next = last; N++; } //从队列中删除一个元素(先进先出) public Item dequeue(){ if(first==null){ System.out.println("队列中没有元素"); return null; } // 从表头删除元素 Item item = first.item; first = first.next; if(isEmpty()) last = null; N--; return item; } @Override public Iterator<Item> iterator() { return new ListIterator(); } //链表遍历实现 private class ListIterator implements Iterator<Item> { private Node current = first; public boolean hasNext() { return current != null; } public void remove() { throw new UnsupportedOperationException(); } public Item next() { if (!hasNext()) throw new NoSuchElementException(); Item item = current.item; current = current.next; return item; } } public static void main(String[] args) { LinkQueue<String> queue = new LinkQueue<String>(); queue.enqueue("One"); queue.enqueue("two"); queue.enqueue("three"); for(String node:queue){ //打印结果为:One->two->three-> System.out.print(node+"->"); } //删除一个元素 System.out.println(""); //打印结果为:node:One System.out.println("node:"+queue.dequeue()); for(String node1:queue){ //打印结果为:two->three-> System.out.print(node1+"->"); } }}
说明
对于队列的实现,除了可以使用链表,还可以使用数组来实现。但是在Java中的数组,初始化时必须指定数组的大小,所以当使用数组来实现队列时,需要动态调整队列的大小。
当数组空间不够时,需要扩展空间。当队列中的元素只有空间的四分之一时,此时可以把数组的长度减半。
代码如下:
// 以数组来实现队列或栈时需动态调整数组的大小 private void resize(int max){ //将队列中的元素移动到新数组中 Item[] temp = (Item[])new Object[max]; for(int i=0;i<N;i++){ temp[i] = queue[i]; //queue为存放队列元素的数组 } queue = temp; }
上一篇:基础数据结构01:链表
下一篇:基础数据结构03:栈
阅读全文
0 0
- 基础数据结构02:队列
- 数据结构基础-队列(二)
- 数据结构基础(3)-->队列
- 基础数据结构之队列
- 【数据结构基础】循环队列
- 数据结构基础3:队列
- 数据结构基础之队列
- 数据结构基础之队列
- C 基础数据结构---队列 ADT
- 基础数据结构 链表、栈、队列
- 第十三章 数据结构基础--队列
- 基础数据结构--背包,队列,栈
- 数据结构基础:栈和队列
- 数据结构之基础—队列
- 数据结构之队列基础练习
- 数据结构基础温故-3.队列
- 【数据结构】栈与队列基础
- 数据结构02--队列
- MMO小地图实现方式
- 抽象类和接口
- HDOJ 2037 今年暑假不AC(贪心算法)
- Unity资源制作要求
- 【一】web自动化测试<selenium2+python>环境搭建+脚本测试执行
- 基础数据结构02:队列
- 算法优化:rgb向yuv的转化最优算法,快得让你吃惊!
- 占位-安装虚拟机
- MongoDB Replica Sets(复制集)部署
- 修改默认滚动条样式
- 支持全球主流中英文语音平台,瑞芯微AI语音助手方案发布!
- 占位-2017年6月30日23:58:40
- 资源学习网站,不断更新
- CSRF漏洞笔记