#include <iostream>
using namespace std;
template<class elemType>
class stack {
public:
virtual bool isEmpty()const = 0;
virtual void push(const elemType &x) = 0;
virtual elemType pop() = 0;
virtual elemType top() const = 0;
virtual ~stack() {}
};
template<class elemType>
class linkStack :public stack<elemType> {
private:
struct node {
elemType data;
node *next;
node(const elemType &x, node *N = NULL) {
data = x;
next = N;
}
node() :next(NULL) {}
~node() {}
};
node *elem;
public:
linkStack() { elem = NULL; }
~linkStack();
bool isEmpty()const {
return elem == NULL;
}
void push(const elemType &x) {
node*tmp = new node(x,elem);
elem = tmp->next;
elem = tmp;
}
elemType pop() {
node *tmp = elem;
elemType x = tmp->data;
elem = elem->next;
delete tmp;
return x;
}
elemType top()const {
return elem->data;
}
};
template<class elemType>
linkStack<elemType>::~linkStack() {
node *tmp;
while (elem != NULL) {
tmp = elem;
elem = elem->next;
delete[]tmp;
}
}
int main() {
linkStack<int> s;
cout << s.isEmpty() << endl;
for (int i = 0; i < 20; ++i)
s.push(i);
for (int i = 0; i < 20; ++i)
cout << s.pop() << endl;
return 0;
}
c++链接栈模板类
最新推荐文章于 2023-12-09 18:48:07 发布