简单顺序栈(C++模版技术实现)
时间:2011-05-26
来源:单鱼游弋
在手机上看
手机扫描阅读
下面代码仅供本人复习数据结构所用,实用性N低,各位飘过吧~~哈哈:>
//
// C++ 模版技术实现简单顺序栈.
//
#include <cstdlib>
#include <iostream>
#include <iomanip>
#include <stdexcept>
//
// 顺序栈类模版.
//
template <typename T>
class Stack
{
private:
int _top;
size_t _size;
T *_pStack;
static const size_t _DEF_SIZE = 20;
//
// _MIN_TOP 不应为 size_t 类型.
// 因为 size_t 类型与 int 类型变量比较时会将 int 类型转换为 size_t 类型.
//
static const int _MIX_TOP = 0;
public:
Stack(const size_t size = _DEF_SIZE)
: _top(_MIX_TOP - 1)
, _size(size)
{ _pStack = new T[_size]; }
~Stack(void)
{ delete[] _pStack; }
bool isEmpty(void) const
{ return _MIX_TOP > _top; }
bool isFull(void) const
{ return _size - 1 == _top; }
T getTop(void) const
{
if (isEmpty()) {
throw std::underflow_error("栈空下溢 !");
}
return _pStack[_top];
}
void push(const T &val)
{
if (isFull()) {
throw std::overflow_error("栈满上溢 !");
}
_pStack[++_top] = val;
}
T pop(void)
{
if (isEmpty()) {
throw std::underflow_error("栈空下溢 !");
}
return _pStack[_top--];
}
};
//
// 测试栈.
//
int main(void)
{
const size_t MAX_SIZE = 20;
Stack<int> stack(MAX_SIZE);
std::cout << "栈" << (stack.isEmpty() ? "" : "不") << "为空." << std::endl;
std::cout << "栈" << (stack.isFull() ? "" : "不") << "为满." << std::endl;
for (size_t i = 0; i < MAX_SIZE; ++i)
{
stack.push(i);
std::cout << std::setw(3) << stack.getTop();
}
// stack.push(MAX_SIZE);
std::cout << std::endl;
std::cout << "栈" << (stack.isEmpty() ? "" : "不") << "为空." << std::endl;
std::cout << "栈" << (stack.isFull() ? "" : "不") << "为满." << std::endl;
for (size_t i = 0; i < MAX_SIZE; ++i)
{
std::cout << std::setw(3) << stack.pop();
}
// std::cout << std::setw(3) << stack.pop();
return EXIT_SUCCESS;
}
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28















