栈的实现——数组

栈——数组实现

栈是逻辑结构,想象出来不存在但可以用物理结构来实现的一种数据结构。看不见摸不着,抽象概念。

利用数组实现

首先了解栈,栈是一个先进先出的线性结构,只有进栈和出栈两种操作,且只能从栈顶进栈和出栈,通过描述使用数组可以把下标为0的作为栈底,每次进栈数组加入后面的下标位置,且用临时变量head获取栈顶,出栈则把head返回,数组大小减1达到效果。

public class MyStack {
    private int[] arr;
    private int size;//栈的元素长度
    private int head;//栈头
    public MyStack(){
    }
    //初始化栈 
    public MyStack(int n){
        this.arr = new int[n];
        this.size = 0;
        this.head = 0;
    }
    /**
     * 进栈操作 增
     * @param elem 进栈的元素
     */
    public void push(int elem){
        //如果大于就扩容 比如初始化5 size也是5 这时候就要考虑扩容
        if(size>=arr.length){
            reSize();
        }
        //将传进来的元素存入数组
        arr[size]=elem;
        this.head = elem;
        size++;
    }
    //扩容操作
    private void reSize() {
        int[] newArr = new int[arr.length*2];
        //不记得怎么用去回顾数据结构——数组
        System.arraycopy(arr,0,newArr,0,arr.length);
        arr = newArr;//至此扩容成功
    }

    /**
     * 出栈操作
     * @return 栈顶
     */
    public int pop(){
        size--;
        return head;
    }
    /**
     * 输出栈元素
     */
    public void print(){
        if(size<=0){
            //说明没有元素则不能出栈
            System.out.println("栈里面元素为空");
        }else {
            StringBuffer sb = new StringBuffer();
            sb.append("栈头:");
            for (int i = size - 1; i >= 0; i--) {
                sb.append(arr[i] + " ");
            }
            String s = sb.toString();
            System.out.println(s);
        }
    }
}

测试类:

public static void main(String[] args) {
    MyStack ms = new MyStack(3);
    ms.print();//栈里面元素为空
    ms.push(3);//3
    ms.push(2);//2 3
    ms.push(1);//1 2 3
    ms.print();//栈头:1 2 3 
    int pop = ms.pop();
    System.out.println("出栈的元素为:"+pop);//出栈的元素为:1
    ms.print();//栈头:2 3 
    ms.push(4);
    ms.print();//栈头:4 2 3 
    ms.push(5);
    ms.pop();// 剩下4 2 3
    ms.pop();// 剩下 2 3
    ms.pop();// 剩下3
    ms.pop();// 剩下
    ms.print();//栈里面元素为空
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值