程序员内功— —数据结构与算法之队列--增删改查

前言:

        队列应该是最好理解的一个数据结构了。队列就像我们去买东西之类的排队,总的来说就先进先出,先到先得的意思。队列好理解,但是真正用在开发还是很难的。比如抢购的流量很大,有些会用队列来排序抢得。

图解:

            假设有 1 2 3 4个人。一起进入一条通道,通道不允许并行通过。

                                    

            接下来,1就先出去,2 3 4 接着出,就是这样了。不难。。

                                        


代码编写:

                

package com.ern.demo;

public class MyQueue {

	int[] queueArray; // 定义一个队列数组
	private int maxSize; // 数组的最大长度
	private int front; // 第一个
	private int rear; // 最后一个
	private int nItemer; // 总共多少个数据

	public MyQueue(int maxSize) {

		this.maxSize = maxSize;
		queueArray = new int[maxSize];
		front = 0;
		rear = -1;
		nItemer = 0;

	}

	/**
	 * 判断里面是否有数据
	 * 
	 * @return
	 */

	public boolean isEmpty() {
		return nItemer == 0;
	}

	/*
	 * 队列是否满了
	 */
	public boolean isFull() {
		return maxSize == nItemer;

	}

	/**
	 * 方式一:最先进入的出队列后,后面的前移
	 * 
	 * @return
	 */
	public  int remove() {
		
		if (isEmpty()) {
			System.out.println("队列是空的,无法删除");
			return -1;
		}
		//拿到第一个,用于返回告诉删除的是啥
		int temp = queueArray[front];
		//将要删除的第二位开始每一位前移
		for (int i = 0; i < queueArray.length - 1; i++) {
			queueArray[i] = queueArray[i + 1];
		}
		nItemer--;

		return temp;

	}
	/**
	 * 方式二:队列先满了。然后将队列中所有值出队列
	 * 后重新开放队列
	 * @return
	 */
	public  int remove2() {

		if (isEmpty()) {
			System.out.println("队列是空的,无法删除");
			return -1;
		}
		//每次调用都要都加一,即下次弹出的是下一个,知道满
		int temp = queueArray[front++];
		if (front == maxSize) {
			front = 0;
		}
		//总的值
		nItemer--;

		return temp;

	}

	/**
	 * 插入数据
	 * 
	 * @param value
	 */
	public  void insert(int value) {
		//判断是否满了
		if (isFull()) {
			System.out.println("队列满了");
			return;
		}
		// 如果当前读取的索引在最大的位置上,则索引归位了-1
		if (rear == maxSize - 1) {
			rear = -1;
		}
		/*
		 * 插入后,游标指向增加。即      
		 * 假设rear=1  将传入的值赋值给 arg[2]后
		 * 前++是在赋值前就先+1
		 */
		queueArray[++rear] = value;
		nItemer++;

	}

	public static void main(String[] args) {

		MyQueue myQueue = new MyQueue(10);
		for (int i = 0; i < 12; i++) {
			if (!myQueue.isFull()) {
				myQueue.insert(i);
			}
		}
		for (int i = 0; i < myQueue.queueArray.length; i++) {

			System.out.print(myQueue.remove() + " ");
		}
	}

}

总结:

        队列差不多就是这样了,额,总结不知道总结什么。因为队列和栈一样原理都很相像。只是出的顺序不同而已。接下来小编将进入链表。和大家一起学习。


程序人生,与君共勉!




猜你喜欢

转载自blog.csdn.net/weixin_41622183/article/details/80522416