链表在我看来就是一种基础的数据结构,它没有一定的排列顺序,但是每个节点内都有指向下一个节点的指针,即使是在java里也是一样的。使用链表可以不用预先设置大小,但是链表不能实现随机读取数据,每次读取数据总是要从根节点开始遍历。相比于数组,虽然数组能实现随机读取数据,但是也同时失去了不用预先设置大小的优点,可能会造成内存空间不必要的浪费!

在说会链表如何实现队列。首先我们需要创建一个链表的节点类。在节点类里面,我们首先要定义两个节点的属性,一个是节点内的节点数据对象,以及指向下一个节点的指针。在方法的定义中我定义了1、义对下一个节点的引用方法。2、定义获得下一个节点的数据对象的方法。3、定义在当前节点设置数据对象的方法。4、定义获得当前节点数据对象的方法。

代码实现如下:

package com.czh130717;

public class LinkNode {

private Object ob;//节点内的数据对象

private LinkNode next;//对下一个节点的引用

public LinkNode(Object ob){

this.ob=ob;

}

public LinkNode() {

}

//定义对下一个节点的引用方法

public void setNext(LinkNode next){

this.next=next;

}

//定义获得下一个节点的数据对象的方法

public LinkNode getNext(){

return next;

}

//定义在当前节点设置数据对象的方法

public void setObj(Object obj){

this.ob=obj;

}

//定义获得当前节点数据对象的方法

public Object getnode(){

return ob;

}

}

定义完一个节点类,再次我们需要定义一个链表类。

链表类里,我们需要定义一个静态的根节点root,和尾节点last。并定义了一个链表添加数据对象的功能

//定义添加功能

public void add(Object ob){

LinkNode lin=new LinkNode(ob);

if(null==root){

root=lin;

last=root;

}

else{

last.setNext(lin);

last=lin;

}

}

其中Object ob是我们需要添加的节点数据对象,我们要实例化一个节点对象来存储这个节点数据对象,其次我们要判断链表是否为空,即链表的根节点是否为空,如果root为空,则将该存储了要添加的数据对象的节点设为根节点,并将其设置为尾节点。如果根节点不为空,则将要添加的节点直接调用节点类的定义下一个节点的方法,将其设为last节点的下一个节点,并将该节点设置为最后一个节点。如此反复添加即可。

其次我还实现了查询功能。

//定义查询功能,获取节点的功能

public LinkNode get(int index){

LinkNode lin=root;

int c=0;

while(c!=index){

lin=lin.getNext();

c++;

}

return lin;

}

首先该查询功能是根据要查询数据的索引位置来查询的,当然我们也可以根据要查询数据的具体值来查询。查询,自然要从根节点开始遍历,当遍历到要查询的数据,返回其值即可。

插入功能的实现

//定义一个插入功能,插入第index个节点之后

public void insert(Object ob,int index){

LinkNode lk=new LinkNode(ob);

LinkNode node1=this.get(index-1);

LinkNode node2=this.get(index);

if(root==null){

root=lk;

}

else{

node1.setNext(lk);

lk.setNext(node2);

}

}

插入功能的实现,无可厚非,便是根据要插入节点的索引值,将其上一个节点直接指向要插入的节点,并将该节点指向下一个节点,自然便实现了插入功能。但是要注意的当节点插入在头尾的位置时,其实没有父节点和子节点的!这个情况要注意!

删除功能

//删除功能;删除指定位置的节点

public void remove(int index){

if(index==0){

root=this.get(index+1);

}else{

this.get(index-1).setNext(this.get(index+1));

}

count--;

}

获取队列长度

//得到长度功能

public int getLength(){

int length=0;

LinkNode node=root;

while(node!=null){

node=node.getNext();

length++;

}

System.out.println(length);

return length;

}

打印功能

//定义一个打印功能

public void print(LinkNode root){

if(null != root){

Object data=root.getnode();

System.out.println(data);

LinkNode node=root.getNext();

print(node);

} else{

return;

}

System.out.println();

}}

让队列实现打印功能,我们需要循环遍历队列,每取出一个节点数据对象便打印一次即可!

最后我创建了一个学生类继承该队列类,实现了所有功能!

代码如下:

package com.czh130717;

public class Student extends LinkList {

public static void main(String[] args){

LinkList ls=new Student();

ls.add("李月迪");

ls.add("蔡佳");

ls.add("周一帆");

ls.add("陈国辉");

ls.add("胡哥");

ls.add("刘培森");

ls.add("段亚辉");

ls.print(root);

System.out.println();

ls.insert("淳震华", 1);

ls.print(root);

ls.remove(0);

ls.print(root);

ls.getLength();

}

}

