队列——链表结构实现(带尾指针的链表)

本文详细介绍了如何使用带尾指针的链表来实现队列,重点讨论了链表结构在队列操作中的优势,包括在链表尾部的插入操作。同时对比了普通队列、循环队列和链表队列的性能,指出链表队列在特定操作上的高效性,但指出了删除操作的挑战。
摘要由CSDN通过智能技术生成
本文接上一篇队列文章

四、链表结构的队列

1.带尾指针的链表

  1. 根据链表结构的特性,在队首插入和删除节点比较容易,时间复杂度为o(1),但是在链表尾部插入和删除,都需要先找到链表尾部前一个节点的位置,这是需要遍历整个链表的,对应的时间复杂度为o(n)
  2. 因此根据单链表的特性,在链表中添加一个tail节点,用于指向下一个节点即将插入的位置,如下图所示:
    在这里插入图片描述
  3. 此时便拥有了带尾指针的链表,而且对链表尾部进行插入比较方便(O(1)),但删除比较难(O(n),因为需要找到tail前一个节点的位置),而对链表的头部进行插入和删除依然是很容易(O(1))。
  4. 队列的数据结构为:先进先出(一端进元素,另一端出元素),同时结合带尾指针链表的特性,可以从 head端删除元素,tail端插入元素,如下图所示:
    在这里插入图片描述
    此时由于没有dummyHead虚拟节点,要注意链表为空的情况。

2.链表实现队列

实现代码:

package dataStructure.chapter4;

import dataStructure.chapter3.Queue;

/**
 * @Author: zjtMeng
 * @Date: 2020/1/5 20:48
 * @Version 1.0
 */
public class LinkedListQueue<E> implements Queue<E> {
   

    private class Node{
   
        public E e;
        public Node next;

        public Node(E e, Node next){
   
            this.e = e;
            this.next = next;
        }

        public Node(E e){
   
            this(e,null);
        }

        public Node(){
   
            this(null, null);
        }

        @Override
        public String toString(){
   
            return e.toString();
        }
    }

    //定义头结点和尾节点
    private Node head, tail;

    private int size;

    //默认构造方法
    public LinkedListQueue(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值