用java数组实现栈

原创 2016年05月30日 13:06:30

栈是一种常见的数据结构。如果用一句话来概括栈的特点,估计大部分同学都能脱口而出:后进先出,即先进来的元素保存在栈的最底部,新来的元素则在栈顶堆积,直到栈满为止;而取元素的时候,只能从栈顶取,直到栈空为止。整个过程,与摞书的过程很类似:放书的时候都是摞在最上面,取书的时候也是从最上面开始取。要想取出下面的书,就必须先将上面的书先取走。

原理就讲这么多,本身也比较简单。接下来,照例是咱们的口号:
talk is cheap, show me the code

package leilei.bit.edu.stacktest;

/**
 * @author lei.wang
 *
 */

public class Stack {

    //存数据的数组
    int[] data;

    //栈的最大长度
    private int size;
    //栈顶的位置
    private int top;

    public Stack(int size) {
        this.size = size;
        data = new int[size];
        top = -1;
    }

    public int getSize() {
        return size;
    }

    public int getTop() {
        return top;
    }

    /**
     * 判断是否为空栈
     * @return
     */
    public boolean isEmpty()     {
        return top == -1;
    }

    /**
     * 判断是否为满栈
     * @return
     */
    public boolean isFull() {
        return (top+1) == size;
    }

    /**
     * 压栈操作
     * @param data
     * @return
     */
    public boolean push(int data) {
        if(isFull()) {
            System.out.println("the stack is full!");
            return false;
        } else {
            top++;
            this.data[top] = data;
            return true;
        }
    }


    /**
     *  弹栈操作
     * @return
     * @throws Exception
     */
    public int pop() throws Exception {
        if(isEmpty()) {
            throw new Exception("the stack is empty!");
        } else {
            return this.data[top--];
        }
    }

    /**
     * 获取栈顶的元素,但不弹栈
     * @return
     */
    public int peek() {
        return this.data[getTop()];
    }

    public static void main(String[] args) {
        Stack stack = new Stack(20);
        stack.push(0);
        stack.push(1);
        stack.push(2);
        stack.push(3);
        System.out.println("Now the top_num is:" + stack.peek());

        while(! stack.isEmpty()) {
            try {
                System.out.println(stack.pop());
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

代码运行结果

Now the top_num is:3
3
2
1
0

代码本身比较简单,就不在过多解释,如果还有不懂的地方请看注释;注释还不懂的话,请留言。

版权声明:本文为博主原创文章,未经博主允许不得转载。

Java数组实现自定义栈

栈是一种“先进后出(FILO)”的数据结构,最后压入的数据项总是位于栈顶的位置,下面是维基百科中对栈的定义: 堆栈(英语:stack),也可直接称栈。台湾作堆叠,在计算机科学中,是一种特殊的串行形...

C语言数组实现栈操作

#include #include int * array=NULL;//存放栈元素的数组 int count=0;//当前栈的元素个数//初始化栈 void init_stack(int size...

用数组实现堆栈

堆栈(stack)是一组相同数据类型数据的集合,且拥有后入先出(last in first out)的特性,即堆栈的所有操作都是在顶端进行的。堆栈有五个基本操作: Create ...

C语言实现栈(基于数组)

栈是一种操作受限的数据结构,只允许从一段操作,而且先进后出(FILO  first in last out)这里将栈的操作封装在C语言的头文件里 实现栈的代码如下 #include #defi...

java自定义栈(数组实现)

首先定义一个栈接口,用来描述栈的功能,提供出栈、入栈、获取栈顶元素、判断是否为空以及清空栈;...

java用数组实现栈

1.1.  栈的数据结构 栈是一种先进后出的数据结果,只能在一端(称为栈顶(top))对数据项进行插入和删除。 1.2.  Java实现 StackTest p...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

用一个数组实现三个栈

数据结构与算法分析——c语言描述 练习3.23 答案 这道题还是挺有意思的。第三个栈从中间开始,假如有冲突的时候还剩空位时候移动第三个栈到栈1和栈2顶端的中心。 要注意的是如何判断整个是否...

JAVA中数组的内存(栈和堆)

JAVA对内存空间的划分五部分:栈 堆 方法区 本地方法区 寄存器今天主要谈栈和堆栈内存:存储的都是局部变量。 只要是在方法中定义的变量都是局部变量,一旦变量的生命周期结束,该变量就被释放。 (压...

栈和队列面试题(一)---一个数组实现两个栈

一,用一个数组实现两个栈(先进后出),有以下几种方法: ①数组的奇数位置存储一个栈的元素,偶数位置存储另一个栈的元素; ②两个栈分别从数组的中间向两头增长; 数组的中间位置看做两个栈的栈底,压栈时...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用java数组实现栈
举报原因:
原因补充:

(最多只允许输入30个字)