The effect of division

Imagine putting a team of people in the playground runway, and the feeling of circulation comes out

In order to distinguish between empty queues and full queues, a space needs to be reserved It is equivalent to not allowing end to end connection You'd better draw a picture, otherwise it's easy to get into the pit

With chain structure, space allocation and recovery are done by the system, and with circular queue, it is controlled by itself Imagine that you are writing an operating system. From this code, you can feel the memory management

Integer queue code

package datastructure.list; /** * @author goudiyuan */ public class CircularqQuene { //Length of declaration queue public final int TAOTAL_SPACE = 10; //Where to store elements int data[]; //Queue header int head; //Queue tail int tail; //Construction method public CircularqQuene() { data = new int[TAOTAL_SPACE]; head = 0; tail = 0; } //Join the team public void enQueue(int paraValue) { if ((tail + 1) % TAOTAL_SPACE == head) { System.out.println("The queue is full"); return; } data[tail % TAOTAL_SPACE] = paraValue; tail++; } //Out of the team public int deQueue() { if (head == tail) { System.out.println("There are no more elements in the queue"); return -1; } int resultValue = data[head % TAOTAL_SPACE]; head++; return resultValue; } //Override the parent toString method public String toString() { String resultString = ""; if (head == tail) { return "Empty queue"; } for (int i = head; i < tail; i++) { resultString += data[i % TAOTAL_SPACE] + ","; } return resultString; } //Main function entry public static void main(String[] args) { CircularqQuene tempQueue = new CircularqQuene(); System.out.println("After initialization, the queue is:" + tempQueue.toString()); for (int i = 0; i < 5; i++) { tempQueue.enQueue(i + 1); } System.out.println("After joining the queue, the queue is:" + tempQueue.toString()); int tempValue = tempQueue.deQueue(); System.out.println("Will element" + tempValue + "After leaving the queue, the queue is" + tempQueue.toString()); for (int i = 0; i < 6; i++) { tempQueue.enQueue(i + 10); System.out.println("After joining the queue, the queue is:" + tempQueue.toString()); } for (int i = 0; i < 3; i++) { tempValue = tempQueue.deQueue(); System.out.println("Will element" + tempValue + "After leaving the queue, the queue is" + tempQueue.toString()); } for (int i = 0; i < 6; i++) { tempQueue.enQueue(i + 100); System.out.println("After joining the queue, the queue is:" + tempQueue.toString()); } } }

Operation results

After initialization, the queue is empty

After joining the team, the queue is: 1,2,3,4,5,

After element 1 is dequeued, the queue is 2,3,4,5,

After joining the team, the queue is: 2,3,4,5,10,

After joining the team, the queue is: 2,3,4,5,10,11,

After joining the team, the queue is: 2,3,4,5,10,11,12,

After joining the team, the queue is: 2,3,4,5,10,11,12,13,

After joining the team, the queue is: 2,3,4,5,10,11,12,13,14,

The queue is full

After joining the team, the queue is: 2,3,4,5,10,11,12,13,14,

After element 2 is dequeued, the queue is 3,4,5,10,11,12,13,14,

After element 3 is dequeued, the queue is 4,5,10,11,12,13,14,

After element 4 is dequeued, the queue is 5,10,11,12,13,14,

After joining the team, the queue is: 5,10,11,12,13,14100,

After joining the team, the queue is: 5,10,11,12,13,14100101,

After joining the team, the queue is: 5, 10, 11, 12, 13, 14100101102,

The queue is full

After joining the team, the queue is: 5, 10, 11, 12, 13, 14100101102,

The queue is full

After joining the team, the queue is: 5, 10, 11, 12, 13, 14100101102,

The queue is full

After joining the team, the queue is: 5, 10, 11, 12, 13, 14100101102,

Since string matching is used later, the data type of the queue is changed to char

code

package datastructure.list; /** * @author goudiyuan */ public class CirclecharQueue { // queue length public static final int TOTAL_SPACE = 10; // Where the queue holds data char[] data; // Head pointer int head; // Tail pointer int tail; // Construction method public CirclecharQueue() { data = new char[TOTAL_SPACE]; head = 0; tail = 0; } // Join the team public void enqueue(char paraValue) { if ((tail + 1) % TOTAL_SPACE == head) { System.out.println("The queue is full."); return; } data[tail % TOTAL_SPACE] = paraValue; tail++; } // Out of the team public char dequeue() { if (head == tail) { System.out.println("There are no more elements in the queue"); return '\0'; } char resultValue = data[head % TOTAL_SPACE]; head++; return resultValue; } // Override the parent toString method public String toString() { String resultString = ""; if (head == tail) { return "empty"; } for (int i = head; i < tail; i++) { resultString += data[i % TOTAL_SPACE] + ", "; } return resultString; } // Function entry public static void main(String args[]) { CirclecharQueue tempQueue = new CirclecharQueue(); System.out.println("After initialization, the queue is " + tempQueue.toString()); for (char i = '0'; i < '5'; i++) { tempQueue.enqueue(i); } System.out.println("After joining the queue, the queue is: " + tempQueue.toString()); char tempValue = tempQueue.dequeue(); System.out.println("Will element " + tempValue + "After leaving the queue, the queue is: " + tempQueue.toString()); for (char i = 'a'; i < 'f'; i++) { tempQueue.enqueue(i); System.out.println("After joining the queue, the queue is: " + tempQueue.toString()); } for (int i = 0; i < 3; i++) { tempValue = tempQueue.dequeue(); System.out.println("Will element " + tempValue + "After leaving the queue, the queue is: " + tempQueue.toString()); } for (char i = 'A'; i < 'F'; i++) { tempQueue.enqueue(i); System.out.println("After joining the queue, the queue is: " + tempQueue.toString()); } } }

Operation results

After initialization, the queue is empty

After joining the queue, the queue is: 0, 1, 2, 3, 4

After the element 0 is dequeued, the queue is: 1, 2, 3, 4

After joining the team, the queue is: 1, 2, 3, 4, a

After joining the team, the queue is: 1, 2, 3, 4, a, b

After joining the team, the queue is: 1, 2, 3, 4, a, b, c

After joining the team, the queue is: 1, 2, 3, 4, a, b, c, d

After joining the team, the queue is: 1, 2, 3, 4, a, b, c, d, e

After element 1 is dequeued, the queue is: 2, 3, 4, a, b, c, d, e

After element 2 is dequeued, the queue is: 3, 4, a, b, c, d, e

After element 3 is dequeued, the queue is: 4, a, b, c, d, e

After joining the team, the queue is: 4, a, b, c, d, e, A

After joining the team, the queue is: 4, a, b, c, d, e, A, B

After joining the team, the queue is: 4, a, b, c, d, e, A, B, C

The queue is full

After joining the team, the queue is: 4, a, b, c, d, e, A, B, C

The queue is full

After joining the team, the queue is: 4, a, b, c, d, e, A, B, C