栈的数组与链表实现

栈(stack)

线性数据结构;先入先出(first in last out 即FILO),先放入的在栈底(bottom),后放入的在栈顶(top)。

操作

入栈(push)和出栈(pop)
入栈(push)
请添加图片描述出栈(pop)
在这里插入图片描述

实现方式

链表和数组两种

1.数组实现

声明一个固定大小的数组arr

入栈

将索引index指向0位置

压入数据的时候,先给arr[index]赋值

index++

如果index=arr.length的时候,用户要入栈,给用户抛出“栈已满”的异常
在这里插入图片描述

出栈

先将index–
再将arr[index]返回

在这里插入图片描述查看栈顶的数据,不是出栈的话,只需要将arr[index-1]返回就行,但是不要添加index–功能(查看的时候,也需要先判断有没有数据,即index是否为0)

代码

 
public class ArrayStack {
    private Integer[] arr;  //数组
    private Integer index;  //指针
 
    //构造函数
    public ArrayStack(int stackSize) {
        if (stackSize < 0) {
            throw new IllegalArgumentException("初始化大小不能小于0");
        }
        //初始化数组,并将指针指向索引0位置
        arr = new Integer[stackSize];
        index = 0;
    }
    //向栈中存入数据
    public void push(int num){
        if(index==arr.length){
            throw new IllegalArgumentException("栈已满");
        }
        arr[index]=num;
        index++;
    }
    //从栈中弹出数据
    public Integer pop(){
        if(index==0){
            throw new  IllegalArgumentException("栈目前为空");
        }
        index--;
        return arr[index];
    }
    //查看目前栈顶数据
    public Integer peek(){
        if(index==0){
            return null;
        }
        return arr[index-1];
    }
 
}

例如:
在这里插入图片描述

2.链表实现

在这里插入图片描述

入栈
在这里插入图片描述
出栈

在这里插入图片描述
代码

public class F {
    private SNode s;
    public class SNode{
        int data;
        SNode next;
    }

    F(){
        s = null;
    }
	//入栈
    public void push(int e){
        SNode p = new SNode();
        p.data = e;
        p.next = s;
        s = p;
    }
		//出栈
    public int pop(){
        if(s == null){
            return -1;
        }
        SNode p = s;
        s = s.next;
        return p.data;
    }
    public int getTop(){
        if(s == null){
            return -1;
        }
        return s.data;
    }

    public static void main(String[] args) {
        F f = new F();
        System.out.println("链栈初始化成功!");
        f.push(5);
        f.push(4);
        f.push(3);
        f.push(2);
        f.push(1);
        System.out.println("创建成功");
        System.out.println("元素依次出栈");
        while(f.s!=null){
            System.out.print(f.getTop()+" ");
            f.pop();
        }
        System.out.println();
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值