数据结构实现之栈

来源:互联网 发布:淘宝网创立时间 编辑:程序博客网 时间:2024/06/07 06:45
  1. 栈的定义
    先进后出的数据结构

  2. 栈API
    stack();构造函数
    int size();栈容量
    boolean isEmpty();栈是否为空
    void push(Item item);入栈
    Item pop(); 出栈
    Item peek(); 获取栈顶元素

  3. 栈的实现
    使用单链表实现,并支持迭代查询

package xwq.dt;import java.util.Iterator;import java.util.NoSuchElementException;import xwq.util.StdIn;import xwq.util.StdOut;/** *  Compilation:  javac Stack.java *  Execution:    java Stack < input.txt *  Dependencies: StdIn.java StdOut.java * *  使用单链表实现的栈 *  * @author xwq * * @param <Item> */public class Stack<Item> implements Iterable<Item>{    private Node<Item > first;//栈顶结点    private int N;//栈大小    private static class Node<Item> {        Item item;        Node<Item > next;     }    public Stack() {        first = null;        N = 0;    }    public boolean isEmpty() {        return first == null;    }    public int size() {        return N;    }    /**     * 入栈     * @param item     */    public void push(Item item) {        Node<Item > newNode = new Node<Item>();        newNode.item = item;        newNode.next = first;        first = newNode;        N++;    }    /**     * 出栈     * @return     */    public Item pop() {        if(isEmpty())            throw new NoSuchElementException("栈为空,不能执行pop操作!");        Item item = first.item;        first = first.next;        N--;        return item;    }    /**     * 获取栈顶元素     * @return     */    public Item peek() {        if(isEmpty())             throw new NoSuchElementException("栈为空,不能执行pop操作!");        return first.item;    }    @Override    public Iterator<Item> iterator() {        // TODO Auto-generated method stub        return new ListIterator<Item>(first);    }    private class ListIterator<Item > implements Iterator<Item> {        private Node<Item > current;        public ListIterator(Node<Item> first) {            current = first;        }        @Override        public boolean hasNext() {            return current != null;        }        @Override        public Item next() {            Item item = current.item;            current = current.next;            return item;        }        @Override        public void remove() {            // TODO Auto-generated method stub            throw new UnsupportedOperationException("不支持删除操作");        }    }    /**     * 测试函数     * @param args     */    public static void main(String[] args) {        Stack<String > stack = new Stack<String>();        while(!StdIn.isEmpty()) {            String s = StdIn.readString();            if(!s.equals("-"))  stack.push(s);            else if(!stack.isEmpty())   StdOut.println(stack.pop());        }        StdOut.println("size: " + stack.size());    }}
0 0
原创粉丝点击