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

冲天香阵透长安,满城尽带黄金甲。这篇文章主要讲述#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


    推荐阅读