数据结构学习笔记(四) 队列
队列:
具有一定约束的线性表。在一端插入,另外一端进行删除。
判断队列是否为空:
当rear = front = 0的时候(刚开始rear=front=0,增加元素rear+1,减少元素,front+1)
让数组成为循环队列:
front和rear都模数组的长度。
判断队列元素是否满:
当让一个数组作为一个循环队列的时候,队列满的时候也是rear = front,所以,这时候没有办法进行分辨。
解决:让数组不要存满,只存储n-1个元素(当(rear+1)%数组的长度 == front的时候,队列就满了)
队列的顺序存储(数组实现循环队列):
package queue; /** * front 和 rear 都为实际的数组下标,不是元素的个数 * @author 牟同学 * */ public class QueueArray { private static int[] a = new int[6]; //删除 private static int front ; //插入 private static int rear ; public static void main(String[] args) { System.out.println(insert(10)); System.out.println(insert(20)); show(); System.out.println(pop()); show(); } /** * 入队列 */ public static String insert(int item){ if((rear+1)%a.length == front){ return "队列已经满了"; } a[rear] = item; rear = (rear+1)%a.length; return item+"入队成功"; } /* * 出队列 */ public static String pop(){ if(front == rear){ return "队列为空"; } a[front] = 0; front = (front+1)%a.length; return "出队列成功"; } public static void show(){ System.out.println("队列元素为:"); for (int i = 0; i < a.length; i++) { if(a[i] != 0){ System.out.print(a[i]+" "); } } System.out.println(); } }
队列的链式存储:
package queue; import stack.Node; public class QueueChained { //不能指向队尾(对头元素) public static Node front ; //队尾 public static Node rear ; public static void main(String[] args) { System.out.println(insert(10)); System.out.println(insert(20)); show(); System.out.println(pop()); show(); } /** * 入队列 */ public static String insert(int item){ Node node = new Node(item); if(rear != null){ rear.next = node; }else{ rear = node; } rear = node; if(front == null){ front = node ; } return item+"插入成功"; } /** * 出队列 */ public static String pop(){ if(rear == null){ return "队列为空"; } //只有一个元素 if(front == rear){ front = rear = null; return front.data+"出队列成功"; }else{ int a = front.data; front = front.next; return front.data+"出队列成功"; } } public static void show(){ Node node = front; System.out.print("队列中的元素有:"); while(node != null){ System.out.print(node.data+" "); node = node.next; } System.out.println(); } }
Node类:
package queue; public class Node { public int data ; public Node next ; public Node(int data) { this.data = data; } }