用链表实现栈的基本操作
时间: 2024-10-17 08:14:27 浏览: 38
Dlephi链表实现栈操作_delphi_
链表是一种动态数据结构,非常适合用来实现栈这种后进先出(LIFO)的数据结构。在链表中,我们通常使用头节点(head)来管理元素,因为插入和删除操作可以在O(1)的时间复杂度内完成。
以下是如何使用链表实现栈的基本操作:
1. **创建空栈**:
- 初始化一个链表头部指针为`nullptr`,表示栈为空。
```cpp
class Stack {
private:
struct Node {
int data;
Node* next;
};
Node* top;
public:
Stack() : top(nullptr) {}
};
```
2. **入栈(push)**:
- 创建一个新的节点,存储要入栈的元素;
- 新节点的`next`指向当前栈顶(如果非空),然后更新`top`指向新节点。
```cpp
void push(Stack& stack, int value) {
Node* newNode = new Node{value, top};
if (top != nullptr)
top->next = newNode;
else
stack.top = newNode; // 如果栈为空,直接指向新节点
top = newNode;
}
```
3. **出栈(pop)**:
- 检查栈是否为空,如果为空则抛出异常或返回特殊值;
- 移除并返回栈顶元素,同时将`top`指向下个节点。
```cpp
int pop(Stack& stack) {
if (top == nullptr) {
throw std::runtime_error("Stack is empty"); // 或者返回一个默认值
}
int value = top->data;
Node* temp = top;
top = top->next;
delete temp; // 释放内存
return value;
}
```
4. **查看栈顶元素(peek)**:
- 如果栈不为空,返回但不移动`top`;否则同样处理异常或返回默认值。
```cpp
int peek(Stack& stack) {
if (top == nullptr) {
throw std::runtime_error("Stack is empty");
}
return top->data;
}
```
5. **判断栈是否为空(isEmpty)**:
- 直接检查`top`是否为`nullptr`。
```cpp
bool isEmpty(Stack& stack) {
return top == nullptr;
}
```
阅读全文