package LinkList;
public class QueueByArray{
// 数组长度
int len = 20;
// 数组
int[] arr = new int[len];
// 队头标志
int head_flag = 0; // 与队列中第一个元素对齐
// 队尾标志
int tail_flag = -1; // 与队列中最后一个元素对齐
int size = 0; // 队列中元素的个数
public QueueByArray(){
}
public QueueByArray(int len){
this.len = len;
arr = new int[len];
}
public void enQueue(int a){
if(size == len){
QueueExpand(); // 队列扩容
}
else if(tail_flag == len -1){
tail_flag = -1;
}
tail_flag++;
arr[tail_flag] = a;
size++; // 队列长度加1
}
public void enQueue_lenfix(int a){ // 队列长度固定,不可扩容
if(size == len){
System.out.println("队列满!无法入队!");
}
else if(tail_flag == len -1){
tail_flag = -1; // 队列未满,队尾标志到数组最后一个位置,前移该标志
}
tail_flag++;
arr[tail_flag] = a;
size++; // 队列长度加1
}
public int deQueue(){
if(size == 0){
// System.out.println("队空!无法出队!");
return -1;
}
int a = arr[head_flag]; // 取队头元素出队
// System.out.println("出队:" + a);
head_flag++; // 队头元素后移
if(head_flag == len){
head_flag = 0;
}
size--; // 队列元素个数减1
return a;
}
public void QueueExpand(){
int[] arr1 = new int[len * 2];
if(tail_flag < head_flag){
System.arraycopy(arr,head_flag,arr1,0,len - head_flag + 1);
System.arraycopy(arr,0,arr1,len - head_flag,tail_flag + 1);
}
else{
System.arraycopy(arr,head_flag,arr1,0,tail_flag - head_flag + 1);
}
arr = arr1;
head_flag = 0;
tail_flag = len - 1;
len = len * 2;
}
public void PrintQueue(){
if(size == 0){
System.out.println("队空!");
return;
}
System.out.print("打印队列:队头" + "\t");
if(tail_flag < head_flag) {
for (int i = head_flag; i < len; i++) {
System.out.print(arr[i] + "\t");
}
for(int i = 0;i <= tail_flag;i++){
System.out.print(arr[i] + "\t");
}
}
else{
for(int i = head_flag;i <= tail_flag;i++){
System.out.print(arr[i] + "\t");
}
}
System.out.print("队尾");
}
public void PrintStackByQueue(){
System.out.println(" 栈顶");
if(tail_flag < head_flag) {
for(int i = tail_flag;i >= 0;i--){
System.out.println("| " + arr[i] + " |");
}
for (int i = len - 1; i >= head_flag; i--) {
System.out.println("| " + arr[i] + " |");
}
}
else{
for(int i = tail_flag;i >= head_flag;i--){
System.out.println("| " + arr[i] + " |");
}
}
System.out.println(" 栈底");
}
public boolean isEmpty(){
return size != 0;
}
public static void main(String[] args) {
QueueByArray queue = new QueueByArray(5);
queue.enQueue_lenfix(1);
queue.enQueue_lenfix(2);
queue.enQueue_lenfix(3);
queue.enQueue_lenfix(4);
queue.enQueue_lenfix(5);
// queue.enQueue(1);
// queue.enQueue(2);
// queue.enQueue(3);
// queue.enQueue(4);
// queue.enQueue(5);
queue.PrintQueue();
System.out.println();
//
// queue.deQueue();
// queue.deQueue();
// queue.deQueue();
//
// queue.PrintQueue();
// System.out.println();
// queue.enQueue(6);
// queue.enQueue(7);
//
// queue.deQueue();
// queue.PrintQueue();
//
// System.out.println();
queue.deQueue();
queue.deQueue();
queue.deQueue();
queue.deQueue();
queue.deQueue();
queue.deQueue();
queue.deQueue();
queue.deQueue();
queue.deQueue();
queue.deQueue();
}
}
输出
出队:1
打印队列:队头 2 3 4 5 6 7 队尾
出队:2
出队:3
出队:4
出队:5
出队:6
出队:7
队空!无法出队!
队空!无法出队!
队空!无法出队!
队空!无法出队!