队列
1.环形,队头front,队尾rear
2.队头所指的data位置不放值
3.队满条件:(rear+1)%MaxSize == front
4.队空条件:reat == front
5.指针都是逆时针走,+1
package Queue;
import java.util.Scanner;
class Queue
{
final int MaxSize = 5;
int data[];
int front;
int rear;
public Queue()
{
data = new int[MaxSize];
front = 0;
rear = 0;
}
public boolean QueueEmpty()
{
if (front == rear)
{
return true;
} else
return false;
}
public void enQueue(int n)
{
if ((rear + 1) % MaxSize == front) //队满
{
System.out.println("Queue full!");
return;
}
rear = (rear + 1) % MaxSize;
data[rear] = n; // 存到队尾+1
}
public int deQueue()
{
if (rear == front) //队空
{
System.out.println("Queue empty!");
return -1;
}
front = (front + 1) % MaxSize; // 队头不存值,值在头+1
int n = data[front];
return n;
}
}
public class MyQueue
{
public static void main(String args[])
{
Scanner cin = new Scanner(System.in);
Queue q = new Queue();
for (int i = 0; i < 4; i++)
q.enQueue(i);
System.out.println("front:" + q.front + " rear:" + q.rear);
while (!q.QueueEmpty())
{
System.out.print(q.deQueue() + " ");
System.out.println("front:" + q.front + " rear:" + q.rear);
}
System.out.println();
for (int i = 0; i < 4; i++)
q.enQueue(i);
System.out.println("front:" + q.front + " rear:" + q.rear);
while (!q.QueueEmpty())
{
System.out.print(q.deQueue() + " ");
System.out.println("front:" + q.front + " rear:" + q.rear);
}
}
}
输出:
front:0 rear:4
0 front:1 rear:4
1 front:2 rear:4
2 front:3 rear:4
3 front:4 rear:4
front:4 rear:3
0 front:0 rear:3
1 front:1 rear:3
2 front:2 rear:3
3 front:3 rear:3