A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ﹏゛心被伱牵 中级黑马   /  2012-10-24 10:22  /  2004 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

我们一般怎么用java现有的东西来模拟栈,比如弹出数据,压入数据等,想写这样一个类,查了API,发现很多可以,大家这怎么弄了,还要队列?

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

3 个回复

倒序浏览
用数组和链表都可以实现的, 很简单的算法。

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
现在基本上都是自己实现Stack 类了 , 应为JDK 提供的Stack 是线程不安全的 , 我们可以用LinkedList类来实现Stack 和Queue , LinkedList提供了丰富的方法来实现这两个类
比如这些
boolean add(E e)
          将指定元素添加到此列表的结尾。
void add(int index, E element)
          在此列表中指定的位置插入指定的元素。
boolean addAll(Collection<? extends E> c)
          添加指定 collection 中的所有元素到此列表的结尾,顺序是指定 collection 的迭代器返回这些元素的顺序。
boolean addAll(int index, Collection<? extends E> c)
          将指定 collection 中的所有元素从指定位置开始插入此列表。
void addFirst(E e)
          将指定元素插入此列表的开头。
void addLast(E e)
          将指定元素添加到此列表的结尾。
void clear()
          从此列表中移除所有元素。
Object clone()
          返回此 LinkedList 的浅表副本。
boolean contains(Object o)
          如果此列表包含指定元素,则返回 true。
Iterator<E> descendingIterator()
          返回以逆向顺序在此双端队列的元素上进行迭代的迭代器。
E element()
          获取但不移除此列表的头(第一个元素)。
E get(int index)
          返回此列表中指定位置处的元素。
E getFirst()
          返回此列表的第一个元素。
E getLast()
          返回此列表的最后一个元素。
int indexOf(Object o)
          返回此列表中首次出现的指定元素的索引,如果此列表中不包含该元素,则返回 -1。
int lastIndexOf(Object o)
          返回此列表中最后出现的指定元素的索引,如果此列表中不包含该元素,则返回 -1。
ListIterator<E> listIterator(int index)
          返回此列表中的元素的列表迭代器(按适当顺序),从列表中指定位置开始。

评分

参与人数 1技术分 +1 收起 理由
韩军博 + 1

查看全部评分

回复 使用道具 举报
楼主可以自己测试一下...
public class MyArrayStack {
        Object[] array; // 数组结构用来保存栈中数据
        int top; // 栈中指针,永远指向栈顶的元素
        int size; // 栈的大小
        int count; // 记录栈中有多少数据

        public MyArrayStack(int size) {
                array = new Object[size];
                top = -1;// 栈底的下一个位置
                count = 0;

        }

        /**
         * 入栈操作
         */
        public void push(Object o) {
                // 判断栈是否已经满了,满了就不能继续添加
                if (this.isFull()) {
                        System.out.println("栈已经满了,不能继续添加数据");
                        return;
                }
                top++; // 栈顶指针向上移动一位
                count++; // 栈中元素个数加一
                this.array[top] = o; // 赋值
        }

        /**
         * 弹出栈顶元素
         */
        public Object pop() {
                // 先判断栈是否为空,然后在操作。
                if (isEmpty()) {
                        System.out.println("栈一空,没有数据");
                        return null;
                }
                Object object = this.array[top];
                top--;
                count--;
                return object;

        }

        /**
         * 判断栈是否满
         */
        public boolean isFull() {
                return this.count == this.size;
        }

        /**
         * 判断栈是否为空
         */
        public boolean isEmpty() {
                return this.count == 0;
        }
}

评分

参与人数 1技术分 +1 收起 理由
韩军博 + 1 很给力!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马