#yyds干货盘点# 双端链表实现队列

Posted wx61dbfa0f42bf6

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#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 = 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());



效果:

队列元素大小--》5
4-->3-->2-->1-->0-->
出队元素--》4
3-->2-->1-->0-->
队列元素大小--》4

以上是关于#yyds干货盘点# 双端链表实现队列的主要内容,如果未能解决你的问题,请参考以下文章

Java数据结构——用双端链表实现队列

《Java数据结构与算法》笔记-CH5-链表-5用双端链表实现队列

JAVA基础——链表结构之双端链表

双端链表和双向链表的区别

双端链表--Java实现

#yyds干货盘点# 合并 k 个排序链表