跳到主要内容

编写C++代码如何建立一个链式栈?

参考答案:

在C++中,你可以使用结构体和指针来创建一个链式栈。以下是一个简单的链式栈的实现示例:

#include <iostream>

// 定义节点结构
struct Node {
    int data;
    Node* next;
};

// 定义链式栈类
class LinkedStack {
private:
    Node* top;  // 栈顶指针

public:
    LinkedStack() : top(nullptr) {}  // 构造函数,初始化栈顶指针为nullptr

    ~LinkedStack() {
        while (!isEmpty()) {
            pop();
        }
    }  // 析构函数,用于释放内存

    bool isEmpty() const {
        return top == nullptr;
    }  // 判断栈是否为空

    void push(int value) {
        Node* newNode = new Node;
        newNode->data = value;
        newNode->next = top;
        top = newNode;
    }  // 入栈操作

    int pop() {
        if (isEmpty()) {
            std::cerr << "Error: Stack is empty." << std::endl;
            return -1;  // 栈为空时返回-1或其他错误标识
        }

        int value = top->data;
        Node* temp = top;
        top = top->next;
        delete temp;

        return value;
    }  // 出栈操作

    int peek() const {
        if (isEmpty()) {
            std::cerr << "Error: Stack is empty." << std::endl;
            return -1;  // 栈为空时返回-1或其他错误标识
        }

        return top->data;
    }  // 查看栈顶元素
};

int main() {
    LinkedStack stack;

    stack.push(10);
    stack.push(20);
    stack.push(30);

    std::cout << "Top element: " << stack.peek() << std::endl;

    std::cout << "Popped element: " << stack.pop() << std::endl;
    std::cout << "Popped element: " << stack.pop() << std::endl;

    std::cout << "Is stack empty? " << (stack.isEmpty() ? "Yes" : "No") << std::endl;

    return 0;
}

这个示例中,LinkedStack 类使用了一个私有成员变量 top 来指向栈顶元素。push 方法用于将新元素添加到栈顶,pop 方法用于移除栈顶元素并返回其值,peek 方法用于查看但不移除栈顶元素的值,isEmpty 方法用于检查栈是否为空。

main 函数中,我们创建了一个 LinkedStack 对象,并对其进行了一些基本的操作,如入栈、出栈、查看栈顶元素和检查栈是否为空。