用一个模板实现对栈的操作,栈的数据结构由链表实现。实现栈的功能: 进栈、出栈和清空的功能。并在 main()函数中实现对 int 型栈和 struct CHAPA 型栈 (定义如下)的基本操作。 //--------------------------------------------------------------------------------------------------- struct CHAPA { char *pName; bool Gender; int Age; struct CHAPA *next; };
时间: 2023-08-15 13:17:42 浏览: 73
好的,下面是实现栈操作的模板代码:
```c++
#include <iostream>
#include <string>
using namespace std;
template <typename T>
class Stack {
private:
struct Node {
T data;
Node* next;
Node(T d, Node* n = nullptr) : data(d), next(n) {}
};
Node* top;
public:
Stack() : top(nullptr) {}
~Stack() {
while (!empty()) {
pop();
}
}
bool empty() const {
return top == nullptr;
}
void push(const T& val) {
top = new Node(val, top);
}
T pop() {
T val = top->data;
Node* temp = top;
top = top->next;
delete temp;
return val;
}
void clear() {
while (!empty()) {
pop();
}
}
};
int main() {
// int 型栈
Stack<int> intStack;
intStack.push(1);
intStack.push(2);
intStack.push(3);
cout << intStack.pop() << endl; // 输出 3
cout << intStack.pop() << endl; // 输出 2
intStack.clear();
cout << intStack.empty() << endl; // 输出 1
// struct CHAPA 型栈
Stack<CHAPA*> chapaStack;
CHAPA* p1 = new CHAPA{"Tom", true, 20, nullptr};
CHAPA* p2 = new CHAPA{"Mary", false, 18, nullptr};
chapaStack.push(p1);
chapaStack.push(p2);
cout << chapaStack.pop()->pName << endl; // 输出 Mary
cout << chapaStack.pop()->pName << endl; // 输出 Tom
chapaStack.clear();
cout << chapaStack.empty() << endl; // 输出 1
return 0;
}
```
需要注意的几点:
1. 栈的构造函数和析构函数分别用于初始化和清空栈中的元素,需要释放内存,防止内存泄漏。
2. 栈的 push() 函数用于将元素压入栈中,pop() 函数用于从栈中弹出元素并返回它的值。
3. 栈的 clear() 函数用于清空栈中的元素。
4. 在实现 struct CHAPA 型栈时,由于 CHAPA 是一个结构体,所以需要使用指针类型 CHAPA*。同时,在压入元素时需要先分配内存,否则会出现野指针的情况。在清空栈时,需要手动释放内存,否则会出现内存泄漏的情况。
阅读全文