java实现链式队列
java实现链式队列。。。比较简单
package datastruct;
public class QueueLink implements Queue {
	// 定义一个节点内部类
	class Node {
		private Object data;
		private Node next;
		public Node(Object obj) {
			this.data = obj;
		}
		public Node() {
		}
	}
	// 定义链式队列的一些属性
	private Node head; // 头指针(引用)
	private Node rear; // 尾指针(引用)
	private int length; // 队列的长度,开始为1
	private Node temp; // 临时指针(引用)
	// 初始化队列,空头指针
	public QueueLink() {
		head = new Node();
		rear = head;
		length = 1;
	}
	// 初始化队列,有数据头指针
	public QueueLink(Object obj) {
		head = new Node(obj);
		rear = head;
		length = 1;
	}
	public boolean clear() {
		// TODO Auto-generated method stub
		if(this.length==1){
			return true;
		}else if(length==2){
			head.next=null;
			//没有引用的节点java会自动回收内存
		}else {
			while(head.next.next!=null){
				head.next=head.next.next;
			}
			head.next=null;
			return true;
		}
		return false;
	}
	// 判空
	public boolean isEmpty() {
		// TODO Auto-generated method stub
		if (this.length() == 1) {
			return true;
		} else {
			return false;
		}
	}
	// 获得队列的长度
	public int length() {
		// TODO Auto-generated method stub
		return this.length;
	}
	// 添加一个节点
	public void offer(Object x) {
		this.temp = new Node(x);
		// 队列使用尾插法
		rear.next = temp;
		rear = temp;
		this.length++;
		// TODO Auto-generated method stub
	}
	// 查看第一个节点
	public Node peek() {
		// TODO Auto-generated method stub
		if (length == 1) {
			temp=null;
		} else {
			temp= head.next;
		}
		return temp;
	}
    //删除第一个节点
	public Node poll() {
		// TODO Auto-generated method stub
		if(length==1){
			//无法删除
			temp=null;
		}else
		if(length==2){
			this.temp= head.next;
			//置空下一个节点就可以了
			head.next=null;
			length--;
		}else{
			this.temp= head.next;
			this.head.next=this.head.next.next;
			length--;
		}
		return temp;
	}
	//test
	public static void main(String[] args) {
		QueueLink linkQueue = new QueueLink();
        System.out.println("队列是否为空:"+linkQueue.isEmpty());
        System.out.println("连续入队-------------------------------");
        for(int i=0;i<5;i++){
            linkQueue.offer((char)(97+i));
        }
        System.out.println("队列长度为:"+linkQueue.length());
        System.out.println("队首元素为:"+linkQueue.peek().data);
        //出队
        System.out.println("连续出队-------------------------------");
        for(int i=0;i<4;i++){
            Object data=linkQueue.poll();
        }
        System.out.println("队列长度为:"+linkQueue.length());
	}
}
结果为:
队列是否为空:true
连续入队-------------------------------
队列长度为:6
队首元素为:a
连续出队-------------------------------
队列长度为:2
java实现链式队列的更多相关文章
- 数据结构Java实现07----队列:顺序队列&顺序循环队列、链式队列、顺序优先队列
		
一.队列的概念: 队列(简称作队,Queue)也是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置插入和删除,而队列只允许在其一端进行插入操作在其 ...
 - Java实现链式存储的二叉查找树(递归方法)
		
二叉查找树的定义: 二叉查找树或者是一颗空树,或者是一颗具有以下特性的非空二叉树: 1. 若左子树非空,则左子树上所有节点关键字值均小于根节点的关键字: 2. 若右子树非空,则右子树上所有节点关键字值 ...
 - Java实现链式存储的二叉树
		
二叉树的定义: 二叉树(BinaryTree)是n(n≥0)个结点的有限集,它或者是空集(n=0),或者由一个根结点及两棵互不相交的.分别称作这个根的左子树和右子树的二叉树组成. 二叉树的遍历方式主要 ...
 - 数据结构----队列:顺序队列&顺序循环队列、链式队列、顺序优先队列
		
