冲天香阵透长安,满城尽带黄金甲。这篇文章主要讲述#yyds干货盘点# 双端链表实现队列相关的知识,希望能为你提供帮助。
我们知道,队列是一种“先进先出”的数据结构,队列的插入操作是在队尾进行的,而删除操作是在队头进行的,这与在双端链表的表尾插入和在表头删除操作是类似的,因此可以用双端链表实现队列。
双端链表实现队列的java代码:
package parking;
import java.util.Collection;
import java.util.Iterator;
import java.util.Queue;
class Node
Object data;
Node next;
public Node(Object data)
this.data = https://www.songbingjia.com/android/data;
class LinkNode
private Node head; // 头结点
private Node tail; // 尾结点
private int size;
public LinkNode()
this.head = null;
this.tail = null;
this.size = 0;
// 判断是否为空
public boolean isEmpty()
return size == 0 ? true : false;
// 头插入法
public void addHNode(Node node)
if (head == null)
head = node;
tail = node;
else
node.next = head;
head = node;
size++;
// 尾结点插入
public void addTnode(Node node)
if (head == null)
head = node;
tail = node;
else
tail.next = node;
tail = node;
size++;
// 输出头结点,不删除
public Object sysHNode()
if (head == null)
return null;
Object obj = head.data;
return obj;
// 输出头结点,并删除
public Object deleteHnode()
if (head == null)
return null;
Object obj = head.data;
if (head.next == null)
head = null;
else
head = head.next;
size--;
return obj;
// 输出尾结点,并删除
public Object deleteTnode()
if (head == null)
return null;
Object obj = tail.data;
if (head == tail)
head = null;
tail = null;
else
Node temp = head;
Node pre = null; // 前一个结点
while (temp != tail)
pre = temp;
temp = temp.next;
pre.next = null;
tail = pre;
size--;
return obj;
// 输出链表
public void sysNode()
if (head == null)
System.out.println("链表为空");
return;
Node temp = head;
while (temp != null)
System.out.print(temp.data + "--> ");
temp = temp.next;
System.out.println();
// 获取链表大小
public int getSize()
// TODO Auto-generated method stub
return size;
public class LinkQueue
private LinkNode link;
public LinkQueue()
this.link = new LinkNode();
// 获取队列大小
private int getSize()
return link.getSize();
// 判断队列是否为空
private boolean isEmpty()
return link.isEmpty();
// 入队,尾结点插入
private void add(Object obj)
link.addHNode(new Node(obj));
// 出队,在链表头结点删除元素
private Object poll()
if (this.isEmpty())
return null;
return link.deleteHnode();
// 输出队列元素
private void sysQueue()
link.sysNode();
public static void main(String[] args)
LinkQueue queue = new LinkQueue();
int i;
for (i = 0; i < 5; i++)
queue.add(i);
System.out.println("队列元素大小--》" + queue.getSize());
queue.sysQueue();
System.out.println("出队元素--》" + queue.poll());
queue.sysQueue();
System.out.println("队列元素大小--》" + queue.getSize());
【#yyds干货盘点# 双端链表实现队列】效果:
队列元素大小--》5
4--> 3--> 2--> 1--> 0-->
出队元素--》4
3--> 2--> 1--> 0-->
队列元素大小--》4
推荐阅读
- Windows Server 2019 安装达梦DM8
- #IT人的升职加薪tips# Redis 事务支持 ACID 么()
- Spring Boot实现用户注册验证全过程
- 中秋你家的月亮圆吗(百行CSS实现中秋圆月动效#yyds干货盘点#)
- #展望我的2022Flag#Spring框架使用AspectJ实现AOP前置通知学习笔记
- 推荐学java——Spring之AOP
- 二叉树详解及二叉树的遍历(递归与非递归C++算法实现)
- 鸿蒙NFC标贴写入数据-详细
- 实验以及理论(Tomcat部署以及优化)