zoukankan      html  css  js  c++  java
  • 算法(Algorithms)第4版 练习 1.3.7

    package com.qiusongde;
    
    import java.util.Iterator;
    import java.util.NoSuchElementException;
    
    import edu.princeton.cs.algs4.StdIn;
    import edu.princeton.cs.algs4.StdOut;
    
    public class Stack<Item> implements Iterable<Item> {
    
        private Node first;
        private int n;
        
        private class Node {
            Item item;
            Node next;
        }
        
        public Stack() {
            first = null;
            n = 0;
        }
        
        public void push(Item item) {
            Node oldfirst = first;
            
            first = new Node();
            first.item = item;
            first.next = oldfirst;
            
            n++;
        }
        
        public Item pop() {
            
            if(isEmpty()) 
                throw new NoSuchElementException("Stack is empty");
            
            Item item = first.item;
            first = first.next;
            n--;
            
            return item;
        }
        
        //1.3.7
        public Item peek() {
            if(isEmpty())
                throw new NoSuchElementException("Stack is empty");
            
            return first.item;
        }
        
        public boolean isEmpty() {
            return first == null;
        }
        
        public int size() {
            return n;
        }
    
        @Override
        public Iterator<Item> iterator() {
            
            return new StackIterator();
        }
        
        private class StackIterator implements Iterator<Item> {
    
            private Node current = first;
            
            @Override
            public boolean hasNext() {
                return current != null;
            }
    
            @Override
            public Item next() {
                if(!hasNext())
                    throw new NoSuchElementException("Stack is empty");
                
                Item item = current.item;
                current = current.next;
                
                return item;
            }
    
            @Override
            public void remove() {
                throw new UnsupportedOperationException("Stack don't support remove");
            }
            
        }
        
        public static void main(String[] args) {
            
            Stack<String> stack = new Stack<String>();
            StdOut.println("Initialized size:" + stack.size());
            
            while (!StdIn.isEmpty()) {
                
                String item = StdIn.readString();
                
                if (!item.equals("-")) {
                    
                    stack.push(item); 
                    StdOut.println("push success:" + item + " size:" + stack.size());
                    
                    StdOut.print("Left on stack: ");
                    for (String s : stack) {
                        StdOut.print(s + " ");
                    }
                    StdOut.println();
                    
                } else {
                    if(stack.isEmpty())
                        StdOut.println("pop error, stack empty");
                    else {
                        StdOut.println("pop success:" + stack.pop() + " size:" + stack.size());
                        
                        StdOut.print("Left on stack: ");
                        for (String s : stack) {
                            StdOut.print(s + " ");
                        }
                        StdOut.println();
                    }
                }
                
            }
            
        }
        
    }
  • 相关阅读:
    环形二维数组
    梦断代码(三)
    梦断代码(二)
    梦断代码(一)
    CNblogs用户体验
    《软件工程》--读书笔记三
    《软件工程》--读书笔记二
    《软件工程》--读书笔记一
    找出水王
    典型用户
  • 原文地址:https://www.cnblogs.com/songdechiu/p/6513932.html
Copyright © 2011-2022 走看看