zoukankan      html  css  js  c++  java
  • 队列——Java实现

      1 package struct;
      2  
      3 interface IQueue{
      4     //入队列
      5     void add(Object obj);
      6     //出队列
      7     Object remove();
      8     //队列中元素个数(栈大小)
      9     int size();
     10     //判断队列是否为空
     11      boolean isEmpty();
     12      //取队头元素
     13      Object getQueueHead();
     14      //取队尾元素
     15      Object getQueueTail();
     16      //清空队列
     17      void clear();
     18 }
     19 class Factory3{
     20     private Factory3(){}
     21     public static IQueue getIQueueInstance(){
     22         return new LinkQueueImpl();
     23     }
     24 }
     25 class LinkQueueImpl implements IQueue{
     26     Node head;//队列的头
     27     Node tail;//队列的尾
     28     int size;
     29     class Node{
     30         Node prev;
     31         Node next;
     32         Object data;
     33         public Node(Object data) {
     34             super();
     35             this.data = data;
     36         }
     37     }
     38     //入队列(头插)
     39     public void add(Object obj) {
     40         Node newNode = new Node(obj);
     41         //空队列
     42         if(head == null){
     43             head = newNode;
     44             tail = newNode;
     45             size++;
     46         }else{
     47             Node node  = tail;
     48             newNode.next = node;
     49             node.prev = newNode;
     50             tail = newNode;
     51             size++;
     52         }
     53     }
     54     //出队列(尾删)
     55     public Object remove() {
     56         if(isEmpty()){
     57             return "无要删除元素";
     58         }else if(head == tail){
     59             //只有一个元素的队列
     60             size--;
     61             return head.data;
     62         }else{
     63             Node node = head;
     64             head = node.prev;
     65             node.prev = null;
     66             size--;
     67             return head.data;
     68         }
     69     }
     70     //求队列长度
     71     public int size() {
     72         return size;
     73     }
     74     //求队列是否为空
     75     public boolean isEmpty() {
     76         return (size()==0);
     77     }
     78     //取队首元素
     79     public Object getQueueHead() {
     80         return head.data;
     81     }
     82     //取对尾元素
     83     public Object getQueueTail() {
     84         return tail.data;
     85     }
     86     //打印队列
     87     public void print(){
     88         myPrint(head);
     89     }
     90     //队首到对尾打印元素
     91     private void myPrint(Node head){
     92         for(Node node = head;node!=null;node = node.prev){
     93             System.out.print(node.data+" ");
     94         }
     95     }
     96     //置空队列
     97     public void clear() {
     98         if(head == null){
     99             System.out.println("空队列");
    100         }else{
    101             //非空队列
    102             Node node1 = tail;
    103             Node node = head;
    104             for(node = head;head!=tail;){
    105                 head = head.prev;
    106                 node.prev = null;
    107                 node.data = null;
    108                 size--;
    109             }
    110             node1.next = null;
    111             node1.data = null;
    112             size--;
    113         }
    114     }
    115 }
    116 public class LinkQueue {
    117     public static void main(String[] args) {
    118         IQueue queue = Factory3.getIQueueInstance();
    119         //向下转型
    120         LinkQueueImpl queue1 = (LinkQueueImpl)queue;
    121         System.out.println("以下为空队列测试情况");
    122         System.out.println("================remove测试函数==================");
    123         System.out.println(queue.remove());
    124         System.out.println("================size测试函数==================");
    125         System.out.println(queue.size());
    126         System.out.println("================isEmpty测试函数==================");
    127         System.out.println(queue.isEmpty());
    128         System.out.println("以下为非空队列测试情况");
    129         System.out.println("================add和print测试函数==================");
    130         queue.add("hello");
    131         queue.add("world!");
    132         queue.add("hi");
    133         queue.add("陕科大!");
    134         queue.add("today");
    135         queue.add("is");
    136         queue.add("4月18号!");
    137         queue1.print();
    138         System.out.println();
    139         System.out.println("================getQueueHead测试函数==================");
    140         System.out.println(queue.getQueueHead());
    141         System.out.println("================getQueueTail测试函数==================");
    142         System.out.println(queue.getQueueTail());
    143         System.out.println("================remove测试函数==================");
    144         System.out.println(queue.remove());
    145         System.out.println(queue.remove());
    146         System.out.println("================remove后print测试函数==================");
    147         queue1.print();
    148         System.out.println();
    149         System.out.println("================size测试函数==================");
    150         System.out.println(queue.size());
    151         System.out.println("================isEmpty测试函数==================");
    152         System.out.println(queue.isEmpty());
    153         System.out.println("================clear测试函数==================");
    154         queue.clear();
    155         System.out.println(queue.size());
    156     }
    157 }
    View Code

  • 相关阅读:
    配置DHCP Snooping防止DHCP Server仿冒者攻击示例
    初识kbmmw 的多语言支持
    kbmmw 5.16.0 发布
    sql去除注释
    markdown写ppt
    Kafka流处理内幕详解
    【转载】matplotlib.pyplot的使用总结大全(入门加进阶)
    魔方第三层旋转公式
    自动化机器学习方面的开源框架和商业服务列表
    进阶版OFA算法:CompOFA: Compound Once-for-all Networks
  • 原文地址:https://www.cnblogs.com/edda/p/12595003.html
Copyright © 2011-2022 走看看