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. laravel 中使用定时任务

    Laravel5.3 Artisan Console 文档地址 http://laravelacademy.org/post/6228.html 1.在服务器上查看定时任务有哪些crontab -e ...

  2. 【转】 Pro Android学习笔记(九一):了解Handler(5):组件生命

    文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingflying/ 对于activity,消息是在OnCrea ...

  3. 根据MAC地址前6位知道网络设备是哪家公司生产的

    http://standards-oui.ieee.org/oui/oui.txt https://files.cnblogs.com/files/itfat/oui.rar

  4. python开发进程:共享数据&进程池

    一,共享数据 展望未来,基于消息传递的并发编程是大势所趋 即便是使用线程,推荐做法也是将程序设计为大量独立的线程集合 通过消息队列交换数据.这样极大地减少了对使用锁定和其他同步手段的需求, 还可以扩展 ...

  5. ubuntu16.04 双网卡绑定

    ubuntu 16.04 双网卡绑定仅仅需要配置/etc/network/interfaces 添加标记内容即可 apt-get install ifenslave 默认已经安装

  6. C#带百分比的进度条

    功能需求: 如果程序中会执行一个耗时的计算过程,我想在用户点击按钮后,弹出一个进度条窗口,显示正在执行的进度(最好能带有百分比),执行完成后,进度条窗口关闭,回到主程序窗口. 在关闭子窗口之前父窗体不 ...

  7. coprime Sequence

    Do you know what is called ``Coprime Sequence''? That is a sequence consists of nn positive integers ...

  8. 17-EasyNetQ:非泛型的发布&订阅扩展方法

    自从EasyNetQ第一个版本开始,它就可以发布/订阅特定类型的消息. bus.Subscribe<MyMessage>("subscriptionId", x =&g ...

  9. PHP数据结构之二 线性表中的顺序表的PHP实现

    线性表 (一)基本特点:最基本.最简单.最常用的一种数据结构 在这种结构中: 1.存在一个唯一的被称为“第一个”的数据元素: 2.存在一个唯一的被称为“最后一个”的数据元素: 3.除第一个元素外,每个 ...

  10. 一个页面中内嵌页面 iframe元素

    iframe.html: <!DOCTYPE html><html lang="en"><head> <meta charset=&quo ...