算法与数据结构(二) 基于链表的队列
来源:互联网 发布:网络是把双刃剑章郑 编辑:程序博客网 时间:2024/05/01 03:21
基于链表的队列
- 一个数据的集合如果以链表来保存,那么它的容量就是无限的。
- 实现的过程中,需要注意链表为空的情况下,需要对头引用和尾引用做特殊处理。
实现代码
/** * Created by 18855127160 on 2016/4/27. */import java.util.Iterator;/** * 基于链表的队列。 * Created by zangdonglai on 4/26/16. */public class MyLinkedQueue<T> implements Iterable{ Node firstNode; // 链表的头结点 Node lastNode; //链表的尾结点 int N=0; //链表的长度 /** * 链表类,一个泛型变量item 保存数据, * Node 指向下一个结点 */ class Node{ public T item; public Node next; } /** * Queue 遍历器 */ private class QueueIterator implements Iterator{ Node currentNode =firstNode; @Override public boolean hasNext() { return currentNode!=null; } @Override public Object next() { T item=currentNode.item; currentNode=currentNode.next; return item; } @Override public void remove() { } } /** * 入队操作,需要注意链表为空的情况。 * 以下两种方式都可实现入队。 * 方式一是, 先创建一个游离的结点(包装入队数据),在把这个节点连在原来的链表上, 在把尾结点指向 新添加的结点。 * 方式二是, 新建一个引用指向老的尾结点, 尾结点指向一个新建的游离的结点(包装入队数据)。再把老尾结点和尾结点连接起来。 */ public void enQueue(T t){/* Node node=new Node(); node.item=t; node.next=null; if(isEmpty()){ firstNode=node; lastNode=node; }else { lastNode.next=node; lastNode=node; }*/ Node oldLastNode =lastNode; lastNode =new Node(); lastNode.item =t; lastNode.next= null; if(isEmpty()) firstNode=lastNode; else oldLastNode.next=lastNode; N++; } /** * 出队操作,注意队列为空时,要对尾结点进行赋空。 * @return */ public T pop(){ T item=firstNode.item; firstNode=firstNode.next; if(isEmpty()) lastNode=null; N--; return item; } //队列的大小 public int size(){ return N;} public boolean isEmpty(){ return N==0;} @Override public Iterator iterator() { return new QueueIterator(); } public static void main(String args[]){ MyLinkedQueue<String> lInkedQueue=new MyLinkedQueue<>(); lInkedQueue.enQueue("A"); lInkedQueue.enQueue("A"); lInkedQueue.enQueue("A"); lInkedQueue.enQueue("A"); lInkedQueue.enQueue("B"); lInkedQueue.enQueue("C"); System.out.println(lInkedQueue.pop()); System.out.println(lInkedQueue.pop()); System.out.println(lInkedQueue.pop()); System.out.println(lInkedQueue.pop()); System.out.println(lInkedQueue.pop()); System.out.println(lInkedQueue.pop()); }}
1 0
- 算法与数据结构(二) 基于链表的队列
- 数据结构与算法分析(二) —— 关于表、栈和队列的深入探讨
- 数据结构与算法javascript描述(二) 优先队列实例
- 数据结构与算法Javascript描述(二)队列
- 数据结构与算法(15)——队列习题二
- JavaScript 版数据结构与算法(二)队列
- 数据结构与算法JavaScript (二) :队列
- 基于 Python 的数据结构与算法分析学习记录(6-8)—— 基于二叉堆的优先队列
- 【数据结构与算法】队列
- 数据结构与算法《队列》
- 数据结构与算法-队列
- 数据结构与算法--队列
- 数据结构与算法---队列
- 数据结构与算法-队列
- 算法与数据结构【二】简单链表的实现
- 数据结构的学习之路(二)-- 栈与队列
- 数据结构与算法-堆、基于堆实现的优先队列、堆排序
- 数据结构与算法(二)线性表
- Activity 启动模式 图解
- java中关于protected的一些误解
- 传感器--光照和加速度传感器
- 全局变量、局部变量、静态全局变量、静态局部变量的区别
- 正则表达式详解
- 算法与数据结构(二) 基于链表的队列
- 推荐有关书和有关工具——不断完善
- 学习地址
- Mantis的缺陷严重性分类
- POJ2533 Longest Ordered Subsequence
- 数据类型图和基本数据类型图
- python异常处理
- iOS 绘制不规则图形,并且添加点击事件
- 这几天学习使用awk遇到个问题