Java实现链队
一、分析
队列是一种先进先出的线性表,它只允许在表的一端进行插入,而在另一端删除元素。允许插入的一端称为队尾,允许删除的一端称为队头。
链队是指采用链式存储结构实现的队列,它的基本操作如下:
1、初始化链队
2、销毁链队
3、清空链队
4、检测链队是否为空
5、返回链队的元素个数
6、返回链队头元素
7、向队尾插入元素
8、删除并返回队头元素
9、遍历链队
通常链队用单链表来表示,但一个链队还需要两个分别指示队头和队尾的指针才能唯一确定,和单链表一样,为了便于操作,附设一个头结点来指示队头。
在Java中,我们可以将链队中的结点视作一个类,类中拥有属性data、nextQueue和lastQueue分别表示数据、下一结点和队尾,链队的基本操作即为类的方法,每个结点就是一个对象。这样,初始化链队就是实例化头结点,销毁链队就是将头结点销毁,链队就会因为缺少引用而被销毁。
二、实现
1、定义类属性和构造函数
class InitQueue{
private int [] data = new int[1]; //定义成数组是为了可以用null表示空
private InitQueue nextQueue;
private InitQueue lastQueue;
public InitQueue() { //头结点的初始化
this.data = null;
this.nextQueue = null;
this.lastQueue = this;
}
public InitQueue(int data) { //普通结点的初始化
this.data[0] = data;
this.nextQueue = null;
this.lastQueue = null;
}
}
2、清空链队
public void clearQueue() {
this.nextQueue = null; //头节点的下一结点置空
this.lastQueue = this; //尾指针指向头结点
}
3、检测链队是否为空
public boolean queueEmpty() {
if(this.nextQueue == null) {
return true;
}
return false;
}
4、返回链队的元素个数
public int queueLength() {
InitQueue theQueue = this.nextQueue; //获取头结点的下一结点地址(链队的第一个结点)
int i = 0;
for (i = 0; theQueue != null; i++) { //循环读取并计数
theQueue = theQueue.nextQueue;
}
return i;
}
5、返回链队头元素
public int [] getHead() {
if(this.nextQueue == null) { //如果链队为空,返回空
return null;
}
return this.nextQueue.data;
}
6、向队尾插入元素
public void enQueue(int input) {
InitQueue initQueue = new InitQueue(input); //实例化新结点
this.lastQueue.nextQueue = initQueue; //插入队尾
this.lastQueue = initQueue; //尾指针指向队尾
}
7、删除并返回队头元素
public int [] deQueue() {
if (this.nextQueue == null) { //如果链队为空,返回null
return null;
}
int [] i = this.nextQueue.data; //获取队头元素数据
this.nextQueue = this.nextQueue.nextQueue; //头指针向后移动一位
if (this.nextQueue == null) { //如果链队变空
this.lastQueue = this; //尾指针重新指向头结点
}
return i;
}
8、遍历链队
public String queueTraverse() { //这里用输出元素值表示遍历
InitQueue theQueue = this.nextQueue;
String s = "";
while(theQueue != null) { //循环读取
s += theQueue.data[0] + "、";
theQueue = theQueue.nextQueue;
}
if(s.length() == 0) { //如果未读取到元素值,则返回空字符串
return s;
}
return s.substring(0,s.length() - 1); //除去最后的顿号后返回
}
三、小结
以上就是链队用Java的实现,由于只定义了整数的数组,因此只能操作整数数据,但链队的基本思想都已实现。
四、纠正
隔了一段时间又回来看代码,猛地发现这段代码其实还不够完善。(⊙x⊙;)
将链队的基本操作定义成了InitQueue类的方法,实例化结点时,会使每个结点都拥有这些方法,然而其实只有头结点需要这些方法,其他结点都不需要。
因此可以将InitQueue类定义成头节点类,而其他节点定义成头节点的内部类,这样,就只有头节点可以操作其他节点。
由于要修改的地方太多,这里我就不修改了,放在这里提醒自己。(就是因为懒……(><))
Java实现链队的更多相关文章
- Java实现链式存储的二叉查找树(递归方法)
二叉查找树的定义: 二叉查找树或者是一颗空树,或者是一颗具有以下特性的非空二叉树: 1. 若左子树非空,则左子树上所有节点关键字值均小于根节点的关键字: 2. 若右子树非空,则右子树上所有节点关键字值 ...
- Java实现链式存储的二叉树
二叉树的定义: 二叉树(BinaryTree)是n(n≥0)个结点的有限集,它或者是空集(n=0),或者由一个根结点及两棵互不相交的.分别称作这个根的左子树和右子树的二叉树组成. 二叉树的遍历方式主要 ...
- java实现链队列
java实现链队列的类代码: package linkqueue; public class LinkQueue { class Element { Object elem; Element next ...
- java实现链式队列
java实现链式队列...比较简单 package datastruct; public class QueueLink implements Queue { // 定义一个节点内部类 class N ...
- JAVA防盗链在报表中的应用实例
今天我们来聊聊Java防盗链,多说无用,直接上应用案例. 这里所用的工具是报表软件FineReport,搭配有决策系统(一个web前端展示系统,主要用于权限控制),可以采用java防盗链的方式来实现页 ...
- java责任链模式及项目实际运用
1.前言 上次我们认识了java责任链模式的设计,那么接下来将给大家展示责任链模式项目中的实际运用.如何快速搭建责任链模式的项目中运用. 2.简单技术准备 我们要在项目中使用借助这样的几个知识的组合运 ...
- java使用链栈实现迷宫求解
java实现链栈在前面有所介绍:http://www.cnblogs.com/lixiaolun/p/4644141.html java实现链栈的代码: package stackapplicatio ...
- java使用链栈实现数制转换
java实现链栈在前面有所介绍:http://www.cnblogs.com/lixiaolun/p/4644141.html 将前面java实现链栈的代码稍作修改: package linkedst ...
- C++实现链队类——合肥工业大学数据结构实验5:链式队列
实验5 5.1 实验目的 熟练掌握队列的顺序链式存储结构. 熟练掌握队列的有关算法设计,并在链队列上实现. 根据具体给定的需求,合理设计并实现相关结构和算法. 5.2 实验要求 5.2.1链队列实验要 ...
随机推荐
- 数据结构实验之链表八:Farey序列(SDUT 3331)
#include <bits/stdc++.h> using namespace std; typedef struct node { int data2; int data1;//mu ...
- 【java设计模式】-03抽象工厂模式
抽象工厂 简述 抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类.在抽象工厂模式中,接口是负责创建一个相关对象的工厂 ...
- golang——reverse反转字符串
reverse反转,是个比较基础算法.要实现这个方法,从常理考虑可以申请一个新空间,然后将字符串的从尾到头依次填充该空间,最后新空间的内容就是反转后的结果了,这个方式的算法复杂度是O(n),并且还需要 ...
- linux向文件中添加数据,数据被追加到了上一行的行尾
当我们在windows上新建了文件,并且要上传到linux上时,一定要在文件后加上空格,否则就会出现标题上讲的,数据被追加到了上一行的行尾,而不是新起一行,但是如果是在linux上新建的文件,则没有这 ...
- Android跨进程通信访问其他应用程序的Activity
访问其他应用程序的ActivityActivity既可以在进程内(同一个应用程序)访问,也可以跨进程访问.如果想在同一个应用程序中访问Activity,需要指定Context对象和Activity的C ...
- C#实现MJPEG服务器
实现流写入,将图像作为mjpeg写入 public class MjpegWriter : IDisposable { , }; , , , }; private string _Boundary; ...
- Hibernate3映射数据类型
1. 在实际开发中需要在hbm文件中使用的type属性值是指定的类型.那 么指定的类型一般的是基于hibernate的类型.2. 当然在实际过程中也可以在hbm文件中指定java类型. publ ...
- TCP怎么保证证包有序传输的,TCP的慢启动,拥塞避免,快速重传,快速恢复
TCP提供了最可靠的数据传输,它给发送的每个数据包做顺序化(这看起来非常烦琐),然而,如果TCP没有这样烦琐的操作,那么,可能会造成更多的麻烦.如造成数据包的重传.顺序的颠倒甚至造成数据包的丢失. 那 ...
- python之scrapy爬取jingdong招聘信息到mysql数据库
1.创建工程 scrapy startproject jd 2.创建项目 scrapy genspider jingdong 3.安装pymysql pip install pymysql 4.set ...
- jsp+UEditor粘贴word
最近公司做项目需要实现一个功能,在网页富文本编辑器中实现粘贴Word图文的功能. 我们在网站中使用的Web编辑器比较多,都是根据用户需求来选择的.目前还没有固定哪一个编辑器 有时候用的是UEditor ...