1.链队列的优势劣势
链队列的长度是动态增长的
需要消耗空间用来存放指针
2.链队列的实现 //外部类不能直接调用内部类属性
1.入队列操作,采用内部类的方式,内部类是结点类Node,定义了next和data数据域。外部类是链队列类,定义了头指针top和尾指针rear,定义了count用来记录队列中元素个数。进行入队列操作时候要判断是不是第一次入队列,第一次入队列要将top和rear都指向当前结点。如果不是第一次入队列,那么top指针不移动,rear.next代表的是上一个结点的指针域,将新入队列的结点的首地址赋值给rear.next,此时上一个结点和当前新插入的结点就连接起来了;最后移动rear指针,rear指向当前插入结点。
2.出队列操作:此时要判断队列是否为空,如果不为空则移动top指向下一个结点。这里的注意要点是需要定义一个中间变量存放当前top的值用来返回出队列的值。
1 package Queue; 2 /** 3 * @类名 LinkQueue.java 4 * @作者 修仙小华 5 * @版本 V1.0 6 * @日期 2019年7月26日-下午1:16:46 7 * @描述 8 * *队列是一种逻辑结构,队列的链式实现 9 */ 10 public class LinkQueue { 11 Node top; 12 Node rear; 13 int count=0; 14 /** 15 * 入队列 16 */ 17 public void push(String data) { 18 Node node=new Node(data); 19 if (top==null) { 20 top=node; 21 rear=node; 22 }else { 23 rear.next=node; 24 rear=node; 25 } 26 count++; 27 } 28 /** 29 * 出队列 30 */ 31 public String pop() { 32 if (top==null) { 33 return null; 34 }else { 35 Node temp=top; 36 top=top.next; 37 this.count--; 38 return temp.data; 39 } 40 } 41 42 43 44 class Node{ 45 public String data; 46 Node next; 47 /** 48 * 有参构造和无参构造 49 */ 50 public Node() { 51 52 } 53 public Node(String data) { 54 this.data=data; 55 } 56 57 } 58 }
测试类:
1 public class LinkQueueText { 2 public static void main(String[] args) { 3 LinkQueue link=new LinkQueue(); 4 link.push("张三"); 5 link.push("李四"); 6 link.push("王二"); 7 link.push("麻子"); 8 link.push("狗帅"); 9 System.out.println(link.pop()); 10 System.out.println(link.pop()); 11 System.out.println(link.pop()); 12 System.out.println(link.count); 13 } 14 15 }