类似队列的java实现

4 篇文章 0 订阅

实现了栈后,索性又实现以下队列。本文主要介绍队列的定义、队列的java实现和队列的作用。

队列的定义

队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表,特点是“先进先出,后进后出”。

队列的实现

这里说一下,我这实现的和队列的定义其实不符合,只是遵从了先进先出的思想。为了防止出现“假溢出”的问题,每次删除元素都添加了一个动作:将所有元素前移一位,这样对头始终在数组的开始。基本思想和栈的实现一样,用一个字符串数组作为队列的容器,数组的第一个元素为队列头部,并用一个int值作为队列的尾部指针。当插入队列的时候,直接将值放入数组的相应位置; 删除队列元素的时候,用到System.arraycopy()这个方法将除了队列头部的数据向前移动一位。注意这个过程中的队列尾部指针的变化。

/**
 *基于String数组的队列,数组第一个为队头,插**入的字符依次加入数组
 */
public class Queue{
    /*
     *队列容器数组
     */
    private String[] queueStr;
    /*
     *队尾指针
     */
    private int rear;
    /*
     *队列容器数组的长度
     */
    private int length = 0;

    public Queue(){
        this.rear = -1;
        this.length = 100;
        queueStr = new String[length];
    }
    public Queue(int length){
        this.rear = -1;
        this.length = length;
        queueStr = new String[length];
    }

    public void push(String s){
        if(rear < queueStr.length - 1){
            queueStr[++rear] = s;
        }else{
            print("error!\n");
        }
    }

    public String pop(){
        if(rear >= 0) {
            String s = queueStr[0];
            System.arraycopy(queueStr,1,queueStr,0,rear + 1);
            rear--;
            return s;
        }else{
            print("pop error!");
            return null;
        }
    }

    public String toString(){
        String s = "";
        for(int i = 0; i <= rear; i++){
            s += queueStr[i] + " ";
        }
        return s;
    }

    private void print(String s){
        System.out.print(s);
    }
}

其实实现队列的主要难度是删除操作。因为为了避免“假溢出”,考虑移位,我去看了arraylist的实现,发现其remove方法使用了“System.arraycopy()”这个方法,就搬到这个程序来了!就是提醒一下自己,要多看这些大牛的源码!

队列的用途

队列和显示中的排队类似,经常用来模拟排队。看看后续写一个模拟程序吧。^_^

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值