java 头尾 队列_java总结之 链表实现队列相关推荐

  1. java数据结构 队列_Java数据结构与算法[原创]——队列

    声明:码字不易,转载请注明出处,欢迎文章下方讨论交流. 前言:Java数据结构与算法专题会不定时更新,欢迎各位读者监督.本文介绍数据结构中的队列(queue)的概念.存储结构.队列的特点,文末给出ja ...

  2. java 非阻塞队列_java并发之非阻塞队列

    非阻塞队列有:ArrayDeque.PriorityQueue.ConcurrentLinkedQueue 之前都说过阻塞队列了,其实差别都不大,阻塞和非阻塞的区别在于阻塞队列有put和take方法进 ...

  3. java 并发队列_JAVA并发编程:阻塞队列BlockingQueue之SynchronousQueue

    前面在讲解Executors工厂创建可缓存线程的线程池(newCachedThreadPool)的时候有提到过SynchronousQueue队列,该线程池使用 SynchronousQueue 作为 ...

  4. java 结构体_Java实现单链表的简单操作

    文章目录 前言 一.基本实现思路 二.代码实现 1.定义结点类2.定义链表类3.测试调用4.结果 总结 前言 用Java实现单链表的简单操作,阅读本文和上一篇文章体会Java中类与C++中结构体指针的 ...

  5. java object 数组_Java用Object实现数组队列的泛思与理解

    1.数组队列:能够限定只存一种数据或(不限定数据类型)同时存储多种数据的一个数组封装类 2.实现:使用泛型,创建对象时若指定数据类型,则只能存储一种数据,否则可以存储多种数据: 2.1.前者:类似于C ...

  6. 阻塞队列 java 源码_Java源码解析阻塞队列ArrayBlockingQueue常用方法

    本文基于jdk1.8进行分析 首先看一下ArrayBlockingQueue的成员变量.如下图.最主要的成员变量是items,它是一个Object类型的数组用于保存阻塞队列中的元素.其次是takeIn ...

  7. 队列queue(2):链表实现队列

    基本概念 队列是只允许在一端进行插入操作,另一端进行删除操作的线性表. 我们规定,允许删除的叫做队首"head",允许插入的叫做队尾"tail". 基本操作 我 ...

  8. C day18 高级数据表示(链表,队列)

    这是C primer的最后一章了,前面已经学习了怎么创建变量,结构,数组,指针,会写函数,总之,把C作为工具层面的知识已经学完了,但是对于编程之路,这才算走完第一步,因为对于写程序最重要的是学习如何表 ...

  9. java 头尾 队列_Java数据结构之队列(动力节点Java学院整理)

    队列的定义: 队列(Queue)是只允许在一端进行插入,而在另一端进行删除的运算受限的线性表. (1)允许删除的一端称为队头(Front). (2)允许插入的一端称为队尾(Rear). (3)当队列中 ...

最新文章

  1. 不会MySQL索引,面试官让回家等通知!
  2. Web Components 简述
  3. mesos安装,webui显示不正常
  4. 有点烦,不知道如何开始准备评测师考试?
  5. union万能密码By:dangdang
  6. php面向对象项目,PHP的面向对象编程:开发大型PHP项目的方法(一)
  7. 计算机专业人士,必读之经典图书
  8. python pep8_Python 代码风格 和 PEP8
  9. LeetCode 198, 213 House Robber
  10. mysql 随机槽_mysql怎样高效率随机获取n条数据
  11. 移植JDK,确实需要CPU指令级的工作
  12. mouseclick
  13. 制作Nine-Patch图片
  14. 联想IdeapadU410重装系统win10
  15. MacBook Pro 上网很慢
  16. case when 语句用法
  17. OfficeExcel(1)
  18. App上线相关法律常识
  19. MPEG DASH MPD文件字段解释
  20. 英文歌曲:Right Here Waiting(此情可待)

热门文章

  1. ESP32外壳设计 云图三维:在线SOLIDWORKS 教程
  2. Springboot+采用协同过滤算法的视频推荐系统的设计与实现 毕业设计-附源码261620
  3. seajs 的api接口
  4. srgan要训练多久_核心训练需要做多久?学会这些动作,5分钟完成核心训练
  5. 基于PCI接口的数据采集卡!(第一次做的板卡)
  6. Ldap集成Ranger应用服务
  7. CSAPP - LAB 1 datalab
  8. [摘录]知彼解己—同理心交流的原则
  9. Android Weekly #35 知识工作者就是管理者——虽未管人,但在管事
  10. mac 安装nginx与switchhosts 并在微信开发者工具调试h5项目