用一个模板实现对栈的操作,栈的数据结构由链表实现。实现栈的功能: 进栈、出栈和清空的功能。并在 main()函数中实现对 int 型栈和 struct CHAPA 型栈 (定义如下)的基本操作。 //--------------------------------------------------------------------------------------------------- struct CHAPA { 面向对象程序设计上机指导 26 char* pName; bool Gender; int Age; }; //---------
时间: 2023-08-15 14:28:43 浏览: 101
下面是一个使用链表实现的栈的模板,包括进栈、出栈和清空的功能:
```cpp
#include <iostream>
using namespace std;
template<typename T>
class Stack {
private:
struct Node {
T data;
Node* next;
};
Node* top;
public:
Stack() {
top = nullptr;
}
~Stack() {
clear();
}
void push(T data) {
Node* newNode = new Node();
newNode->data = data;
newNode->next = top;
top = newNode;
}
T pop() {
if (top == nullptr) {
throw "Stack is empty!";
}
Node* node = top;
T data = node->data;
top = top->next;
delete node;
return data;
}
bool isEmpty() {
return top == nullptr;
}
void clear() {
while (top != nullptr) {
Node* node = top;
top = top->next;
delete node;
}
}
};
struct CHAPA {
char* pName;
bool Gender;
int Age;
};
int main() {
// 定义int类型的栈
Stack<int> intStack;
intStack.push(1);
intStack.push(2);
intStack.push(3);
while (!intStack.isEmpty()) {
cout << intStack.pop() << " ";
}
cout << endl;
// 定义CHAPA类型的栈
Stack<CHAPA> chapaStack;
CHAPA chapa1 = { "Tom", true, 20 };
CHAPA chapa2 = { "Jerry", false, 25 };
chapaStack.push(chapa1);
chapaStack.push(chapa2);
while (!chapaStack.isEmpty()) {
CHAPA chapa = chapaStack.pop();
cout << chapa.pName << " " << chapa.Gender << " " << chapa.Age << endl;
}
return 0;
}
```
在上面的代码中,定义了一个模板类`Stack`,其中`Node`结构体表示链表的节点,`top`指针表示栈顶。`push`方法用于进栈,将一个新的节点插入到链表的头部;`pop`方法用于出栈,将栈顶的节点删除并返回其数据;`isEmpty`方法用于判断栈是否为空;`clear`方法用于清空整个栈。在`main`函数中,分别定义了一个`int`类型的栈和一个`CHAPA`类型的栈,并进行了基本操作的演示。
阅读全文