使用c++链表实现栈的代码,具备push和pop两个函数,并说明数链表栈的特点
时间: 2024-10-20 10:09:25 浏览: 42
利用一个链表类实现一个队列类和栈类.rar_栈 链表 c++ _链表 类_链表类_队列 类_队列类
在C++中,可以使用单向链表实现栈(Stack),因为栈是一种后进先出(LIFO,Last In First Out)的数据结构,而链表恰好支持高效地在头部添加元素(push)和删除元素(pop)。以下是使用链表实现简单栈的基本代码:
```cpp
#include <iostream>
// 定义节点结构体
struct Node {
int data;
Node* next; // 指针指向下一个节点
};
// 创建一个新的栈节点
Node* createNode(int value) {
Node* newNode = new Node();
if (newNode != nullptr) {
newNode->data = value;
newNode->next = nullptr;
}
return newNode;
}
// 栈的顶部操作(push)
void push(Node** top, int value) {
Node* newNode = createNode(value);
if (newNode != nullptr) {
if (*top == nullptr) {
*top = newNode;
} else {
newNode->next = *top;
*top = newNode;
}
}
}
// 栈的底部操作(pop)
int pop(Node** top) {
if (*top == nullptr) {
throw std::runtime_error("Pop from empty stack");
}
int poppedValue = (*top)->data;
Node* temp = *top;
*top = (*top)->next;
delete temp;
return poppedValue;
}
// 主函数示例
int main() {
Node* top = nullptr;
push(&top, 1);
push(&top, 2);
push(&top, 3);
std::cout << "Top element: " << pop(&top) << std::endl; // 输出: Top element: 3
std::cout << "Top element after pop: " << pop(&top) << std::endl; // 输出: Top element after pop: 2
return 0;
}
```
特点:
1. **动态存储空间**: 链表栈不需要预先分配固定大小的空间,可以根据需要动态增长。
2. **插入/删除效率高**: 在栈顶进行push和pop操作的时间复杂度都是O(1),因为只需要修改头指针即可。
3. **灵活性**: 新数据可以随时追加到栈顶,适合于需要频繁增删操作的应用场景。
4. **不支持随机访问**: 因为链表元素不是连续存储的,所以无法直接通过索引来访问元素。
阅读全文