• 数据结构 | (三) Stack


    :一种特殊的线性表,其 只允许在固定的一端进行插入和删除元素操作
    进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO Last In First Out )的原则。
    压栈:栈的插入操作叫做进栈/ 压栈 / 入栈, 入数据在栈顶
    出栈:栈的删除操作叫做出栈。 出数据在栈顶
    栈的使用
    方法功能
    Stack()构造一个空的栈
    E push(E e)将e入栈,并返回e
    E pop()将栈顶元素出栈并返回
    E peek()获取栈顶元素
    int size()获取栈中有效元素个数
    boolean empty()检测栈是否为空

    1. public static void main(String[] args) {
    2. Stack s = new Stack();
    3. s.push(1);
    4. s.push(2);
    5. s.push(3);
    6. s.push(4);
    7. System.out.println(s.size()); // 获取栈中有效元素个数---> 4
    8. System.out.println(s.peek()); // 获取栈顶元素---> 4
    9. s.pop(); // 4出栈,栈中剩余1 2 3,栈顶元素为3
    10. System.out.println(s.pop()); // 3出栈,栈中剩余1 2 栈顶元素为3
    11. if(s.empty()){
    12. System.out.println("栈空");
    13. }else{
    14. System.out.println(s.size());
    15. }
    16. }
    栈的模拟实现
    从上图中可以看到, Stack 继承了 Vector Vector ArrayList 类似,都是动态的顺序表,不同的是 Vector 是线程安全的。
    1. public class MyStack {
    2. int[] array;
    3. int size;
    4. public MyStack(){
    5. array = new int[3];
    6. }
    7. public int push(int e){
    8. ensureCapacity();
    9. array[size++] = e;
    10. return e;
    11. }
    12. public int pop(){
    13. int e = peek();
    14. size--;
    15. return e;
    16. }
    17. public int peek(){
    18. if(empty()){
    19. throw new RuntimeException("栈为空,无法获取栈顶元素");
    20. }
    21. return array[size-1];
    22. }
    23. public int size(){
    24. return size;
    25. }
    26. public boolean empty(){
    27. return 0 == size;
    28. }
    29. private void ensureCapacity(){
    30. if(size == array.length){
    31. array = Arrays.copyOf(array, size*2);
    32. }
    33. }
    34. }
    概念区分
    栈、虚拟机栈、栈帧有什么区别呢?
    栈是一种数据结构,用于存储和管理数据。虚拟机栈是Java虚拟机中的一部分,用于执行Java方法。栈帧是虚拟机栈中的一个元素,用于存储方法的局部变量、操作数栈、动态链接和方法返回值等信息。
  • 相关阅读:
    QT软件开发-基于FFMPEG设计视频播放器-支持流媒体地址播放(五)
    数理统计笔记10:回归分析
    android13(T) 网络比分机制
    数学与机器学习:共舞于智能时代的双璧
    如何抓住元宇宙中机遇
    PAT(甲级)2022年春季考试
    K8s复习笔记5-镜像构建
    新出现的去中心化科学能够为科学领域带来什么?
    【数据结构】交换排序
    jupyter使用conda虚拟环境操作步骤
  • 原文地址:https://blog.csdn.net/khh1014173041/article/details/133684359