编写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
对象,并对其进行了一些基本的操作,如入栈、出栈、查看栈顶元素和检查栈是否为空。
学习笔记
0 学习笔记