1.今天学习了队列里单向队列的使用
队列是一种特殊的线性表,单向队列只能在一端插入数据(后),另一端删除数据(前);它和栈一样,队列是一种操作受限制的线性表;进行插入操作的称为队尾,进行删除操作的称为队头;队列中的数据被称为元素;没有元素的队列称为空队列。
由于只能一端删除或者插入,所以只有最先进入队列的才能被删除,因此又被称为先进先出(FIFO—first in first out)线性表。
package com.lzw.demo;
/**
* @author lz w
* @Date 2019年5月15日
*/
public class MyQueue {
private Object[] queArray;
//队列总大小
private int maxSize;
//前端
private int front;
//后端
private int rear;
//队列中元素的实际数目
private int nItems;
public MyQueue(int s){
maxSize = s;
queArray = new Object[maxSize];
front = 0;
rear = -1;
nItems = 0;
}
//队列中新增数据
public void insert(int value){
if(isFull()){
System.out.println("队列已满!!!");
}else{
//如果队列尾部指向顶了,那么循环回来,执行队列的第一个元素
if(rear == maxSize -1){
rear = -1;
}
//队尾指针加1,然后在队尾指针处插入新的数据
queArray[++rear] = value;
nItems++;
}
}
//移除数据
public Object remove(){
Object removeValue = null;
if(!isEmpty()){
removeValue = queArray[front];
queArray[front] = null;
front++;
if(front == maxSize){
front = 0;
}
nItems--;
return removeValue;
}
return removeValue;
}
//查看对尾数据
public Object peekRear(){
return queArray[rear];
}
//查看对头数据
public Object peekFront(){
return queArray[front];
}
//判断队列是否满了
public boolean isFull(){
return (nItems == maxSize);
}
//判断队列是否为空
public boolean isEmpty(){
return (nItems ==0);
}
//返回队列的大小
public int getSize(){
return nItems;
}
public static void main(String[] args) {
MyQueue queue = new MyQueue(3);
queue.insert(1);
System.out.println("队列大小:"+queue.getSize());
queue.insert(2);
System.out.println("队列大小:"+queue.getSize());
queue.insert(3);//queArray数组数据为[1,2,3]
System.out.println("队列大小:"+queue.getSize());
System.out.println("队头:"+queue.peekFront()); //1
System.out.println("队尾:"+queue.peekRear());
queue.remove();//queArray数组数据为[null,2,3]
System.out.println(queue.peekFront()); //2
System.out.println("队列大小:"+queue.getSize());
queue.insert(4);//queArray数组数据为[4,2,3]
queue.insert(5);//队列已满,queArray数组数据为[4,2,3]
System.out.println("队列大小:"+queue.getSize());
System.out.println("队头:"+queue.peekFront()));
System.out.println("队尾:"+queue.peekRear());
}
}