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 ...