用链表实现栈的入栈和出栈,并给出主函数
时间: 2024-10-17 07:14:46 浏览: 32
在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) {
newNode->next = *top;
*top = newNode;
} else {
std::cout << "Memory allocation failed." << std::endl;
}
}
// 出栈(pop)
int pop(Node** top) {
if (*top == nullptr) {
std::cout << "Stack is empty." << std::endl;
return -1; // 返回一个特殊值表示空栈
}
int poppedValue = (*top)->data;
Node* temp = *top;
*top = (*top)->next;
delete temp; // 释放内存
return poppedValue;
}
// 主函数
int main() {
Node* stackTop = nullptr;
push(&stackTop, 5); // 入栈5
push(&stackTop, 3);
push(&stackTop, 7);
std::cout << "Popped element: " << pop(&stackTop) << std::endl; // 出栈并打印
push(&stackTop, 10); // 再次入栈
// 可能会继续进行更多的入栈、出栈操作...
return 0;
}
```
在这个例子中,我们首先定义了一个节点结构`Node`,包含数据`data`和指向下一个节点的指针`next`。然后实现了创建节点的函数`createNode()`,以及入栈和出栈的操作`push()`和`pop()`。在主函数`main()`中展示了如何使用这些操作。
阅读全文