队列-链式队列

队列的链式存储结构也用不带头节点的单链表来实现。为了便于实现入队盒出队操作,需要引用两个指针front和rear来分别指向队尾元素和队首元素的结点。

这里写图片描述

链式队列也引用了前面所讨论的Nod类,下面实现接口Queue的链式队列的java语言描述。

package com.queueTest;

import com.test1.Node;

public class LinkQueue   implements  Queue
{
    private  Node front;    //队首指针
    private  Node   rear;  //队尾指针

    //构造函数
    public  LinkQueue()
    {
        front = rear =null;
    }

    @Override
    public void clear()
    {
        front = rear = null;

    }

    @Override
    public boolean isEmpty()
    {
        return  front == rear;
    }





    @Override
    public int length()
    {
        Node p  = front;
        int  length = 0;
        while(p != null)
        {
            p = p.getNext();
            ++length;
        }
        return  length;
    }

    @Override
    public Object peek()
    {
        if(front !=null)
        {
            return front.getData();
        }
        else
        {
            return  null;
        }
    }

    /*
     * 
     * 入队操作
     * 1.创建数据域为x的新结点
     * 2.判断链队列是否为空,若为空,则直接将新结点设置为队首和队尾结点,否则就将新结点链接到队列的尾部并使其成为新的队尾结点
     */
    @Override
    public void offer(Object x) throws Exception
    {
        Node  p = new  Node(x);     //初始化新结点
        if(front  != null)
        {
            rear.setNext(p);
            rear = p;
        }
        else
        {
            front=  rear= p;
        }


    }

    //出队操作
    @Override
    public Object poll()
    {
        if(front != null)
        {//队列非空
            Node  p=  front;  //p指向新结点
            front = front.getNext();
            return  p.getData();
        }
        else
        {
            return  null;
        }
    }

}
----










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值