数据结构(1):栈

4 篇文章 0 订阅
2 篇文章 0 订阅

数据结构之栈知识点

1、静态栈(用数组实现)

代码实现:

public class StackDemo {
    private int size;//大小或者容量
    private long arr[];//容器
    private int top;//栈顶
    public StackDemo(int maxsize){
        this.size = maxsize;
        this.arr = new long[maxsize];
        //初始化栈顶,表示为空
        this.top = -1;
    }
    //入栈
    public void push(int x){
        if (isFull()){
            System.out.println("栈已满。");
            return;
        }
        //++top是先+1再运算,所以是从0开始的
        //而top++是先运算再加1,所以是从-1开始的
        //这里是arr[0]表示第一个元素,后续继续加1
        arr[++top] = x;
    }
    //查看栈顶元素,不删除
    public long peek(){
        if (isEmpty()){
            System.out.println("栈为空。");
            return -1;
            //throw new RuntimeException("栈是空的");
        }
        return arr[top];
    }
    //弹出栈顶元素,删除,并返回栈顶元素
    public long pop(){
        if (isEmpty()){
            System.out.println("栈为空。");
            return -1;
        }
        return arr[top--];
    }
    //遍历栈,从栈顶开始遍历
    public void ergodic(){
        for (long i = top;top>-1;top--){
            System.out.println(arr[top]);
        }
    }
    //判断栈是否已满
    public boolean isFull(){
        return size == top - 1;
    }
    //判断栈是否为空
    public boolean isEmpty(){
        return top == -1;
    }
}

2、动态栈(用链表实现)

代码实现:

public class LinkedStackDemo {
    private Node topStack;//栈顶指针
    private Node bottomStack;//栈底指针
    public int size;
    public LinkedStackDemo() {}
    public LinkedStackDemo(Node topStack,Node bottomStack){//初始化栈
        this.topStack = topStack;
        this.bottomStack = bottomStack;
        this.size = 0;
    }
    //入栈
    public void push(int data){
        Node node = new Node(data);
        //引用对象的next指向栈顶节点对象,则栈顶节点对象原先指向的节点,该引用对象新节点的next也同样指向原先指向的节点
        node.next = this.topStack;
        this.topStack = node;
        size++;
    }
    //弹出栈顶元素,并删除,返回栈顶数值
    public int pop(){
        if (isEmpty()){
            System.out.println("栈为空。");
            return -1;
        }
        int i = this.topStack.data;
        this.topStack = this.topStack.next;
        size--;
        return 1;
    }
    //查看栈顶数值
    public int peek(){
        if (isEmpty()){
            System.out.println("栈为空。");
            return -1;
        }
        return  this.topStack.data;
    }
    //遍历栈,从栈顶开始
    public void ergodic(){
        Node currentNode = topStack;
        while (currentNode!=null){
            System.out.println(currentNode.data);
            currentNode = currentNode.next;
        }
    }
    //查看栈中值的数目
    public int size(){
        return size;
    }
    //清空栈
    public void clear(){
        this.topStack = this.bottomStack;//使栈顶元素指向栈底即可清空栈
    }
    //判断栈是否为空
    public boolean isEmpty(){
        return size == 0;
    }
}
//节点类
class Node{
    public int data;
    public Node next;
    public Node(int data){
        this.data = data;
    }
}

后续如有更优的方法,会继续补充。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值