双链表实现栈的出栈 入栈 判空 初始化 代码
时间: 2024-09-18 10:14:05 浏览: 41
C语言实现数据结构:单链表,循环链表,双向链表;静态顺序队列
双链表实现栈的基本操作包括出栈(pop)、入栈(push)、判空(is_empty)以及初始化(init)。下面是一个简单的C++示例代码:
```cpp
// 定义链表节点结构
struct Node {
int data;
Node* prev; // 指向前一个节点
Node* next; // 指向下一个节点
Node(int value) : data(value), prev(nullptr), next(nullptr) {}
};
// 栈类
class Stack {
private:
Node* top; // 栈顶指针,初始为nullptr
public:
// 初始化
Stack() : top(nullptr) {}
// 出栈
void pop() {
if (top == nullptr) {
throw std::runtime_error("Stack is empty");
}
Node* popped = top;
top = top->prev;
if (top != nullptr) {
top->next = nullptr;
} else {
// 如果这是最后一个节点,也要更新栈顶指针
top = nullptr;
}
delete popped;
}
// 入栈
void push(int value) {
Node* newNode = new Node(value);
newNode->prev = top;
if (top != nullptr) {
top->next = newNode;
} else {
top = newNode;
}
}
// 判空
bool is_empty() const {
return top == nullptr;
}
};
```
在这个例子中,`push`操作将新节点放在栈顶,而`pop`操作则弹出栈顶并释放它。`is_empty`函数检查栈是否为空。
阅读全文