package struct; interface IQueue{ //入队列 void add(Object obj); //出队列 Object remove(); //队列中元素个数(栈大小) int size(); //判断队列是否为空 boolean isEmpty(); //取队头元素 Object getQueueHead(); //取队尾元素 Object getQueueTail(); //清空队列 void clear(); } class Factory3{ private Factory3(){} public static IQueue getIQueueInstance(){ return new LinkQueueImpl(); } } class LinkQueueImpl implements IQueue{ Node head;//队列的头 Node tail;//队列的尾 int size; class Node{ Node prev; Node next; Object data; public Node(Object data) { super(); this.data = data; } } //入队列(头插) public void add(Object obj) { Node newNode = new Node(obj); //空队列 if(head == null){ head = newNode; tail = newNode; size++; }else{ Node node = tail; newNode.next = node; node.prev = newNode; tail = newNode; size++; } } //出队列(尾删) public Object remove() { if(isEmpty()){ return "无要删除元素"; }else if(head == tail){ //只有一个元素的队列 size--; return head.data; }else{ Node node = head; head = node.prev; node.prev = null; size--; return head.data; } } //求队列长度 public int size() { return size; } //求队列是否为空 public boolean isEmpty() { return (size()==0); } //取队首元素 public Object getQueueHead() { return head.data; } //取对尾元素 public Object getQueueTail() { return tail.data; } //打印队列 public void print(){ myPrint(head); } //队首到对尾打印元素 private void myPrint(Node head){ for(Node node = head;node!=null;node = node.prev){ System.out.print(node.data+" "); } } //置空队列 public void clear() { if(head == null){ System.out.println("空队列"); }else{ //非空队列 Node node1 = tail; Node node = head; for(node = head;head!=tail;){ head = head.prev; node.prev = null; node.data = null; size--; } node1.next = null; node1.data = null; size--; } } } public class LinkQueue { public static void main(String[] args) { IQueue queue = Factory3.getIQueueInstance(); //向下转型 LinkQueueImpl queue1 = (LinkQueueImpl)queue; System.out.println("以下为空队列测试情况"); System.out.println("================remove测试函数=================="); System.out.println(queue.remove()); System.out.println("================size测试函数=================="); System.out.println(queue.size()); System.out.println("================isEmpty测试函数=================="); System.out.println(queue.isEmpty()); System.out.println("以下为非空队列测试情况"); System.out.println("================add和print测试函数=================="); queue.add("hello"); queue.add("world!"); queue.add("hi"); queue.add("陕科大!"); queue.add("today"); queue.add("is"); queue.add("4月18号!"); queue1.print(); System.out.println(); System.out.println("================getQueueHead测试函数=================="); System.out.println(queue.getQueueHead()); System.out.println("================getQueueTail测试函数=================="); System.out.println(queue.getQueueTail()); System.out.println("================remove测试函数=================="); System.out.println(queue.remove()); System.out.println(queue.remove()); System.out.println("================remove后print测试函数=================="); queue1.print(); System.out.println(); System.out.println("================size测试函数=================="); System.out.println(queue.size()); System.out.println("================isEmpty测试函数=================="); System.out.println(queue.isEmpty()); System.out.println("================clear测试函数=================="); queue.clear(); System.out.println(queue.size()); } }
队列——Java实现
猜你喜欢
转载自blog.csdn.net/qq_40409115/article/details/79996738
今日推荐
周排行