类似队列的java实现

来源:互联网 发布:js 双重级联 编辑:程序博客网 时间:2024/05/16 10:41

实现了栈后,索性又实现以下队列。本文主要介绍队列的定义、队列的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()”这个方法,就搬到这个程序来了!就是提醒一下自己,要多看这些大牛的源码!

队列的用途

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

1 0