用链表实现栈的基本操作。 Node STACK {int data; node *link;}; Node *top=NULL;
时间: 2024-10-17 20:13:45 浏览: 24
在C++中,链表是一种数据结构,非常适合用来实现栈(Stack)这种后进先出(LIFO,Last In First Out)的数据结构。给定的定义`Node`表示链表中的节点,包含整型数据`data`和指向下一个节点的指针`link`,以及栈顶指针`top`默认为`NULL`。
要使用链表实现栈的基本操作,我们需要实现以下四个基本功能:
1. **入栈(Push)**:
- 创建一个新的节点,存储数据。
- 将新节点的`link`指向当前的栈顶节点(如果已有元素,则不为空)。
- 更新栈顶指针,使其指向新节点。
```cpp
void push(int value) {
Node* newNode = new Node;
newNode->data = value;
newNode->link = top;
top = newNode;
}
```
2. **出栈(Pop)**:
- 如果栈为空,抛出异常或返回特殊值(如0、nullptr等)。
- 否则,记录当前栈顶元素,然后更新栈顶指针(将其链接到下一个节点)。
```cpp
int pop() {
if (top == NULL) {
throw std::runtime_error("Stack is empty");
}
int data = top->data;
Node* temp = top;
top = top->link;
delete temp;
return data;
}
```
3. **查看栈顶元素(Top)**:
- 如果栈为空,同样处理异常或返回特殊值。
```cpp
int topElement() {
if (top == NULL) {
throw std::runtime_error("Stack is empty");
}
return top->data;
}
```
4. **判断栈是否空(IsEmpty)**:
- 检查栈顶指针是否为`NULL`。
```cpp
bool isEmpty() {
return top == NULL;
}
```
以上就是链表实现栈的主要操作。记得在实际使用时添加适当的错误处理,以确保程序的健壮性。
阅读全文