数据结构:栈

文章目录


栈

一,概述

栈(Stack)是一种常见的数据结构,它是一种线性结构,具有特殊的添加和删除规则。栈的特性是后进先出(LIFO,Last In First Out):最后一个添加到栈中的元素将是最先被删除的元素。

简介:

  • 栈是一种线性数据结构,意味着数据在栈中的排序是按照它们加入的顺序。
  • 栈遵循 LIFO(Last In First Out)原则,这意味着最后一个添加到栈中的元素将是第一个被移除的元素。
  • 栈只允许在同一端(称为"顶部")进行添加和删除操作。这一端通常被称为"栈顶",另一端被称为"栈底"。
  • 栈不需要在添加或删除元素时进行任何排序或搜索操作。

图示:

lua 复制代码
      top
    +-----+  
    |     |  
    |  3  |  
    +-----+  
    |     |  
    |  2  |  
    +-----+  
    |     |  
bottom|  1  |  
    +-----+

在这个栈的示例中,元素1、2、3依次被推入栈顶。当元素3被推入时,元素1和2仍然在栈中,但它们现在处于元素3的下方。如果我们要从栈中删除一个元素,元素3将会首先被删除,然后是元素2和1。这就是后进先出(LIFO)的原则。

Java示例:

在Java中,可以使用java.util.Stack类来实现栈。以下是一个简单的示例:

java 复制代码
import java.util.Stack;

public class StackExample {
    public static void main(String[] args) {
        Stack<Integer> stack = new Stack<>();
        stack.push(1); // 压入元素1
        stack.push(2); // 压入元素2
        stack.push(3); // 压入元素3
        System.out.println("Initial Stack: " + stack); // 打印初始栈
        System.out.println("Popped element: " + stack.pop()); // 弹出顶部元素并打印
        System.out.println("Stack after pop operation: " + stack); // 打印执行弹出操作后的栈
    }
}

在这个示例中,我们首先创建了一个整数类型的栈,然后将元素1、2、3压入栈中。然后我们打印出初始的栈,执行弹出操作并打印出弹出的元素,最后再次打印出执行弹出操作后的栈。

二,添加数据

在Java中,我们可以使用java.util.Stack类来实现栈数据结构。以下是添加数据(压入元素)的示例:

java 复制代码
import java.util.Stack;

public class StackExample {
    public static void main(String[] args) {
        Stack<Integer> stack = new Stack<>();

        // 添加元素到栈
        stack.push(1);
        stack.push(2);
        stack.push(3);

        // 打印栈
        System.out.println("Initial Stack: " + stack);
    }
}

在这个示例中,我们首先导入了java.util.Stack类。然后,在main方法中,我们创建了一个整数类型的栈实例stack。我们使用push方法向栈中添加元素。最后,我们打印出初始的栈。

请注意,尽管java.util.Stack类是Java早期版本提供的,但现在并不推荐使用它。在多线程环境中,它的性能可能会有问题。在Java的后续版本中,建议使用java.util.Deque接口的实现,如java.util.ArrayDeque,来代替java.util.Stack。以下是使用ArrayDeque实现栈的示例:

java 复制代码
import java.util.ArrayDeque;
import java.util.Deque;

public class StackExample {
    public static void main(String[] args) {
        Deque<Integer> stack = new ArrayDeque<>();

        // 添加元素到栈
        stack.push(1);
        stack.push(2);
        stack.push(3);

        // 打印栈
        System.out.println("Initial Stack: " + stack);
    }
}

在这个示例中,我们使用了java.util.ArrayDeque类来实现栈。与上面的示例类似,我们使用push方法向栈中添加元素,并打印出初始的栈。

三,删除数据

在Java中,我们可以使用java.util.Stack类来实现栈数据结构。以下是删除数据(弹出元素)的示例:

java 复制代码
import java.util.Stack;

public class StackExample {
    public static void main(String[] args) {
        Stack<Integer> stack = new Stack<>();

        // 添加元素到栈
        stack.push(1);
        stack.push(2);
        stack.push(3);

        // 打印初始栈
        System.out.println("Initial Stack: " + stack);

        // 删除元素(弹出)
        System.out.println("Popped element: " + stack.pop());

        // 打印执行弹出操作后的栈
        System.out.println("Stack after pop operation: " + stack);
    }
}

在这个示例中,首先导入了java.util.Stack类。然后,在main方法中,创建了一个整数类型的栈实例stack。使用push方法向栈中添加元素。然后,使用pop方法删除(弹出)栈顶的元素。最后,打印出执行弹出操作后的栈。

请注意,尽管java.util.Stack类是Java早期版本提供的,但现在并不推荐使用它。在多线程环境中,它的性能可能会有问题。在Java的后续版本中,建议使用java.util.Deque接口的实现,如java.util.ArrayDeque,来代替java.util.Stack。以下是使用ArrayDeque实现栈的示例:

java 复制代码
import java.util.ArrayDeque;
import java.util.Deque;

public class StackExample {
    public static void main(String[] args) {
        Deque<Integer> stack = new ArrayDeque<>();

        // 添加元素到栈
        stack.push(1);
        stack.push(2);
        stack.push(3);

        // 打印初始栈
        System.out.println("Initial Stack: " + stack);

        // 删除元素(弹出)
        System.out.println("Popped element: " + stack.pop());

        // 打印执行弹出操作后的栈
        System.out.println("Stack after pop operation: " + stack);
    }
}

在这个示例中,使用了java.util.ArrayDeque类来实现栈。与上面的示例类似,使用push方法向栈中添加元素,并使用pop方法删除(弹出)栈顶的元素。最后,打印出执行弹出操作后的栈。

相关推荐
【心态好不摆烂】8 小时前
数据结构基础精讲3
数据结构·算法
岑梓铭8 小时前
《考研408数据结构》第七章(B树 和 B+树)复习笔记
数据结构·笔记·b树·考研·408
岑梓铭14 小时前
《考研408数据结构》第八章(排序)复习笔记
数据结构·笔记
nice_lcj5202 天前
LRU 缓存入门:它是什么、怎么用、面试怎么手写
java·数据结构·缓存·面试·lru
꧁细听勿语情꧂2 天前
直接选择排序,堆排序,冒泡排序,递归快速排序、hoare版本、挖坑法、lomuto前后指针,非递归快速排序
c语言·开发语言·数据结构·算法
Pniubi2 天前
关于算法用现成数据结构和手撕
数据结构
老师我太想进步了20263 天前
【数据结构-6】算法美学之单链表(1)
数据结构·算法
希望我万事顺遂3 天前
力扣hot100-滑动窗口最大值
数据结构·算法·leetcode
꧁细听勿语情꧂3 天前
二叉树余题,排序、直接插入排序、希尔排序
c语言·开发语言·数据结构·算法
是main不是漫3 天前
【双指针|LeetCode1089 复写零】巧用逆向思路,破解原地覆盖陷阱
数据结构·算法·leetcode