文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

【数据结构】Java实现栈

2023-10-27 08:43

关注

目录

1. 概念

2. 栈的使用 

3. 自己动手实现栈(使用动态数组实现栈) 

1. 创建一个MyStack类

2. push入栈

3. pop出栈

4. 查看栈顶元素

5. 判断栈是否为空与获取栈长

6. toString方法

4. 整体实现

4.1 MyStack类

4.2 Test类

4.3 测试结果


1. 概念

:一种特殊的线性表,其 只允许在固定的一端进行插入和删除元素操作 。进行数据插入和删除操作的一端称为栈 顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。 压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶 出栈:栈的删除操作叫做出栈。出数据在栈顶

2. 栈的使用 

public static void main(String[] args) {        Stack stack = new Stack<>();//        将e入栈,并返回e        stack.push(1);        stack.push(2);        stack.push(3);        stack.push(4);        stack.push(5);//        将栈顶元素出栈并返回        System.out.println(stack.pop());//        获取栈顶元素        System.out.println(stack.peek());//        检测栈是否为空        System.out.println(stack.empty());//        获取栈中有效元素个数        System.out.println(stack.size());        System.out.println(stack);    }

3. 自己动手实现栈(使用动态数组实现栈) 

1. 创建一个MyStack类

思路图:

import java.util.Arrays;import java.util.NoSuchElementException;//使用泛型public class MyStack {    private Object[] data;    private int size;    public MyStack(int capacity){        this.data = new Object[capacity];    }    public MyStack(){        this.data = new Object[10];    }    }

2. push入栈

public E push(E val){        data[size ++] = val;        if(size == data.length){            data = Arrays.copyOf(data,data.length<<1);        }        return val;    }

3. pop出栈

public E pop(){        if (isEmpty()){            throw new NoSuchElementException("stack is empy,cannot pop!");        }        E oldVal = (E)data[size - 1];        size --;        return oldVal;    }

4. 查看栈顶元素

public E peek(){        if (isEmpty()){            throw new NoSuchElementException("stack is empy,cannot peek!");        }        return (E)data[size - 1];    }

5. 判断栈是否为空与获取栈长

public boolean isEmpty() {        return size == 0;    }    public int size(){        return size;    }

6. toString方法

public String toString() {        StringBuilder sb = new StringBuilder();        sb.append("bottom [");        for (int i = 0; i < size; i++) {            sb.append(data[i]);            if(i < size - 1){                sb.append(",");            }        }        sb.append("] top");        return sb.toString();    }

4. 整体实现

4.1 MyStack类

package seqlist.stack_queue;import java.util.Arrays;import java.util.NoSuchElementException;public class MyStack {    private Object[] data;    private int size;    public MyStack(int capacity){        this.data = new Object[capacity];    }    public MyStack(){        this.data = new Object[10];    }    public E push(E val){        data[size ++] = val;        if(size == data.length){            data = Arrays.copyOf(data,data.length<<1);        }        return val;    }    public boolean isEmpty() {        return size == 0;    }    public int size(){        return size;    }    public E pop(){        if (isEmpty()){            throw new NoSuchElementException("stack is empy,cannot pop!");        }        E oldVal = (E)data[size - 1];        size --;        return oldVal;    }    public E peek(){        if (isEmpty()){            throw new NoSuchElementException("stack is empy,cannot peek!");        }        return (E)data[size - 1];    }    @Override    public String toString() {        StringBuilder sb = new StringBuilder();        sb.append("bottom [");        for (int i = 0; i < size; i++) {            sb.append(data[i]);            if(i < size - 1){                sb.append(",");            }        }        sb.append("] top");        return sb.toString();    }}

4.2 Test类

public static void main(String[] args) {        MyStack stack = new MyStack<>();//        将e入栈,并返回e        stack.push(1);        stack.push(2);        stack.push(3);        stack.push(4);        stack.push(5);        System.out.println("将栈顶元素出栈并返回");        System.out.println(stack.pop());        System.out.println("获取栈顶元素");        System.out.println(stack.peek());        System.out.println("检测栈是否为空");        System.out.println(stack.isEmpty());        System.out.println("获取栈中有效元素个数");        System.out.println(stack.size());        System.out.println(stack);    }

4.3 测试结果

 【例题】一个栈的入栈序列为ABCDE,则不可能的出栈序列为( )

        A. ABCDE

        B. EDCBA

        C. DCEBA

        D. ECDBA

稳妥的做法是画图逐个选项检测,大概率是不会出错的,

如果是E先出,说明ABCDE都已经全部入栈,E出栈之后,此时栈顶元素是D,如果再要出栈应该是D,而不应该是C。故应该选择D。

来源地址:https://blog.csdn.net/qq_53869058/article/details/129716272

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