@

和栈一样,队列也是表,但是使用队列的特点是先进先出。

队列模型

队列的基本操作是入队,它是在表的末端插入一个元素,和出队,它是删除在表开头的一个元素

graph LR
A[<kbd>入队</kbd>] --> b[队列]
b[队列] --> c[<kbd>出队</kbd>]

队列的链表实现

链表队列的实现

import java.util.EmptyStackException;

/**
* @author 李正阳
* @param <E> 泛型
*/
public class MyLinkQueue<E> implements queue<E> {
/**
* @param size 表中元素的个数
* @param front 队头
* @param rear 队尾
*/
private int size=0;
private Node<E> front;
private Node<E> rear; /**
* 入队方法
* 在队尾添加节点
* @param p 添加进表中的元素
* @return true 添加成功 false 添加失败
*/
@Override
public boolean push(E p) { Node<E> d=new Node(p);
/**
* 空表就将队头队尾设置在同一个节点
*/
if(isEmpty()){
front=d;
rear=d;
}else{
rear.setNext(d);
d.setPre(rear);
rear=d;
}
size++;
return true;
} /**
*出队方法如果为空队列就抛出异常
* 头删节点法
*
* @return
*/
@Override
public E pop() {
Node<E> p;
if(isEmpty()){
throw new EmptyStackException();
}else{
p=front;
front=front.getNext();
front.setPre(null);
}
return p.getData();
} /**
* @return 返回表中的元素个数
*/
@Override
public int size() {
return size;
} /**
* 输出表中元素从表头到表尾
*/
@Override
public void travel() {
Node<E> p=front;
while (p!=null){
System.out.print(p.getData()+" ");
p=p.getNext();
}
System.out.println();
} /**
* 判空方法
* @return true 表为空 false 表不为空
*/
@Override
public boolean isEmpty() {
if(size==0){
return true;
}else{
return false;
}
} /**
* 获得队尾元素
* @return 队尾元素
*/
@Override
public E getRear() {
return rear.getData();
}
/**
* 获得队头元素
* @return 队头元素
*/
@Override
public E getFront() {
return front.getData();
} /**
* 内部内
* @param <E> 节点类型
*/
private class Node<E>{
E data;
Node<E> next;
Node<E> pre;
public Node(E data){
this.data=data;
} public Node(E data, Node next, Node pre) {
this.data = data;
this.next = next;
this.pre = pre;
}
public Node(){
next=null;
pre=null;
data=null;
}
public E getData() {
return data;
} public void setData(E data) {
this.data = data;
} public Node getNext() {
return next;
} public void setNext(Node next) {
this.next = next;
} public Node getPre() {
return pre;
} public void setPre(Node pre) {
this.pre = pre;
}
}
}

队列的接口实现

/**
* 队列的接口
* @param <E> 泛型类型
*/
public interface queue<E> {
/**
* 入队方法
* @param p
* @return
*/
boolean push(E p); /**
* 出队方法
* @return 返回泛型类型的方法
*/
E pop(); /**
* 表中元素的大小
* @return
*/
int size(); /**
* 输出表中元素
*/
void travel(); /**
* 判断表是否为空的
* @return true 表是空的 false 表是非空
*/
boolean isEmpty(); /**
* 获取表尾元素
* @return 表尾的元素
*/
E getRear(); /**
* 获取表头的元素
* @return 表头的元素
*/
E getFront();
}

