3.编写类模版,实现顺序栈的功能: (1)栈的初始化 (2)判断栈是否为空; (3)判断栈是否为满; (4)入栈; (5)出栈; (6)销毁。 并写出调用此类模板的完整程序。
时间: 2023-12-12 14:04:35 浏览: 56
以下是一个实现顺序栈功能的类模板示例:
```cpp
template <typename T>
class SeqStack {
private:
T *data;
int top;
int maxSize;
public:
SeqStack(int size) {
data = new T[size];
maxSize = size;
top = -1;
}
~SeqStack() {
delete[] data;
}
bool isEmpty() const {
return top == -1;
}
bool isFull() const {
return top == maxSize - 1;
}
void push(const T &elem) {
if (isFull()) {
throw "Stack is full!";
}
data[++top] = elem;
}
T pop() {
if (isEmpty()) {
throw "Stack is empty!";
}
return data[top--];
}
void destroy() {
top = -1;
}
};
```
完整程序如下:
```cpp
#include <iostream>
#include <string>
using namespace std;
template <typename T>
class SeqStack {
private:
T *data;
int top;
int maxSize;
public:
SeqStack(int size) {
data = new T[size];
maxSize = size;
top = -1;
}
~SeqStack() {
delete[] data;
}
bool isEmpty() const {
return top == -1;
}
bool isFull() const {
return top == maxSize - 1;
}
void push(const T &elem) {
if (isFull()) {
throw "Stack is full!";
}
data[++top] = elem;
}
T pop() {
if (isEmpty()) {
throw "Stack is empty!";
}
return data[top--];
}
void destroy() {
top = -1;
}
};
int main() {
SeqStack<int> s(5);
try {
s.push(1);
s.push(2);
s.push(3);
s.push(4);
s.push(5);
//s.push(6);
}
catch (const char *msg) {
cerr << msg << endl;
}
while (!s.isEmpty()) {
cout << s.pop() << " ";
}
cout << endl;
return 0;
}
```
在这个程序中,我们首先创建了一个可以容纳5个元素的整数栈。然后我们尝试将6个元素压入栈中,但由于栈满,第6个元素无法压入,会抛出异常。接着我们弹出所有的元素并输出,最后销毁栈。
阅读全文
相关推荐
















