java 数据结构算法之 队列

    简介:队列是一种特殊的线性表,只能在前端(front)进行删除操作,只能在后端(rear)进行删除操作;队列分为顺序队列和循环队列;

    顺序队列:每次插入,队尾指针rear加一,每次删除,队首指针front加一;

    循环队列:同顺序队列一样的操作,但在队尾指针达到容器末端的时候,需要将队尾指针指向数组下标0的位置,以便于重复利用删除过值的空间;

    队列原理:队列,不如说数组队列,相当于也是一个数组的变体,通过数组下标的控制来实现增、删、查、判空、判满等功能;主要是用一个队首指针和队尾指针的位置来监听整个队列的变化,循环的实现也是如此;


    java 代码:

public class Queue {
//队列类
//基本的属性
private int maxSize; //队列长度
private int[] queArray; //队列数组
private int front; //队首指针
private int rear; //队尾指针
private int count; //元素个数

//队列构造器
public Queue(int s) {
maxSize = s;
queArray = new int[maxSize];
front = 0;
rear = -1;
count = 0;
}

//插入队尾元素
public void insert(int i) {
if (rear == maxSize-1) {
rear = -1;
}
queArray[++rear] = i;
count++;
}

//移除队首元素
public int remove() {
int temp = queArray[front++];
if (front == maxSize) {
front = 0;
}
count--;
return temp;
}

//查询队首元素
public int peekFront() {
return queArray[front];
}

//判断队列是否为空
public boolean isEmpty() {
return (count == 0);
}

//判断队列是否已满
public boolean isFull() {
return (count == maxSize);
}

//获取队列中的元素个数
public int size() {
return count;
}

//获取队列的长度
public int getMaxSize() {
return maxSize;
}

}


public class Main {
public static void main(String[] args) {
Queue myQueue = new Queue(4);
for(int i = 0; i < myQueue.getMaxSize(); i++) {
myQueue.insert(i);
}
//移除队首的  0 1 2
myQueue.remove();
myQueue.remove();
myQueue.remove();
//在队尾插入4  5  6
myQueue.insert(4);
myQueue.insert(5);
myQueue.insert(6);

while(!myQueue.isEmpty()) {
System.out.print(myQueue.remove() + "\t");
}
}
}






发布了46 篇原创文章 · 获赞 3 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/fengwuJ/article/details/80205975