码迷,mamicode.com
首页 > 其他好文 > 详细

队列

时间:2014-05-09 16:21:31      阅读:288      评论:0      收藏:0      [点我收藏+]

标签:blog   class   code   java   ext   http   

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

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

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

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

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

bubuko.com,布布扣
 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 }
bubuko.com,布布扣

 (参考自《Algorithm 4th》)

队列,布布扣,bubuko.com

队列

标签:blog   class   code   java   ext   http   

原文地址:http://www.cnblogs.com/7hat/p/3718135.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!