如何在链表栈中实现入栈和出栈操作?
时间: 2024-10-17 14:13:59 浏览: 48
在链表中实现栈(LIFO, Last In First Out)通常涉及到两个基本操作:入栈(push)和出栈(pop)。这里我们假设已经有一个双向链表,其中头部(head)代表栈顶。
**入栈(Push)操作:**
1. 将新的元素创建为一个新的节点。
2. 新节点的next指针指向当前栈顶元素(如果有的话),表示新元素成为新的栈顶。
3. 如果链表为空,则直接将新节点设为头节点。
4. 更新头节点(如果是第一次入栈)或头节点的prev指针(如果已有其他元素)。
```cpp
void push(int value) {
Node* newNode = new Node(value); // 创建新节点
if (!top) { // 栈空时
top = newNode;
} else {
newNode->prev = top; // 新节点的prev指向栈顶
top->next = newNode; // 栈顶的新next指向下个元素
}
}
```
**出栈(Pop)操作:**
1. 检查是否栈不为空,如果为空则返回错误或抛异常。
2. 删除并返回栈顶元素,即头部节点。
3. 更新头节点(将其移到删除后的节点)和前一个节点的next指针(如果存在的话)。
```cpp
int pop() {
if (!top) { // 栈空
throw std::runtime_error("Stack is empty");
}
int value = top->value; // 保存要移除的值
Node* temp = top; // 临时保存栈顶节点
top = top->prev; // 移动头节点到下一个元素
delete temp; // 释放已删除节点
return value;
}
```
阅读全文