java:数据结构复习(三)链表队列的更多相关文章

  1. 我理解的数据结构(三)—— 队列(Queue)

    我理解的数据结构(三)-- 队列(Queue) 一.队列 队列是一种线性结构 相比数组,队列对应的操作是数组的子集 只能从一端(队尾)添加元素,只能从另一端(队首)取出元素 队列是一种先进先出的数据结 ...

  2. Java数据结构和算法 - 链表

    Q: 为什么要引入链表的概念?它是解决什么问题的? A: 数组作为数据存储结构有一定的缺陷,在无序数组中,搜索是低效的:而在有序数组中,插入效率又很低:不管在哪一个数组中删除效率都很低:况且一个数组创 ...

  3. Java数据结构和算法(二)--队列

    上一篇文章写了栈的相关知识,而本文会讲一下队列 队列是一种特殊的线性表,在尾部插入(入队Enqueue),从头部删除(出队Dequeue),和栈的特性相反,存取数据特点是:FIFO Java中queu ...

  4. 数据结构:C_链表队列的实现

    数据结构链表形式队列的实现(C语言版) 1.写在前面 队列是一种和栈相反的,遵循先进先出原则的线性表. 本代码是严蔚敏教授的数据结构书上面的伪代码的C语言实现代码. 分解代码没有包含在内的代码如下: ...

  5. Java数据结构和算法(五)——队列

    队列.queue,就是现实生活中的排队. 1.简单队列: public class Queqe { private int array[]; private int front; private in ...

  6. 【Java数据结构学习笔记之二】Java数据结构与算法之队列(Queue)实现

      本篇是数据结构与算法的第三篇,本篇我们将来了解一下知识点: 队列的抽象数据类型 顺序队列的设计与实现 链式队列的设计与实现 队列应用的简单举例 优先队列的设置与实现双链表实现 队列的抽象数据类型 ...

  7. 【Java数据结构学习笔记之三】Java数据结构与算法之队列(Queue)实现

      本篇是数据结构与算法的第三篇,本篇我们将来了解一下知识点: 队列的抽象数据类型 顺序队列的设计与实现 链式队列的设计与实现 队列应用的简单举例 优先队列的设置与实现双链表实现 队列的抽象数据类型 ...

  8. 自己动手实现java数据结构(三) 栈

    1.栈的介绍 在许多算法设计中都需要一种"先进后出(First Input Last Output)"的数据结构,因而一种被称为"栈"的数据结构被抽象了出来. ...

  9. java数据结构之三叉链表示的二叉树

    三叉链表示的二叉树定义所畏的三叉链表示是指二叉树由指向左孩子结点.右孩子结点.父亲结点[三叉]的引用(指针)数据和数据组成.    package datastructure.tree.btree; ...

  10. 图解Java数据结构之环形链表

    本篇文章介绍数据结构中的环形链表. 介绍 环形链表,类似于单链表,也是一种链式存储结构,环形链表由单链表演化过来.单链表的最后一个结点的链域指向NULL,而环形链表的建立,不要专门的头结点,让最后一个 ...

随机推荐

  1. Ettercap进行arp毒化

    攻击者IP:192.168.220.152 受害者IP:192.168.220.151 网关:192.168.220.2 修改DNS文件 ┌─[root@sch01ar]─[~] └──╼ #vim ...

  2. 基本的数据类型 void关键字 都存在类类型

  3. day17 10.jdbc的crud操作

    每次都是注册驱动,获取连接,然后执行.每次都写很累,肯定能抽取出来一些东西.Java里面是这样的,相同的东西可以抽取做成一个方法.用的时候调这方法就OK了.这方法抽取到什么程度呢? package c ...

  4. Configuration File (php.ini) Path Loaded Configuration File 都有加载php.ini文件,有什么不同的地方?

    Configuration File (php.ini) Path /usr/local/php7/etc      这个目录下面也有php.ini文件(如果在编译./configure -with- ...

  5. ROS Learning-023 (提高篇-001) 准备工作 --- 安装一些必要的软件包

    ROS 提高篇-001 - 准备工作 - 安装一些必要的软件 我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubuntu 14.04.4 LTS ROS 版本 ...

  6. 如何使用EditPlus将json格式字符串默认为UTF-8格式

    1.首先用EditPlus打开json格式的文件 2.选择Tools工具栏下的Configure  User Tools 3.点击左侧File 4.在右侧Default encoding中选择UTF- ...

  7. ZROI2018普转提day2t4

    传送门 分析 考场上暴力水过好评... 然后我的st表查询似乎是log的,然后log三方跑的比log方快,qwq. 我们发现如果一个区间的最小值就是这个区间的gcd,则这个区间合法.所以我们二分区间长 ...

  8. Redis了解

    1. 使用Redis有哪些好处? (1) 速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1) (2) 支持丰富数据类型,支持string,li ...

  9. IntelliJ Idea 免费激活方法

    文章介绍 文章不错,指的研究一下,idea的联网激活确实有可行性,但是上有政策,下有对策,如何才能保护版权,是一个值得深思的问题. 文章属于转载,文末有文章来源,转载注明出处. 1 激活码激活 到网站 ...

  10. UCOSIII五种状态

    休眠态:未用OSTaskCreate创建任务,不受UCOS管理 就绪态:在就绪表中已经登记,等待获取CPU使用权 运行态:已经获取CPU使用权并运行的任务 等待态:暂时让出CPU使用权,等待某一事件触 ...