下压栈:动态数组实现

来源:互联网 发布:电子线路的仿真软件 编辑:程序博客网 时间:2024/04/28 10:53

栈解释

// 栈是限制插入和删除只能在一个位置上进行的表;
// 通过push向栈输入,通过pop和栈顶指针从栈输出;
// 栈模型:只有栈顶元素是可访问的。

这里写图片描述

Java实现

package com.base;import java.util.EmptyStackException;import java.util.Iterator;/** * 下压栈:动态数组实现 *  * @author Administrator * */public class ResizingArrayStack<Item> implements Iterable<Item> {    private Item[] a = (Item[]) new Object[1]; // 栈元素    private int N = 0;    public boolean isEmpty() {        return N == 0;    }    public int size() {        return N;    }    // 扩容    private void resize(int max) {        Item[] tmp = (Item[]) new Object[max];        for (int i = 0; i < N; i++) {            tmp[i] = a[i];        }        a = tmp;    }    // 入栈    public void push(Item item) {        if (N == a.length) {            resize(a.length * 2);        }        a[N++] = item;    }    // 出栈    public Item pop() {        Item item = a[--N];        a[N] = null;        if (N > 0 && N == a.length / 4) {            resize(a.length / 2);        }        return item;    }    // 查看栈顶元素    public Item peek() {        if (isEmpty()) {            throw new EmptyStackException();        }        return a[N - 1];    }    @Override    public Iterator<Item> iterator() {        return new ReverseArrayIterator();    }    // 迭代器——逆序迭代    private class ReverseArrayIterator implements Iterator<Item> {        private int i = N;        @Override        public boolean hasNext() {            return i > 0;        }        @Override        public Item next() {            return a[--i];        }        @Override        public void remove() {        }    }    public static void main(String[] args){        ResizingArrayStack<String> ras = new ResizingArrayStack<>();        System.out.println("元素个数" + ras.size());        ras.push("www.");        ras.push("baidu");        ras.push(".com");        ras.push(".cn");        System.out.println("栈顶元素" + ras.peek());        System.out.println("--栈元素个数" + ras.size());        ras.pop();        System.out.println("栈顶元素" + ras.peek());        System.out.println("--栈元素个数" + ras.size());        Iterator<String> itr = ras.iterator();        while(itr.hasNext()){            System.out.println(itr.next());        }    }}
0 0
原创粉丝点击