• 算法(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();
                    }
                }
                
            }
            
        }
        
    }
  • 相关阅读:
    C#委托、事件、消息(入门级)
    WinForm编程数据视图之DataGridView浅析(续)
    WinForm编程数据视图之DataGridView浅析
    在Java窗体表格中插入复选框
    单向链表(单链表)的Java实现
    C#委托、事件、消息(入门级)(续)
    Windows7操作系统自定义运行命令(简单方法之一)
    Unity的外部配置文件使用方法
    aspnet_regsql如何给sqlexpress添加aspnetdb
    联想Y530改装XP经验
  • 原文地址:https://www.cnblogs.com/songdechiu/p/6513932.html
Copyright © 2020-2023  润新知