用链表实现栈的基本操作。 Node STACK {int data; node *link;}; Node *top=NULL;
时间: 2024-10-17 21:14:13 浏览: 24
使用链表实现栈(Stack)是非常常见的,因为链表提供了动态存储空间并且插入和删除元素的时间复杂度都是O(1)。在这个例子中,我们定义了一个名为`STACK`的节点结构体,包含整型数据`data`和指向下一个节点的指针`link`。变量`top`用于跟踪栈顶元素。
下面是链表栈的基本操作:
1. **入栈(Push)**:
当要添加一个新元素时,创建一个新的`Node`,将数据赋值给`data`,然后让它成为当前`top`的后继。更新`top`为新节点。
```cpp
void push(int value) {
Node* newNode = new Node;
newNode->data = value;
newNode->link = top;
top = newNode;
}
```
2. **出栈(Pop)**:
如果栈不为空,删除并返回顶部元素,然后调整`top`指向下个节点。如果栈为空,抛出异常或返回特殊值表示栈已空。
```cpp
int pop() {
if (top == NULL) {
throw std::runtime_error("Stack is empty");
}
int value = top->data;
Node* temp = top;
top = top->link;
delete temp;
return value;
}
```
3. **查看栈顶元素(Peek/Top)**:
返回但不移除栈顶元素。同样处理空栈情况。
```cpp
int peek() {
if (top == NULL) {
throw std::runtime_error("Stack is empty");
}
return top->data;
}
```
4. **检查栈是否为空(IsEmpty)**:
判断`top`是否为`NULL`来确定栈是否为空。
```cpp
bool isEmpty() {
return top == NULL;
}
```
5. **销毁栈(Clear)**:
清除所有元素并将`top`设为`NULL`。
```cpp
void clear() {
while (!isEmpty()) {
pop();
}
top = NULL;
}
```
阅读全文