数据结构--队列

队列

特点 : 先进先出

队列就像我们日常排队一样,先进去的人先出来。

实现:

数组实现

思路分析
1.如果尾指针rear小于数组队列的最大下标(arr.length-1,
    则将数据存入rear所指的数组元素当中,否则无法存入数据。
    rear == arr.length-1 (队列已满)
2.将尾指针往后移动:rear +1 ,当front == rear ()

实现
public class ArrayQueueDemo {
	private Object[] arr; // 该数据用于存放数据, 模拟队列
	private int maxsize; // 表示数组的最大容量
	private int front;   // 队列头
	private int rear;   // 队列尾
	//构造方法
	public ArrayQueueDemo(int capacity) {
		maxsize = capacity;
		arr = new Object[capacity];
		front = -1;   //指向队列头部,分析出front是指向队列头的前一个位置.
		rear = -1; // 指向队列尾,指向队列尾的数据(即就是队列最后一个数据)
	}
	//判断是否满队列
	public boolean isFull() {
		return rear == maxsize;
	}
	
	//判断是否空队列
	public boolean isEmpty() {
		return rear == front;
	}
	//数据添加
	public void insert(int value) {
		if(isFull()) {
			System.out.println("队列已满,添加失败");
                   return;
		}else {
                  rear ++;  //让rear向后移动
                  arr[rear] = n;
		}
	}
	//取出数据
	public Object remove() {
		//判断数据是否为空
          if(isEmpty()){
              throw new RuntimeException("队列为空,不能取出数据")
          }
          front ++ ;
          return arr[front]
	}
	//数据的取出
	public int reMove() {
		//判断数据是否为空
		if(isEmpty()) {
			throw new RuntimeException("队列为空");
		}
		front++;
		return arr[front];
	}
 
	
}

队列的扩容,每次扩容两倍
//数据添加
	public void insert(int value) {
		if(isFull()) {
			Object[] brr = new Object[arr.length * 2];
			for (int i = 0; i < arr.length; i++) {
				brr[i] = arr[i];
			}
			arr = brr;
		}else {
			//如果队列未满,分为两种情况 ,一种情况尾部指针已经指向最后一个元素,但是由于有出队列的情况所以size不等于maxsize0
			//另一种情况是尾部没有指向最后一个元素
			if(rear == maxsize-1) {
				rear = -1;
			}
			arr[++rear] = value;
			size++;//队列中实际个数加1
		}
	}

链表实现

public class Queue {
    Node front;
    Node rear;
    int size=0;
    public Queue(){
        front=rear=null;
    }

    public void rudui(int x){
        if (size==0){
            Node s=new Node(x,null);
            front=s;
            rear=front;
            size++;
        }
        Node s=new Node(x,null);
        rear.next=s;
        rear=s;
        size++;
    }

    public int chudui(){
        if (size==0){
            return 0;
        }
        else {
            int x= front.val;
            front=front.next;
            size--;
            return x;
       }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值