用C++实现顺序栈的基本操作(初始化,遍历顺序栈,入栈,取栈顶元素,出栈,判断栈是否为空栈,清空栈)
时间: 2024-09-30 14:10:04 浏览: 55
在C++中,我们可以使用数组或动态分配内存的方式来实现一个简单的顺序栈。以下是基本操作的实现:
1. **初始化**:
```cpp
template <typename T>
class Stack {
private:
int top;
T* stackArray;
public:
Stack(int capacity) {
top = -1;
stackArray = new T[capacity];
}
};
```
这里创建了一个模板Stack类,初始化时指定了栈的最大容量。
2. **遍历顺序栈**(仅适用于数组表示的栈,因为动态内存无法直接遍历):
```cpp
void printStack(Stack<int>& s) {
if (isEmpty(s)) {
cout << "栈为空" << endl;
} else {
for (int i = 0; i <= top; i++) {
cout << stackArray[i] << " ";
}
cout << endl;
}
}
```
遍历函数会检查栈是否为空再打印内容。
3. **入栈**(push操作):
```cpp
void push(Stack<T>& s, const T& value) {
if (top == stackArray.length - 1) {
throw std::overflow_error("栈已满");
}
stackArray[++top] = value;
}
```
这个操作将新值添加到栈顶,并更新栈顶标记。
4. **取栈顶元素**(peek操作,查看但不移除):
```cpp
T peek(Stack<T>& s) const {
if (isEmpty(s)) {
throw std::runtime_error("栈为空");
}
return stackArray[top];
}
```
返回栈顶元素但不改变栈的状态。
5. **出栈**(pop操作,移除并返回栈顶元素):
```cpp
T pop(Stack<T>& s) {
if (isEmpty(s)) {
throw std::runtime_error("栈为空");
}
T result = stackArray[top];
stackArray[top--] = T(); // 空值占位
return result;
}
```
移除栈顶元素并返回它。
6. **判断栈是否为空栈**:
```cpp
bool isEmpty(const Stack<T>& s) const {
return top == -1;
}
```
检查栈顶位置是否等于初始值-1,代表栈为空。
7. **清空栈**:
```cpp
void clear(Stack<T>& s) {
top = -1;
delete[] stackArray; // 如果使用new[]动态分配的内存,记得释放
}
```
将栈顶置为-1,如果使用了动态内存,则释放它。
阅读全文