算法第四版 P95 算法1.3 基于链表数据结构LinkedList实现队列Queue

本文介绍了如何使用链表数据结构实现队列,包括enqueue()方法用于在队尾插入元素,dequeue()方法用于从队头取出并删除元素,遵循先进先出的原则。还提供了具体的Java代码实现及运行结果分析。
摘要由CSDN通过智能技术生成

原理

使用链表数据结构
enqueue()插入元素到队列的尾巴
dequeue()取出队列开始的元素,返回,然后再删除
先进先出,后进后出
利用链表实现队列

java代码

package book1_3;

import java.util.Iterator;

/**
 * @description: ${description}
 * @create: 2019-02-17
 * 方法isEmpty size dequeue enqueue iterator
 * 成员变量
 **/
public class LinkListQueue<Item> implements Iterable {
    private class QueueIterator implements Iterator {
        private Node current = first;

        @Override
        public boolean hasNext() {
            return current != null;
        }

        @Override
        public Object next() {
            Item item = current.item;
            current = current.next;
            return item;
        }

        @Override
        public void remove() {
            //blank
        }
    }

    @Override
    public Iterator iterator() {
        return new QueueIterator();
    }

    private class Node {
        Item item;
        Node next;
    }

    private Node first;
    private Node last;
    private int n;

    public boolean isEmpty() {
        return n == 0;
    }

    public int size() {
        return n;
    }

    public void enqueue(Item item) {//在集合的尾巴加入元素
        Node old = last;
        last = new Node();
        last.item = item;
        last.next = null;
        if (isEmpty()) {//当集合为空的时候,first和last都指向新建的第一个Node
            first = last;
        } else {//当集合为空的时候old是null,下面的语句不正确,当不为空的时候,old才有内容
            old.next = last;
        }
        n++;//集合数量无论如何都增加1
    }

    public Item dequeue() {//把集合第一个元素的值返回出来,然后删了第一个元素,把第二个元素当成第一个元素
        Item item = first.item;
        first = first.next;
        if (n == 1) {
            last = null;
        }
        n--;
        return item;
    }

    public static void main(String[] args) {
        LinkListQueue<String> queue = new LinkListQueue<String>();
        String exp = "to be or not to - be - - that - - - is";
        String[] split = exp.split(" ");
        for (String s : split
        ) {
            if (!s.equals("-")) {
                queue.enqueue(s);
            } else if (!queue.isEmpty()) {
                String dequeue = queue.dequeue();
                System.out.print(dequeue + " ");
            }
        }
        System.out.println();
        System.out.println(queue.size());//队列里面的元素的个数
        //打印队列里面剩余的元素
        for (Object ele : queue
        ) {
            System.out.print(ele + " ");
        }
    }
}

运行结果

在这里插入图片描述

心得

1.类似于LinkedListStack
2.利用2个变量.first和last
3.插入和删除的时候要判断是否为空

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值