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实现链式队列的更多相关文章

  1. 数据结构Java实现07----队列:顺序队列&顺序循环队列、链式队列、顺序优先队列

    一.队列的概念: 队列(简称作队,Queue)也是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置插入和删除,而队列只允许在其一端进行插入操作在其 ...

  2. Java实现链式存储的二叉查找树(递归方法)

    二叉查找树的定义: 二叉查找树或者是一颗空树,或者是一颗具有以下特性的非空二叉树: 1. 若左子树非空,则左子树上所有节点关键字值均小于根节点的关键字: 2. 若右子树非空,则右子树上所有节点关键字值 ...

  3. Java实现链式存储的二叉树

    二叉树的定义: 二叉树(BinaryTree)是n(n≥0)个结点的有限集,它或者是空集(n=0),或者由一个根结点及两棵互不相交的.分别称作这个根的左子树和右子树的二叉树组成. 二叉树的遍历方式主要 ...

  4. 数据结构----队列:顺序队列&顺序循环队列、链式队列、顺序优先队列

    一.队列的概念: 队列(简称作队,Queue)也是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置插入和删除,而队列只允许在其一端进行插入操作在其 ...

  5. C ~ 链式队列与循环队列

          此处的链式与循环队列可以应用于BFS和树的层序遍历.下面是对其结构和基本操作的程序描述. 1.循环队列 解决循环队列的队空和队满的方法: [1].增加一个参数count,用来记录数组中当前 ...

  6. C语言链表全操作(增,删,改,查,逆序,递增排序,递减排序,链式队列,链式栈)

    一,数据结构——链表全操作: 链表形式: 其中,每个节点(Node)是一个结构体,这个结构体包含数据域,指针域,数据域用来存放数据,指针域则用来指向下一个节点: 特别说明:对于单链表,每个节点(Nod ...

  7. 循环队列和链式队列(C++实现)

    循环队列: 1.循环队列中判断队空的方法是判断front==rear,队满的方法是判断front=(rear+1)%maxSize.(我曾经想过为什么不用一个length表示队长,当length==m ...

  8. java 实现简单链式队列

    package com.my; /** * 链式队列 * @author wanjn * */ public class LinkedQueue { private Node head; privat ...

  9. 利用链式队列(带头节点)解决银行业务队列简单模拟问题(c++)-- 数据结构

    题目: 7-1 银行业务队列简单模拟 (30 分)   设某银行有A.B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍 —— 即当A窗口每处理完2个顾客时,B窗口处理完1个顾客 ...

随机推荐

  1. 2、通过HBase API进行开发

    一.将HBase的jar包及hbase-site.xml添加到IDE 1.到安装HBase集群的任意一台机器上找到HBase的安装目录,到lib目录下下载HBase需要的jar包,然后再到conf目录 ...

  2. (转)Oracle 包(Package)

    本文转载自:http://www.cnblogs.com/lovemoon714/archive/2012/02/29/2373695.html 1.为什么要使用包?       答:在一个大型项目中 ...

  3. 《PYTHON学习手册》(《Learing Python》--Mark Lutz)书摘

    1. Python是为了让脚本的质量等级再提升几个级别. 2. <learning Python>和<programming Python>反映了作者培训内容的两部分:核心语言 ...

  4. Java中的intern变量的讲解

    一般我们变成很少使用到 intern这个方法,今天我就来解释一下这个方法是干什么的,做什么用的 首先请大家看一个例子: public static void main(String[] args) t ...

  5. Linux学习笔记 -- 硬链接与软连接(转)

    原文地址: http://www.cnblogs.com/itech/archive/2009/04/10/1433052.html Linux链接概念 Linux链接分两种,一种被称为硬链接(Har ...

  6. GitHub in vs2010、vs2013

    GitHub在使用上大致和其他源代码管理工具一样,个人源代码管理和分享一大利器,而且vs2010和vs2013配置也没有任何区别,简单做了一下图文配置说明 一.注册github 1.github.co ...

  7. java成神之——java常识

    java常识 简单DOS命令 java基础名词 java编译和运行流程 Eclipse常用快捷键 Eclipse相关操作 java基本数据类型 java基本数据类型转换 java常用运算符 java流 ...

  8. 6.solr学习速成之multicore查询

    查询关联多个core 再新建一个core 向每个core添加索引,修改 final static String SOLR_URL = "http://localhost:8080/solr/ ...

  9. 使用JAVA实现模拟登陆并发送新浪微博(非调用新浪API)

    没有调用新浪的API,在程序中加入自己的帐号和密码就能发送微博,代码完全在后台运行,不用打开浏览器. 用了HtmlUnit这个库来模拟登录还有发送微博. 先上效果图: 这个是刚登陆上获取第一页的信息. ...

  10. centos7 qt之程序编译 cant start process “cmake”

    之所以出现这个问题,是由于qt内置的cmake与系统已安装的cmake命令冲突.解决的方法是,在build里将cmake命令加上绝对路径. 问题得以解决.