标签:arr 队列 环形 int maxSize 数组 front public rear
队列:
数组队列(一次性存取,因为指针上移之后就没有下移过了):
class ArrayQueue{
private int maxSize;
private int front;
private int rear;
private int[] arr;
public ArrayQueue(int arrMaxSize){
maxSize=arrMaxSize;
front=-1;
rear=-1;
arr=new int[maxSize];
}
public boolean isFull(){
return rear==maxSize-1;
}
public boolean isEmpty(){
return rear==front;
}
public void addQueue(int n){
if (isFull()){
System.out.println("很遗憾,队列已满~");
}
rear++;
arr[rear]=n;
}
public int getQueue(){
if (isEmpty()){
throw new RuntimeException("没有数据可以取出~");
}else {
front++;
return arr[front];
}
}
public void showQueue(){
if (isEmpty()){
System.out.println("队列为空~");
}else {
for (int i=0;i<arr.length;i++) {
System.out.printf("arr[%d]\t%d\n",i,arr[i]);
}
}
}
public int getFront(){
if (isEmpty()){
throw new RuntimeException("没有数据可以取出~");
}else {
return arr[front+1];
}
}
存在问题:数组只有一次性就不能复用了
环形数组队列:
class CircleArray {
private int maxSize;
private int front;
private int rear;
private int[] arr;
public CircleArray(int arrMaxSize) {
maxSize = arrMaxSize;
front = 0;
rear = 0;
arr = new int[maxSize];
}
public boolean isFull() {
return (rear + 1) % maxSize == front;//取模是因为防止负数,就相当于取绝对值的意思
}
public boolean isEmpty() {
return rear == front;
}
public void addQueue(int n) {
if (isFull()) {
System.out.println("很遗憾,队列已满~");
}
arr[rear] = n;
rear = (rear + 1) % maxSize;
}
public int getQueue() {
if (isEmpty()) {
throw new RuntimeException("没有数据可以取出~");
} else {
int value=arr[front];
front=(front+1)%maxSize;
return value;
}
}
public void showQueue() {
if (isEmpty()) {
System.out.println("队列为空~");
} else {
for (int i = front; i < front+size(); i++) {
System.out.printf("arr[%d]\t%d\n", i%maxSize, arr[i%maxSize]);
}
}
}
public int getFront() {
if (isEmpty()) {
throw new RuntimeException("没有数据可以取出~");
} else {
return arr[front];
}
}
public int size(){
return (rear+maxSize-front)%maxSize;
}
}
maxsize是总的数组长度,但是实际上存放的数据是maxsize-1,要留一个位置来实现取模循环,比如maxsize=4,只能存三个数,到第三个数存放完毕的时候,rear=3,front=0,此时队列已满,然后出列一个数front=1;此时队列不满,然后插入一个数据rear就等于0了,此时队列又满了,就是通过 4运算来实现的循环。(可以画一个简单的草图易于理解)
标签:arr,队列,环形,int,maxSize,数组,front,public,rear 来源: https://blog.csdn.net/weixin_46558851/article/details/112244081
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。