@

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

队列模型

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

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. [Apache]架设Apache服务器

    我自己使用的是Ubuntu的操作系统, 所以我主要是记录的在ubuntu的Apache的安装和简单的配置. Apache服务器的架设: 一.命令行安装 使用下面的指令下载apache2 sudo ap ...

  2. HOOK技术演示

    前提:64位系统需要用64位编译dll 一.首先创建一个dll工程,取名为KeyboardHookDll,代码如下: // KeyboardHookDll.cpp : 定义 DLL 应用程序的导出函数 ...

  3. rsync mac->windows openssh

    rsync -azvP --progress -e "ssh -p 6666" /Users/codar/360\344\272\221\347\233\230/ghld/ rsy ...

  4. 玩school 学习sql server 查询的网站

    http://www.w3school.com.cn/sql/sql_like.asp

  5. Elasticsearch之curl创建索引

    前提,是 Elasticsearch之curl创建索引库 [hadoop@djt002 elasticsearch-2.4.3]$ curl -XPUT 'http://192.168.80.200: ...

  6. ssh整合(dao使用hibernateTemplate)

  7. 每天一道算法题(32)——输出数组中第k小的数

    1.题目 快速输出第K小的数 2.思路 使用快速排序的思想,递归求解.若键值位置i与k相等,返回.若大于k,则在[start,i-1]中寻找第k大的数.若小于k.则在[i+1,end]中寻找第k+st ...

  8. HTML标签详细讲解

    http://www.cnblogs.com/yuanchenqi/articles/5603871.html

  9. java如何从cmd运行并使用text文件作为输入源的总结

    大家好,好几天没写东西了,又和大家见面了 首先,编译我们的.java文件,生成.class文件 使用命令 javac yourname.java 编译 然后使用java youname < yo ...

  10. android手势(gesture)

    需要实现两个接口,OnTouchListener ,OnGestureListener 在接口方法中实现各种事件 详见:http://www.cnblogs.com/JczmDeveloper/p/3 ...