java:数据结构复习(三)链表队列
@
和栈一样,队列也是表,但是使用队列的特点是先进先出。
队列模型
队列的基本操作是入队,它是在表的末端插入一个元素,和出队,它是删除在表开头的一个元素
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:数据结构复习(三)链表队列的更多相关文章
- 我理解的数据结构(三)—— 队列(Queue)
我理解的数据结构(三)-- 队列(Queue) 一.队列 队列是一种线性结构 相比数组,队列对应的操作是数组的子集 只能从一端(队尾)添加元素,只能从另一端(队首)取出元素 队列是一种先进先出的数据结 ...
- Java数据结构和算法 - 链表
Q: 为什么要引入链表的概念?它是解决什么问题的? A: 数组作为数据存储结构有一定的缺陷,在无序数组中,搜索是低效的:而在有序数组中,插入效率又很低:不管在哪一个数组中删除效率都很低:况且一个数组创 ...
- Java数据结构和算法(二)--队列
上一篇文章写了栈的相关知识,而本文会讲一下队列 队列是一种特殊的线性表,在尾部插入(入队Enqueue),从头部删除(出队Dequeue),和栈的特性相反,存取数据特点是:FIFO Java中queu ...
- 数据结构:C_链表队列的实现
数据结构链表形式队列的实现(C语言版) 1.写在前面 队列是一种和栈相反的,遵循先进先出原则的线性表. 本代码是严蔚敏教授的数据结构书上面的伪代码的C语言实现代码. 分解代码没有包含在内的代码如下: ...
- Java数据结构和算法(五)——队列
队列.queue,就是现实生活中的排队. 1.简单队列: public class Queqe { private int array[]; private int front; private in ...
- 【Java数据结构学习笔记之二】Java数据结构与算法之队列(Queue)实现
本篇是数据结构与算法的第三篇,本篇我们将来了解一下知识点: 队列的抽象数据类型 顺序队列的设计与实现 链式队列的设计与实现 队列应用的简单举例 优先队列的设置与实现双链表实现 队列的抽象数据类型 ...
- 【Java数据结构学习笔记之三】Java数据结构与算法之队列(Queue)实现
本篇是数据结构与算法的第三篇,本篇我们将来了解一下知识点: 队列的抽象数据类型 顺序队列的设计与实现 链式队列的设计与实现 队列应用的简单举例 优先队列的设置与实现双链表实现 队列的抽象数据类型 ...
- 自己动手实现java数据结构(三) 栈
1.栈的介绍 在许多算法设计中都需要一种"先进后出(First Input Last Output)"的数据结构,因而一种被称为"栈"的数据结构被抽象了出来. ...
- java数据结构之三叉链表示的二叉树
三叉链表示的二叉树定义所畏的三叉链表示是指二叉树由指向左孩子结点.右孩子结点.父亲结点[三叉]的引用(指针)数据和数据组成. package datastructure.tree.btree; ...
- 图解Java数据结构之环形链表
本篇文章介绍数据结构中的环形链表. 介绍 环形链表,类似于单链表,也是一种链式存储结构,环形链表由单链表演化过来.单链表的最后一个结点的链域指向NULL,而环形链表的建立,不要专门的头结点,让最后一个 ...
随机推荐
- CentOS6.5安装完没有网络的解决办法
昨天下了个CentOS 6.5 Minimal 版,在VMware 10下安装好了之后,发现上不了网,PING外网也PING不通. 在网上搜了一下,发现Linux安装好了之后,网卡默认是没有启动的,下 ...
- hibernateTemplate方法使用
- 设置MySQL允许外网访问(转)
设置MySQL允许外网访问 1.修改配置文件sudo vim /etc/mysql/my.cnf把bind-address参数的值改成你的内/外网IP或0.0.0.0,或者直接注释掉这行. 2.登 ...
- 高性能MySQL笔记-第5章Indexing for High Performance-005聚集索引
一.聚集索引介绍 1.什么是聚集索引? InnoDB’s clustered indexes actually store a B-Tree index and the rows together i ...
- R: 对向量中的每个元素,检查其是否包含某个“单词”
#检测一个字符串中,是否包含某个子串,是返回T,否返回Frequire(stringr) require(stringr) test <- c("这里有天气热敏感冒",&qu ...
- 树莓派研究笔记(5)-- FM网络收音机
1. 安装mpc sudo apt-get install mpd mpc 2.添加流.注意,这里有个坑,如果下面这个地址不能用,那么就无法测试了.建议先下载一个龙卷风或者酷狗网络收音机,然后添加地址 ...
- 《Spring实战》-2
装配Bean 1.装配wiring,即创建应用对象之间的协作关系的行为,者也是依赖注入的本质. 2.创建Spring配置 从Sring3.0开始,Spring容器提供了两种配置Bean的方式: XML ...
- C#和.NET Framework简介
注:本文大部分借鉴了<果壳中的C#5.0权威指南>,小编也想根据这本书好好梳理一下C#. 序言:C#是一种通用的类型安全且面向对象的编程语言.这种语言的目标是提高程序员的生产力,为此,需要 ...
- [译]在Javascript中进行日期相关的操作
本文翻译youtube上的up主kudvenkat的javascript tutorial播放单 源地址在此: https://www.youtube.com/watch?v=PMsVM7rjupU& ...
- mongodb对数组中的元素进行查询详解
原文链接:http://blog.csdn.net/renfufei/article/details/78320176 MongoDB中根据数组子元素进行匹配,有两种方式. 使用 “[数组名].[子元 ...