创建一个链栈,包括初始化,入栈,出栈,取栈顶元素,检测是否空栈,销毁栈,
时间: 2024-10-16 22:20:43 浏览: 45
链栈图示-栈和队列PPT
创建链栈是一种常见的数据结构实现,它使用链表作为底层存储结构。以下是链栈的基本操作:
1. **初始化** (Stack initialization):
- 创建一个链栈结构,通常包含一个指向栈顶节点的指针,初始状态为空。
```cpp
struct Node {
int data;
Node* next;
};
class Stack {
private:
Node* top;
public:
Stack() : top(nullptr) {}
};
```
2. **入栈** (Push operation):
- 新建一个节点,存储元素并将其next指向当前栈顶,然后将top更新为新节点。
```cpp
void push(Stack& stack, int value) {
Node* newNode = new Node{value, nullptr};
if (!stack.top)
stack.top = newNode;
else
newNode->next = stack.top;
stack.top = newNode;
}
```
3. **出栈** (Pop operation):
- 如果栈非空,删除栈顶元素并返回其值;否则返回错误或抛异常。
```cpp
int pop(Stack& stack) {
if (stack.isEmpty()) {
throw std::runtime_error("Stack is empty");
}
int value = stack.top->data;
Node* temp = stack.top;
stack.top = stack.top->next;
delete temp;
return value;
}
```
4. **取栈顶元素** (Peek or Top operation):
- 返回栈顶元素的值,但不删除它。
```cpp
int top(Stack& stack) {
if (stack.isEmpty())
throw std::runtime_error("Stack is empty");
return stack.top->data;
}
```
5. **检测是否空栈** (IsEmpty operation):
- 检查栈顶是否为空。
```cpp
bool isEmpty(Stack& stack) {
return stack.top == nullptr;
}
```
6. **销毁栈** (Destructor or Clear operation):
- 移除所有节点,并释放内存。
```cpp
~Stack() {
while (!isEmpty()) {
pop();
}
}
```
或在析构函数外提供一个专门的clear方法:
```cpp
void clear(Stack& stack) {
Node* temp = stack.top;
while (temp) {
Node* oldTop = temp;
temp = temp->next;
delete oldTop;
}
stack.top = nullptr;
}
```
阅读全文