数据结构之基于Java的链接队列实现

本文详细解析了使用Java实现的队列数据结构,包括队列的创建、基本操作如入队、出队等,并附带详细的代码注释及图解,帮助读者更好地理解队列的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文的代码来自于《数据结构与算法(JAVA语言版)》,是笔者在网上找到的资料,非正式出刊版物。笔者对代码一些比较难以理解的部分添加了注释和图解,欢迎大家来讨论。

public class QueueSLinked implements Queue {
    private SLNode front;//frontz指向第一个元素前面一个位置
    private SLNode rear;//rear指向最后一个元素位置
    private int size;
    public QueueSLinked() {
        front = new SLNode();
        rear = front;
        size = 0;
    }

    public int getSize() {
        return size;
    }//返回队列的大小

    public boolean isEmpty() {
        return size==0;
    }//判断队列是否为空

    public void enqueue(Object e) {
        SLNode p = new SLNode(e,null);
        rear.setNext(p);
        rear = p;
        size++;
    }//数据元素e入队

    public Object dequeue() throws QueueEmptyException {
        if (size<1)
            throw new QueueEmptyException("错误:队列为空");
        SLNode p = front.getNext();
        front.setNext(p.getNext());
        size--;
        if (size<1) rear = front;   //如果队列为空,rear指向头结点
        return p.getData();
    }//队首元素出队

    public Object peek() throws QueueEmptyException {
        if (size<1)
            throw new QueueEmptyException("错误:队列为空");
        return front.getNext().getData();
    }//取队首元素
}


public interface Queue {
    //返回队列的大小
    public int getSize();

    //判断队列是否为空
    public boolean isEmpty();

    //数据元素e入队
    public void enqueue(Object e);

    //队首元素出队
    public Object dequeue() throws QueueEmptyException;

    //取队首元素
    public Object peek() throws QueueEmptyException;
}

public class QueueEmptyException extends RuntimeException {

    public QueueEmptyException(String err) {
        super(err);
    }   
}

public class SLNode implements Node {

    private Object element;
    private SLNode next;

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

    public SLNode(Object ele, SLNode next){
        this.element = ele;
        this.next = next;
    }

    public SLNode getNext(){
        return next;
    }

    public void setNext(SLNode next){
        this.next = next;
    }
    /****************Node Interface Method**************/
    public Object getData() {
        return element;
    }

    public void setData(Object obj) {
        element = obj;
    }   
}

public interface Node {
    //获取结点数据域
    public Object getData();
    //设置结点数据域
    public void setData(Object obj);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值