用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使用数组实现队列

1.1.  队列的数据结构 队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操...

Java.util.Stack类的peek()方法

java.util.Stack这个类不难,但需要注意其中的peek()方法: 查看栈顶对象而不移除它 import java.util.Date;import java.util.Stack;publ...
  • wodwl
  • wodwl
  • 2009-07-21 22:51
  • 43526

java自定义栈(数组实现)

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

java 用数组实现栈

定义一个接口 package suanfa; public interface Stack { public void clear(); public boolean isEmpty();...

基于数组实现Java 自定义Stack栈类及应用

栈是存放对象的一种特殊容器,在插入与删除对象时,这种结构遵循后进先出( Last-in-first-out,LIFO)的原则。java本身是有自带Stack类包,为了达到学习目的已经更好深入了解sta...

Java 用数组实现栈 (Stack),包括栈的初始化,入栈、出栈等操作

这是以前面试搜狐碰上的一道笔试题:用数组的方式实现Stack,

使用数组实现栈(C语言)

栈结构体定义#define StackSize 100 typedef int DataType; typedef struct{ DataType stack[StackSize]; ...

算法导论 10.1-2 用一个数组实现两个栈

一、题目 说明如何用一个数组A[1..n]来实现两个栈,使得两个栈中的元素总和不到n时,两个都不会发生上溯。注意PUSH和POP操作的时间应为O(1) 二、思考 分别用数组的两端作为两个栈的起点,...

java 选择排序

package com; /**  * 实现选择排序  * @author 小小王  *  */ public class TestSelectSort { //选择排序方法 publ...

java 实现堆排序

package com; /**  * 实现堆排序  * @author 小小王  *  */ public class TestHeapSort { public static voi...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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