• 队列


    队列是一种基于先进先出策略的数据集合。

    使用链表以及泛型机制来实现可以达到最优设计目标:

      (1)可以处理任意类型的数据;

      (2)所需的空间总是和集合的大小成正比;

      (3)操作所需的时间总是和集合的大小无关。

     1 import java.util.Scanner;
     2 import java.util.Iterator;
     3 
     4 public class Queue<Item> implements Iterable<Item>{
     5 
     6     private class Node{
     7         //LinkedList Node
     8         Item item = null;
     9         Node next = null;
    10     }
    11 
    12     private Node first = null;            //head
    13     private Node last = null;            //tail
    14     private int n = 0;                    //size
    15 
    16     public boolean isEmpty(){
    17         return first == null;
    18     }
    19 
    20     public int size(){
    21         return n;
    22     }
    23 
    24     public void enqueue(Item item){
    25         Node oldLast = last;
    26         last = new Node();
    27         last.item = item;
    28         last.next = null;
    29 
    30         if(isEmpty()){
    31             first = last;
    32         }
    33         else{
    34             oldLast.next = last;
    35         }
    36         n ++;
    37     }
    38 
    39     public Item dequeue(){
    40         Item item = first.item;
    41         first = first.next;
    42         if(isEmpty()){
    43             last = first;
    44         }
    45         n --;
    46         return item;
    47     }
    48 
    49     public Iterator<Item> iterator(){
    50         return new ListIterator();
    51     }
    52 
    53     private class ListIterator implements Iterator<Item>{
    54         private Node current = first;
    55 
    56         public boolean hasNext(){
    57             return current != null;
    58         }
    59 
    60         public Item next(){
    61             Item item = current.item;
    62             current = current.next;
    63             return item;
    64         }
    65 
    66         public void remove(){}
    67     }
    68 
    69     public static void main(String[] args) {
    70         Scanner in = new Scanner(System.in);
    71 
    72         Queue<String> q = new Queue<>();
    73         while(in.hasNext()){
    74             String item = in.next();
    75             if(!item.equals("-")){
    76                 q.enqueue(item);
    77             }
    78             else if(!q.isEmpty()){
    79                 System.out.print(q.dequeue() + " ");
    80             }
    81         }
    82 
    83         System.out.println("(" + q.size() + " left on stack)");
    84     }
    85 }

     (参考自《Algorithm 4th》)

  • 相关阅读:
    JQ轮播
    JS中正则匹配的三个方法match exec test的用法
    JavaScript 表单验证
    JS 控制CSS样式表
    AJAX 的简单用法:
    shell之运用sed将其值存到变量
    shell之创建文件及内容
    修复vbox的共享文件夹的符号链接错误
    字符转码
    php魔术方法
  • 原文地址:https://www.cnblogs.com/7hat/p/3718135.html
Copyright © 2020-2023  润新知