数据结构3——队列


前言

本文主要讲解的是队列的基础部分,包括其方法作用及其底层代码,底层代码是在数据结构1——动态数组的基础之上编辑出,重复文本本文中不再赘述。
需要强调的是,java本身有自己的队列包,猿友们可以利用import java.Queue来使用基本方法
动态数组

一、队列是什么

队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。好似排队,先进后出。
这里需要强调,插入的一边是队尾,出去的一边是队首。

二、方法及底层代码

1.接口

代码如下

//从队尾进入,从队首出队,先进后出
public interface Queue<E>{
    void enqueue(E e);//入队
    E dequeue();//出队
    E getFront();//看队首元素
    int getSize();
    boolean isEmpty();
}

2.getSize()

获取队列的长度

3.isEmpty()

布尔类型,判断队列是否为空

4.enqueue()

入队。及使用动态数组的addLast()在结构的尾部添加元素
代码如下

在这里	   public void enqueue(E e){
		   array.addLast(e);
	   }
    public void add(int index,E e){
    	if(size==data.length)
    		throw new IllegalArgumentException("Add failed. Array is full");
    	
    	if(index<0||index>size)
    		resize(2*data.length);
    	
    	for(int i=size-1;i>=index;i--){
    		data[i+1]=data[i];
    	    data[index]=e;
    	    size++;
    }
    }
    public void addLast(E e){
    	if(size==data.length)
    		throw new IllegalArgumentException("AddLast failed. Srray is full.");
    	
    	data[size]=e;
    	size++;
    }

5.denqueue()

出队,即删除队首的第一个元素
代码如下

        public void denqueue(E e){
        romoveFirst(E e);
        }
        public E remove(int index){
    	if(index<0||index>=size)
    		throw new IllegalArgumentException("Get failed.Index is illegal");
    	E ret=data[index];

    	if(size==data.length/2)
    		resize(data.length/2);
    	
    	for(int i=index+1;i<size;i++)
    		data[i-1]=data[i];
    	size--;
    	data[size]=null;
    
    	return ret;
    }
    
    public E removeFirst(){
    	return remove(0);
    }

6.getFront()

获取队首元素,即出队处的元素
利用的是数组本身的查找功能

    @Override
    public E getFront(){
        if(isEmpty())
        	throw new IllegalArgumentException("Cannot dequeue from an empty queue");
        return data[front];
    }

三.打印队列

	   @Override
	   public String toString(){
		   StringBuilder res=new StringBuilder();
		   res.append("Stack:");
		   res.append("[");
		   for(int i=0;i<array.getSize();i++){
			   res.append(array.get(i));
			   if(i!=array.getSize()-1)
				   res.append(",");
		   }
		   res.append("]top");
		   return res.toString();
	   }
   }

总结

以上便是队列的基础部分。将在以后的博客中详细讲解循环队列的原理及代码。欢迎关注。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值