链栈的基本操作和实现C++
时间: 2024-10-17 18:07:17 浏览: 44
链栈是一种线性数据结构,它的工作原理类似于物理堆叠的栈,遵循后进先出(LIFO,Last In First Out)的原则。其基本操作主要包括:
1. **入栈(Push)**:将元素添加到栈顶,通常涉及创建一个新的节点并将其链接到栈头。
2. **出栈(Pop)**:从栈顶删除并返回元素,如果栈不为空,这会改变栈顶指针,并返回上一个元素。
3. **查看栈顶元素(Top/Peek)**:获取当前栈顶的元素,但不删除,常用于预览栈顶内容。
4. **判断栈是否为空(IsEmpty)**:检查栈顶是否指向空节点,如果为空则表示栈为空。
5. **获取栈的大小(Size)**:计算栈中元素的数量。
在C++中,可以手动实现链栈的数据结构和上述操作。这里是一个简单的示例:
```cpp
template <typename T>
class Stack {
private:
struct Node {
T data;
Node* next;
};
Node* top;
public:
// 构造函数,初始化为空栈
Stack() : top(nullptr) {}
// 入栈
void push(const T& value) {
Node* newNode = new Node();
newNode->data = value;
newNode->next = top;
top = newNode;
}
// 出栈
T pop() {
if (isEmpty()) throw std::runtime_error("Stack is empty");
T result = top->data;
Node* temp = top;
top = top->next;
delete temp;
return result;
}
// 查看栈顶元素
T top() const {
if (isEmpty()) throw std::runtime_error("Stack is empty");
return top->data;
}
// 判断栈是否为空
bool isEmpty() const {
return top == nullptr;
}
// 获取栈的大小
size_t size() const {
size_t count = 0;
Node* current = top;
while (current != nullptr) {
count++;
current = current->next;
}
return count;
}
};
```
阅读全文