0
点赞
收藏
分享

微信扫一扫

环形队列(数组)的设计

豆丁趣 2022-01-23 阅读 86

环形队列,无非就是头和尾是连接起来的,避免资源的浪费,可以循环使用数组空间进行数据存储。

头指针head:指向当前第一个元素的位置称为头指针。

尾指针tail:指向当前最后一个元素的下一个位置为尾指针。

当前元素的数量 = (tail - head + size) % size

初始状态(空):head == tail

满:(tail+1)%size == head

初始状态图

满状态图(此时7位置是空的)

 

代码实现

public class CircleArray{
// 容量
private int size;
// 头指针
private int head;
// 尾指针
private int tail;
// 数组
private int[] array;

// 初始构造
public CircleArray(int size){
if (size <= 0){
throw new InvalidArgumentException("invalid size");
}
this.size = size;
array = new int[size];
}

// 队满判定
public boolean isFull(){
return (tail + 1) % size == head;
}

// 队空判定
public boolean isEmpty(){
return head == tail;
}

// 追加元素到队尾
public boolean enqueue(int entry){
if(isFull()){
return false;
}
array[tail] = entry;
tail = (tail + 1) % size;
return true;
}

// 出队
public Integer dequeue(){
if(isEmpty()){
return null;
}
int val = array[head];
head = (head + 1) % size;
return val;
}

// 打印队列
public void show(){
if(isEmpty()){
return;
}
for(int i= head; i< head + size(); i++){
System.out.printf("array[%d]=%d\n", i % size, array[i % size]);
}
}

// 元素个数
public int size(){
return (tail - head + size) % size;
}

// 查看队首元素
public Integer peek(){
if (isEmpty()){
return null;
}
return array[head];
}
}
举报

相关推荐

0 条评论