#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 seqStack :public stack<elemType> {
private:
elemType * elem;
int top_p;
int maxSize;
void doubleSpace();
public:
seqStack(int initSize = 10) {
elem = new elemType[initSize];
maxSize = initSize;
top_p = -1;
}
~seqStack() { delete[]elem; }
bool isEmpty()const { return top_p == -1; }
void push(const elemType &x);
elemType pop();
elemType top()const { return elem[top_p]; }
};
template<class elemType>
void seqStack<elemType>::doubleSpace() {
elemType *tmp = elem;
elem = new elemType[2 * maxSize];
for (int i = 0; i < maxSize; ++i)
elem[i] = tmp[i];
delete[]tmp;
maxSize *= 2;
}
template <class elemType>
void seqStack<elemType>::push(const elemType &x) {
if (top_p == maxSize - 1)
doubleSpace();
top_p++;
elem[top_p] = x;
}
template<class elemType>
elemType seqStack<elemType>::pop() {
elemType tmp = elem[top_p];
top_p--;
return tmp;
}
int main() {
seqStack<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-02-28 15:35:29 发布