实现Stack的基本操作
来源:互联网 发布:看股票最好的软件 编辑:程序博客网 时间:2024/05/21 20:22
简单来说,栈是一种特殊的线性表,只允许在固定一端(栈顶)进行插入和删除元素的操作。因此栈又被称为后进先出的线性表。下面就来看看它可以进行哪些基本的操作。在进行扩容时,如果是对栈中基本数据类型的操作我们使用浅拷贝memcpy,否则用=进行拷贝,所以在这里用到了类型萃取。下面看一下代码实现。
/////////////////////实现Stack的基本操作//////////////////////////////////////////////扩容时 类型萃取////////////////////struct _TrueType{static bool Get(){return true;}};struct _FalseType{static bool Get(){return false;}};template<typename T>struct TypeTraits{typedef _FalseType IsPOD;};template<>struct TypeTraits<int>{typedef _TrueType IsPOD;};template<>struct TypeTraits<float>{typedef _TrueType IsPOD;};template<>struct TypeTraits<double>{typedef _TrueType IsPOD;};template<>struct TypeTraits<long>{typedef _TrueType IsPOD;};template<>struct TypeTraits<char>{typedef _TrueType IsPOD;};template<typename T>class Stack{public:Stack(size_t capacity = 10):_capacity(capacity){_pData = NULL;_size = 0;}Stack(const Stack<T>& s){_pData = s._pData;_size = s._size;_capacity = s._capacity;}Stack<T>& operator=(const Stack<T>& s){if(this != &s){_pData = s._pData;_size = s._size;_capacity = s._capacity;}return *this;}void Push(const T& x){_CheckCapacity();_pData[_size++] = x;}void Pop(){assert(_size);--_size;}size_t Size()const{return _size;}T& Top(){return _pData[_size-1];}const T& Top()const{return _pData[_size-1];}bool Empty()const{return _size==0;}private:void _CheckCapacity(){if(_size == capacity){T* temp = new[_capacity*2+2];//申请空间 注意要加个常数if(TypeTraits<T>::IsPOD::Get())//如果为POD类型{memcpy(temp, _pData, sizeof(T)*_size);//用memcpy拷贝元素}for(int idx = 0; idx < _size; idx++)//不是POD类型则 用for循环一个一个拷贝元素{temp[idx] = _pData[idx];}delete[] _pData;//释放旧空间_pData = temp;//指向新空间}_capacity = _capacity*2+2;//容量变为新的容量}T* _pData;size_t size;size_t capacity;};
0 0
- 实现Stack的基本操作
- 栈(Stack)的基本操作
- stack栈的基本操作
- 栈Stack的一些基本操作
- 基于数组的Stack基本操作
- queue stack priority_queue的基本操作
- 数据结构-stack基本操作
- stack容器基本操作
- 225. Implement Stack using Queues 用两个队列实现栈的基本操作。
- 【c++】模拟实现栈 类模板(Stack的基本操作)
- c++中栈的基本实现stack
- [栈的基本操作]含有Min()的stack
- stl stack 和 queue 的基本操作和理解
- stack的基本用法
- 图基本操作的实现
- 链表上的基本操作实现
- 单链表的基本操作实现
- 队列基本操作的实现
- 利用 matlab 批量改变图片尺寸大小
- C# --- sql 求最大值、最小值、平均值等函数
- char与TCHAR相互转化
- Improving Object Detection With One Line of Code
- Monthly Expense POJ
- 实现Stack的基本操作
- FlexBoxLayout结合DBFlow实现流式布局
- Java设计模式之观察者模式
- 在使用github推送项目的时候所遇到的错误
- 利用Python将原数据压缩到一个pickle 文件夹里
- ubuntu-ros安装脚本
- 内网通过外网IP访问内网服务器?
- 计算机图形学(七)Bezier(贝塞尔)曲线讲解与源代码
- PS 颜色列表