3. 编写类模版,实现顺序栈的功能: (1) 栈的初始化 (2) 判断栈是否为空; (3) 判断栈是否为满; (4) 入栈; (5) 出栈; (6) 销毁。的完整程序
时间: 2023-10-09 08:07:35 浏览: 47
栈的初始化、进栈出栈、清空栈、销毁栈
3星 · 编辑精心推荐
好的,以下是实现顺序栈功能的完整程序:
```c++
#include <iostream>
using namespace std;
const int MAXSIZE = 10;
template<typename T>
class SeqStack {
private:
T data[MAXSIZE];
int top; // 栈顶指针,指向栈顶元素的下标
public:
SeqStack(); // 构造函数
bool isEmpty(); // 判断栈是否为空
bool isFull(); // 判断栈是否为满
bool push(T x); // 入栈
bool pop(T& x); // 出栈
void destroy(); // 销毁栈
};
template<typename T>
SeqStack<T>::SeqStack() {
top = -1; // 初始化栈顶指针
}
template<typename T>
bool SeqStack<T>::isEmpty() {
return top == -1;
}
template<typename T>
bool SeqStack<T>::isFull() {
return top == MAXSIZE - 1;
}
template<typename T>
bool SeqStack<T>::push(T x) {
if (isFull()) return false; // 栈满,入栈失败
top++;
data[top] = x;
return true;
}
template<typename T>
bool SeqStack<T>::pop(T& x) {
if (isEmpty()) return false; // 栈空,出栈失败
x = data[top];
top--;
return true;
}
template<typename T>
void SeqStack<T>::destroy() {
top = -1; // 将栈顶指针重置为-1,表示栈已经被销毁
}
int main() {
SeqStack<int> s; // 声明一个存储int类型元素的栈
s.push(1);
s.push(2);
s.push(3);
int x;
while (s.pop(x)) {
cout << x << " "; // 输出栈中元素
}
cout << endl;
s.destroy(); // 销毁栈
return 0;
}
```
在这个程序中,我们使用模板类 SeqStack 来实现顺序栈。其中,模板参数 T 表示栈中元素的类型。我们使用数组 data 来存储栈中的元素,使用 top 来表示栈顶指针,指向栈顶元素的下标。在构造函数中,我们将栈顶指针 top 初始化为-1,表示栈为空。在 isEmpty 和 isFull 函数中,我们分别判断栈是否为空和是否为满。在 push 函数中,我们先判断栈是否为满,如果是,则入栈失败;否则,将栈顶指针 top 加1,然后将元素 x 存储到 data[top] 中。在 pop 函数中,我们先判断栈是否为空,如果是,则出栈失败;否则,将 data[top] 中的元素赋值给 x,然后将栈顶指针 top 减1。在 destroy 函数中,我们将栈顶指针 top 重置为-1,表示栈已经被销毁。在主函数中,我们声明一个存储 int 类型元素的栈 s,并依次将元素 1、2、3 入栈。然后,我们使用 pop 函数将栈中元素依次出栈,并输出它们。最后,我们调用 destroy 函数销毁栈。
阅读全文