用倍增数组实现队列——Java书写

相关文章

简单数组实现容量固定的栈

队列类代码实现

  • 仅enQueue方法与数组是否倍增有关,其他方法都与简单数组中的队列实现相同。
  • 本人对数组倍增用的不是很熟,所以犯了一些容易犯的错误,解析见注释。
  • this.show()用于调试时查看内部数据
package Queue;
//仅enQueue与是否倍增有关,其他方法都与简单数组中的队列实现相同
public class DouArrayQueue {
    private char[] array;
    private int size;//当前数组中存储数据量
    private int rear,front;
    
    public DouArrayQueue(){
    	array=new char[2];//数组初始大小设为2或以上整数,如果设为1在后面%array.length时极易出错
    	size=0;
    	rear=front=0;
    }
    public void enQueue(char data)
    {
    	
    	if(size==array.length){
			char[] newArray=new char[2*size];//得到倍增数组
			System.arraycopy(array,rear,newArray,0,size-rear);//此时原数组已经满,说明此时rear=front
			System.arraycopy(array,0,newArray,size-rear,front);//把rear右侧数据先复制到新数组,在赋值front左侧数据
			array=newArray;//array指向倍增数组
			rear=0;
			front=size;//倍增数组中数据位置变化,所以要修改数据
		}
    	size++;//size是数据数量,只在放入新数据使改变
		array[front]=data;
		front=(front+1+array.length)%array.length;//循环数组处理下标加减时一定先加数组长度,再对数组长度的求余
		//this.show();//用于调试时查看内部数据
    }//如果容量不足,先扩容再加入新数据,否则直接加入新数据
    public char deQueue(){
		if(size==0){
			return '#';
		}
		else{
			size--;
			char retu=array[rear];
			rear=(rear+1+array.length)%array.length;
			return retu;
		}
	}
    public char front(){
		if(size==0){
			return '#';
		}
		else{
			return array[(front-1+array.length)%array.length];
		}
	}
    public int queueSize(){
		return size;
	}
	public boolean isEmpty(){
		return (size==0);
	}
	/*public void show(){
	System.out.println("capacity"+array.length+" size"+size+" rear"+rear+" front"+front);
    System.out.println(array);//使用字符数组名输出数组
    }*/
}

测试

package Queue;

public class TestArrayQueue {
    public static void main(String[] args){
    	DouArrayQueue q1=new DouArrayQueue();
    	q1.enQueue('1');
    	q1.enQueue('2');
    	q1.enQueue('3');
    	q1.enQueue('4');
    	q1.enQueue('5');
    	q1.enQueue('6');
    	System.out.println("队头:"+q1.front());
    	for(int i=0;i<10;i++){
    	 	System.out.print("队尾取出"+q1.deQueue());
    	}
    }
}

运行结果:

队头:6
队尾取出1队尾取出2队尾取出3队尾取出4队尾取出5队尾取出6队尾取出#队尾取出#队尾取出#队尾取出#
发布了14 篇原创文章 · 获赞 0 · 访问量 302

猜你喜欢

转载自blog.csdn.net/zmx1952822326/article/details/101723832