泛型定容栈

来源:互联网 发布:arm linux nohup 编辑:程序博客网 时间:2024/05/22 14:55
//一种表示泛型定容栈的抽象数据类型package Algorithms;import java.util.Iterator;import java.util.NoSuchElementException;import edu.princeton.cs.algs4.StdIn;import edu.princeton.cs.algs4.StdOut;public class P84_FixedCapacityStack<Item> implements Iterable<Item> {    private Item[] a;    // holds the items    private int N;       // number of items in stack    // create an empty stack with given capacity    public P84_FixedCapacityStack(int capacity) {        a = (Item[]) new Object[capacity];   // no generic array creation        N = 0;    }    public boolean isEmpty()          {  return N == 0;                    }    public void push(Item item)       {  a[N++] = item;                    }    public Item pop()                 {  return a[--N];                    }    public Iterator<Item> iterator()  { return new ReverseArrayIterator(); }    public class ReverseArrayIterator implements Iterator<Item> {        private int i = N-1;        public boolean hasNext() {            return i >= 0;        }        public Item next() {            if (!hasNext()) throw new NoSuchElementException();            return a[i--];        }        public void remove() {            throw new UnsupportedOperationException();        }    }    public static void main(String[] args) {        int max = Integer.parseInt(args[0]);        P84_FixedCapacityStack<String> stack = new P84_FixedCapacityStack<String>(max);        while (!StdIn.isEmpty()) {            String item = StdIn.readString();            if (!item.equals("-")) stack.push(item);             else if (stack.isEmpty())  StdOut.println("BAD INPUT");             else                       StdOut.print(stack.pop() + " ");        }        StdOut.println();        // print what's left on the stack        StdOut.print("Left on stack: ");        for (String s : stack) {            StdOut.print(s + " ");        }        StdOut.println();    } } 

0 0