3. 编写类模版,实现顺序栈的功能: (1) 栈的初始化 (2) 判断栈是否为空; (3) 判断栈是否为满; (4) 入栈; (5) 出栈; (6) 销毁。 并写出调用此类模板的完整程序。
时间: 2024-02-17 08:03:30 浏览: 65
顺序栈的运算实现(创建、销毁、入栈push、出栈pop、栈满、栈空、数量)
好的,这是一个比较基础的数据结构题目,我来为您解答。
首先,我们可以使用模板来定义一个通用的栈类,使其可以存储不同类型的数据。下面是这个类的基本框架:
```c++
template<class T>
class SeqStack {
public:
SeqStack(int size); // 构造函数,创建一个大小为size的栈
~SeqStack(); // 析构函数,销毁栈
bool isEmpty(); // 判断栈是否为空
bool isFull(); // 判断栈是否为满
bool push(const T& item); // 入栈操作
bool pop(T& item); // 出栈操作
private:
T *data; // 栈的数据存储区
int size; // 栈的大小
int top; // 栈顶指针
};
```
接下来,我们可以在类的实现文件中实现这些函数:
```c++
template<class T>
SeqStack<T>::SeqStack(int size) {
this->size = size;
top = -1;
data = new T[size];
}
template<class T>
SeqStack<T>::~SeqStack() {
delete[] data;
}
template<class T>
bool SeqStack<T>::isEmpty() {
return top == -1;
}
template<class T>
bool SeqStack<T>::isFull() {
return top == size - 1;
}
template<class T>
bool SeqStack<T>::push(const T& item) {
if (isFull()) {
return false;
}
data[++top] = item;
return true;
}
template<class T>
bool SeqStack<T>::pop(T& item) {
if (isEmpty()) {
return false;
}
item = data[top--];
return true;
}
```
最后,我们可以编写一个完整的调用程序来测试这个模板类的功能:
```c++
#include <iostream>
#include "SeqStack.h"
using namespace std;
int main() {
SeqStack<int> s(10);
if (s.isEmpty()) {
cout << "The stack is empty." << endl;
}
for (int i = 1; i <= 10; i++) {
s.push(i);
}
if (s.isFull()) {
cout << "The stack is full." << endl;
}
int item;
while (s.pop(item)) {
cout << item << " ";
}
cout << endl;
return 0;
}
```
这个程序中,我们首先创建了一个大小为10的栈对象s,然后通过调用isEmpty()函数判断栈是否为空。接着,我们将数字1到10依次入栈,并且通过调用isFull()函数判断栈是否为满。最后,我们通过调用pop()函数将栈中的元素依次出栈,并输出它们的值。
希望能够对您有所帮助!
阅读全文