Java数据结构--链式队列

一、简介

1.1 概念

队列简称队–他同堆栈一样,也是一种运算受限的线性表,其限制是仅允许在表的一端进行插入,而在表的另一端进行删除;
在队列中把插入数据元素的一端称为队尾,删除数据元素的一端称为队头
向队尾插入元素称为进队和入队,新元素入队后成为新的队尾元素;从队列中删除元素称为离队或出队,元素出队后,其后续元素成为新的队头元素;
由于队列的插入和删除操作分别在队尾和队头进行,每个元素必然按照进入的次序离队,也就是说先进队的元素必然先离队,所以称队列为先进先出表

链式队列

1.2 结构图

在这里插入图片描述

二、简单实现

public class LinkQueue implements Queue {

    Node front; //队头
    Node rear;  //队尾
    int count; //计数器

    public LinkQueue() {
        init();
    }

    public void init() {
        front = rear = null;
        count = 0;
    }

	/**
	* 在队尾追加元素
	*/
    public void append(Object obj) throws Exception {
        Node node = new Node(obj, null);

        //如果当前队列不为空。
        if (rear != null) {
            rear.next = node; //队尾结点指向新结点
        }

        rear = node; //设置队尾结点为新结点

        //说明要插入的结点是队列的第一个结点
        if (front == null) {
            front = node;
        }
        count++;
    }

	/**
	* 删除最后一个元素
	*/
    public Object delete() throws Exception {
        if (isEmpty()) {
            new Exception("队列已空!");
        }
        Node node = front;
        front = front.next;
        count--;
        return node.getElement();
    }

	/**
	* 获取队头
	*/
    public Object getFront() throws Exception {
        if (!isEmpty()) {
            return front.getElement();
        } else {
            return null;
        }
    }

	/**
	* 判断队列是否为空
	*/
    public boolean isEmpty() {
        return count == 0;
    }
}
//结点类
public class Node {

    Object element; //数据域
    Node next;  //指针域

    //头结点的构造方法
    public Node(Node nextval) {
        this.next = nextval;
    }

    //非头结点的构造方法
    public Node(Object obj, Node nextval) {
        this.element = obj;
        this.next = nextval;
    }

    //获得当前结点的后继结点
    public Node getNext() {
        return this.next;
    }

    //获得当前的数据域的值
    public Object getElement() {
        return this.element;
    }

    //设置当前结点的指针域
    public void setNext(Node nextval) {
        this.next = nextval;
    }

    //设置当前结点的数据域
    public void setElement(Object obj) {
        this.element = obj;
    }

    public String toString() {
        return this.element.toString();
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

书香水墨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值