#include <iostream>
#include <string.h>
using namespace std;
//抽象模板类
template <class T>
class Stack {
public:
virtual void push(T const& obj) = 0;
virtual void pop() = 0;
virtual T top() const = 0;
virtual bool empty() = 0;
virtual int size() = 0;
};
/*------------------------数组实现 ------------------------*/
template <class T>
class Stack_by_array : public Stack <T> {
private:
T* elems;
int p; //栈顶指针
int maxSize; //最大容量
void expansion() { //扩容函数
T* tmp = elems;
maxSize *= 2; //每次增大两倍
elems = new T[maxSize];
memcpy(elems, tmp, sizeof(tmp)); //拷贝原先元素数据
delete(tmp);
}
public:
Stack_by_array() {
p = -1;
maxSize = 8; //默认大小设定为8,可随意变更
elems = new T[maxSize];
}
void push(T const& obj) {
if (size() == maxSize) { //达到容量上线便扩容
expansion();
}
elems[++p] = obj;
}
void pop() {
if (p < 0) {
cout << "错误,栈为空" << endl;
exit(0);
}
elems[p] = elems[
C++ 堆栈(Stack)实现 数组方式 链表方式 类模板
C++实现堆栈:数组与链表方式
最新推荐文章于 2024-06-20 19:06:12 发布
本文详细介绍了如何使用C++语言实现堆栈,包括基于数组和链表两种方式,并利用类模板进行通用化设计,探讨了堆栈的基本操作如压栈、弹栈、查看栈顶元素等。

最低0.47元/天 解锁文章
586

被折叠的 条评论
为什么被折叠?