一.队列的概念: 队列(简称作队,Queue)也是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置插入和删除,而队列只允许在其一端进行插入操作在其 ...
 - C ~ 链式队列与循环队列
		
此处的链式与循环队列可以应用于BFS和树的层序遍历.下面是对其结构和基本操作的程序描述. 1.循环队列 解决循环队列的队空和队满的方法: [1].增加一个参数count,用来记录数组中当前 ...
 - C语言链表全操作(增,删,改,查,逆序,递增排序,递减排序,链式队列,链式栈)
		
一,数据结构——链表全操作: 链表形式: 其中,每个节点(Node)是一个结构体,这个结构体包含数据域,指针域,数据域用来存放数据,指针域则用来指向下一个节点: 特别说明:对于单链表,每个节点(Nod ...
 - 循环队列和链式队列(C++实现)
		
循环队列: 1.循环队列中判断队空的方法是判断front==rear,队满的方法是判断front=(rear+1)%maxSize.(我曾经想过为什么不用一个length表示队长,当length==m ...
 - java 实现简单链式队列
		
package com.my; /** * 链式队列 * @author wanjn * */ public class LinkedQueue { private Node head; privat ...
 - 利用链式队列(带头节点)解决银行业务队列简单模拟问题(c++)-- 数据结构
		
题目: 7-1 银行业务队列简单模拟 (30 分) 设某银行有A.B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍 —— 即当A窗口每处理完2个顾客时,B窗口处理完1个顾客 ...
 
随机推荐
- laravel 中使用定时任务
			
Laravel5.3 Artisan Console 文档地址 http://laravelacademy.org/post/6228.html 1.在服务器上查看定时任务有哪些crontab -e ...
 - 【转】 Pro Android学习笔记(九一):了解Handler(5):组件生命
			
文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingflying/ 对于activity,消息是在OnCrea ...
 - 根据MAC地址前6位知道网络设备是哪家公司生产的
			
http://standards-oui.ieee.org/oui/oui.txt https://files.cnblogs.com/files/itfat/oui.rar
 - python开发进程:共享数据&进程池
			
一,共享数据 展望未来,基于消息传递的并发编程是大势所趋 即便是使用线程,推荐做法也是将程序设计为大量独立的线程集合 通过消息队列交换数据.这样极大地减少了对使用锁定和其他同步手段的需求, 还可以扩展 ...
 - ubuntu16.04 双网卡绑定
			
ubuntu 16.04 双网卡绑定仅仅需要配置/etc/network/interfaces 添加标记内容即可 apt-get install ifenslave 默认已经安装
 - C#带百分比的进度条
			
功能需求: 如果程序中会执行一个耗时的计算过程,我想在用户点击按钮后,弹出一个进度条窗口,显示正在执行的进度(最好能带有百分比),执行完成后,进度条窗口关闭,回到主程序窗口. 在关闭子窗口之前父窗体不 ...
 - coprime Sequence
			
Do you know what is called ``Coprime Sequence''? That is a sequence consists of nn positive integers ...
 - 17-EasyNetQ:非泛型的发布&订阅扩展方法
			
自从EasyNetQ第一个版本开始,它就可以发布/订阅特定类型的消息. bus.Subscribe<MyMessage>("subscriptionId", x =&g ...
 - PHP数据结构之二 线性表中的顺序表的PHP实现
			
线性表 (一)基本特点:最基本.最简单.最常用的一种数据结构 在这种结构中: 1.存在一个唯一的被称为“第一个”的数据元素: 2.存在一个唯一的被称为“最后一个”的数据元素: 3.除第一个元素外,每个 ...
 - 一个页面中内嵌页面 iframe元素
			
iframe.html: <!DOCTYPE html><html lang="en"><head> <meta charset=&quo ...