通过Java实现栈Stack

     

目录

一、代码结构

二、程序源码

1.PopEmptyException类

2.Stack类

  (1)定义

(2)成员变量

(3)相关方法

1)构造方法

2)入栈方法(包括判满的底层方法)

3)出栈方法(包括判空抛出异常的底层方法)

4)获取栈顶元素的方法(调用判空抛出异常的底层方法)

5)获取栈有效元素个数的方法

6)判空方法

三、测试案例

Test类源码如下:

运行结果如下

      栈是指一种后入先出的特殊数据结构,在Java集合框架中名为Stack如今此类已过时,可以用集合类LinkedList实现)其包括入栈,出栈,获取栈顶元素,获取栈内有效元素个数,判断栈是否空的方法。本文将以数组为底层结构实现栈(顺序栈)及相关方法。除此之外,栈也可以通过单链表或者双向链表实现,名为链式栈,具体思路如法炮制,结合链表相关操作即可,读者可自行尝试。

一、代码结构

1.MyStack:用于实现栈的数据结构。

2.PopEmptyException:自定义运行时异常,用于栈判空时进行非法操作抛出异常。

3.Test:测试类,其main方法用于测试Mystack的相关方法。

二、程序源码

1.PopEmptyException类

public class PopEmptyException extends RuntimeException{
    public PopEmptyException() {
        super();
    }

    public PopEmptyException(String message) {
        super(message);
    }
}

注意,PopEmptyException属于运行时异常,应当继承于RuntimeException,同时重写相关方法。

2.Stack类

  (1)定义

public class MyStatck

(2)成员变量

    //数组引用,对应数组存储栈的元素
    private int[]elem;
    //记录栈内有效元素个数
    private int usedSize;

(3)相关方法

1)构造方法
    //构造方法
    public  MyStatck(){
        this.elem=new int[10];
    }
2)入栈方法(包括判满的底层方法)
    //底层方法:判满方法
    private boolean isFull(){
        return usedSize== elem.length;
    }

    //入栈方法
    public int push(int val){
        //判满扩容
        if(isFull()){
            elem= Arrays.copyOf(elem,2*elem.length);
        }
        elem[usedSize]=val;
        usedSize++;
        return val;
    }
3)出栈方法(包括判空抛出异常的底层方法)
    //出栈判空抛出异常方法
    private void checkEmpty(){
        if(isEmpty()){
            throw new PopEmptyException();
        }
    }

    //出栈方法
    public int pop(){
        //判空抛出异常
        try{
            checkEmpty();
        }catch (PopEmptyException e){
            e.printStackTrace();
        }
        int val=elem[usedSize-1];
        usedSize--;
        return val;
    }
4)获取栈顶元素的方法(调用判空抛出异常的底层方法)
    //获取栈顶元素方法
    public int peek(){
        //判空抛出异常
        try{
            checkEmpty();
        }catch (PopEmptyException e){
            e.printStackTrace();
        }
        return elem[usedSize-1];
    }
5)获取栈有效元素个数的方法
    //获取栈有效元素个数方法
    public int size(){
        return usedSize;
    }
6)判空方法
    //判空方法
    public boolean isEmpty(){
        return usedSize==0;
    }

三、测试案例

Test类源码如下:

public class Test {
    public static void main(String[] args) {
        MyStatck myStatck=new MyStatck();
        //入栈操作
        myStatck.push(1);
        myStatck.push(2);
        myStatck.push(3);
        //获取栈顶元素
        System.out.println("当前栈顶元素为"+myStatck.peek());
        System.out.println("**********************");
        //出栈操作
        System.out.println(myStatck.pop());
        System.out.println("当前栈顶元素为"+myStatck.peek());
        System.out.println("**********************");
        //获取有效元素个数
        System.out.println("当前有效元素个数为"+myStatck.size());
        System.out.println("**********************");
        //判断栈是否为空
        System.out.println(myStatck.isEmpty());
    }
}

运行结果如下:

以上便是通过Java实现栈Stack的全部内容,如有不当,敬请斧正!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值