• 数据结构 | (三) 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方法。栈帧是虚拟机栈中的一个元素,用于存储方法的局部变量、操作数栈、动态链接和方法返回值等信息。
  • 相关阅读:
    Jackson 的 SNAKE_CASE 反序列化
    对毕业季即将踏入职场的年轻人的一点建议
    哈夫曼树原理及Java编码实现
    svn多仓库权限控制
    MongoDB 遇见 spark(进行整合)
    【木马】利用Python制作一个接受式免杀载荷
    如何在生产环境中安装jdk+监控关键字错误日志脚本
    Lenovo Quick Fix:关闭或开启Win10系统的自动更新
    2024年江西省三支一扶考试报名详细流程
    docker-java 用Java操作docker创建容器并运行运行容器
  • 原文地址:https://blog.csdn.net/khh1014173041/article/details/133684359