• Index

栈 Stack

Last updated: ... / Reads: 35 Edit

栈(Stack)是一种具有特定限制的数据结构,它遵循先进后出(Last-In-First-Out,LIFO)的原则。这意味着最后一个添加到栈中的元素将首先被移除。

栈有两个基本操作:

  • 入栈(Push):将元素添加到栈的顶部。
  • 出栈(Pop):从栈的顶部移除并返回元素。

除了入栈和出栈之外,还有其他一些常见的操作,如查看栈顶元素(Peek)和检查栈是否为空(IsEmpty)等。 在编程中,可以使用数组或链表来实现栈。下面是一个使用数组实现栈的示例代码:

public class Stack {
    private int maxSize;
    private int top;
    private int[] stackArray;

    public Stack(int size) {
        maxSize = size;
        stackArray = new int[maxSize];
        top = -1;
    }

    public void push(int value) {
        if (top == maxSize - 1) {
            System.out.println("Stack is full. Cannot push element.");
            return;
        }
        stackArray[++top] = value;
    }

    public int pop() {
        if (top == -1) {
            System.out.println("Stack is empty. Cannot pop element.");
            return -1;
        }
        return stackArray[top--];
    }

    public int peek() {
        if (top == -1) {
            System.out.println("Stack is empty. No elements to peek.");
            return -1;
        }
        return stackArray[top];
    }

    public boolean isEmpty() {
        return (top == -1);
    }
}

在上面的示例代码中,我们使用一个数组stackArray来存储栈的元素。maxSize表示栈的最大容量,top表示栈顶的索引。你可以按照以下方式使用这个栈:

Stack stack = new Stack(5);

stack.push(10); // 入栈操作
stack.push(20);
stack.push(30);

System.out.println(stack.peek()); // 查看栈顶元素

System.out.println(stack.pop()); // 出栈操作

System.out.println(stack.isEmpty()); // 检查栈是否为空

输出结果将会是:

30
30
false

Stack 的作用

Stack(栈)是一种常见的数据结构,它遵循先进后出(LIFO)的原则。栈可以用来存储和管理数据项,并提供了一些基本操作,如压入(push)和弹出(pop)。

栈在许多计算机科学领域都有广泛的应用,包括编程语言解析、函数调用和返回、递归算法等。下面是一些栈的常见应用场景:

  • 函数调用和返回:当一个函数被调用时,当前函数的状态(例如局部变量、返回地址等)会被保存到栈中。当函数执行完毕后,它的状态会从栈中弹出,程序继续执行调用该函数的位置。
  • 表达式求值:在编写计算器或表达式求值程序时,可以使用栈来实现运算符优先级的处理。通过将运算符和操作数依次压入栈中,然后按照优先级进行弹出和计算,最终得到表达式的结果。
  • 括号匹配检查:栈也可以用于检查括号是否匹配。当遇到左括号时,将其压入栈中;当遇到右括号时,将栈顶元素弹出并检查是否与当前括号匹配。如果不匹配,则括号不正确。
  • 浏览器的前进和后退功能:浏览器中的前进和后退按钮可以使用栈来实现。每当用户导航到一个新页面时,该页面的URL会被压入栈中。当用户点击后退按钮时,最近访问的URL将从栈中弹出,以便返回上一个页面。

下面是一个使用数组实现栈的示例代码:

class Stack {
    private int maxSize;
    private int top;
    private int[] stackArray;

    public Stack(int size) {
        maxSize = size;
        stackArray = new int[maxSize];
        top = -1;
    }

    public void push(int value) {
        if (top < maxSize - 1) {
            stackArray[++top] = value;
        } else {
            System.out.println("Stack is full!");
        }
    }

    public int pop() {
        if (top >= 0) {
            return stackArray[top--];
        } else {
            System.out.println("Stack is empty!");
            return -1;
        }
    }

    public int peek() {
        if (top >= 0) {
            return stackArray[top];
        } else {
            System.out.println("Stack is empty!");
            return -1;
        }
    }

    public boolean isEmpty() {
        return (top == -1);
    }

    public boolean isFull() {
        return (top == maxSize - 1);
    }
}
// 示例用法:
Stack stack = new Stack(5);
stack.push(10);
stack.push(20);
stack.push(30);

System.out.println(stack.pop()); // 输出:30
System.out.println(stack.peek()); // 输出:20
System.out.println(stack.isEmpty()); // 输出:false
System.out.println(stack.isFull()); // 输出:false

Comments

Make a comment

  • Index