使用数组和链表实现栈

来源:互联网 发布:淘宝流量钱包兑换 编辑:程序博客网 时间:2024/06/11 04:53

栈数据结构中常用的模型,以下分别使用数组和链表实现堆栈。

import java.util.Iterator;/** * Created by wang on 16-12-18. */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[] temp = (Item[]) new Object[max];        for (int i = 0; i < N; i++)            temp[i] = a[i];        a = temp;    }    public void push(Item item) {        if (N == a.length) resize(2 * a.length);        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;    }    @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];        }    }}

import java.util.Iterator;/** * Created by wang on 16-12-18. */public class LinkedListStack<Item> implements Iterable<Item> {    private Node first;    private int N;    private class Node {        Item item;        Node next;    }    public boolean isEmpty() {        return first == null;    }    public int size() {        return N;    }    public void push(Item item) {        Node oldfirst = first;        first = new Node();        first.item = item;        first.next = oldfirst;        N++;    }    public Item pop() {        Item item = first.item;        first = first.next;        N--;        return item;    }    @Override    public Iterator<Item> iterator() {        return new LinkedListStackIterator();    }    private class LinkedListStackIterator implements Iterator<Item> {        private Node current = first;        @Override        public boolean hasNext() {            return current != null;        }        @Override        public Item next() {            Item item = current.item;            current = current.next;            return item;        }    }}



0 0
原创粉丝点击