数据结构::模拟实现动态栈

来源:互联网 发布:东阳司法拍卖网淘宝网 编辑:程序博客网 时间:2024/06/05 02:17
#include<iostream>#include<assert.h>using namespace std;//动态栈template<typename T>class Stack{public:Stack()                      //构造函数:arr(NULL),_size(0),_capacity(0){}Stack(const Stack<T>& s)   //拷贝构造函数:arr(NULL),_size(s._size),_capacity(s._capacity){arr = new int[s._capacity];for(size_t i = 0; i<s._size; i++){arr[i] = s.arr[i];}}Stack<T>& operator=(const Stack<T>&s)     //赋值运算符重载{if(this != &s){_capacity = _capacity*2+3;T*temp = new int[s._capacity];for(size_t i = 0; i<s._size; i++){temp[i] = s.arr[i];}delete[]arr;arr = temp;_size = s._size;_capacity = s._capacity;}return *this;}~Stack()      // 析构函数{delete[]arr;_size = 0;_capacity = 0;}public:void CheckCapacity()        //检查动态栈的容量是否已满   {if(_size>=_capacity){T *temp = new int[_capacity*2+3];for(size_t i = 0; i<_size; i++){temp[i] = arr[i];}delete[] arr;arr = temp;_capacity =  _capacity*2+3;}}void Push(const T& x)     //压栈{CheckCapacity();arr[_size] = x;++_size;}void Pop()          // 出栈{assert(arr);--_size;}T& Top()             //返回栈顶的元素{return arr[_size-1];}const T& Top()const{return arr[_size-1];} size_t Size()               //求栈的有效存储元素{return _size;}bool Empty()            //检查栈是否为空{return _size==0;}protected:        T*arr;size_t _size;       //有效元素size_t _capacity;    //动态栈的总容量};//测试基本函数void Funtest1(){Stack<int> s1;Stack<int> s2(s1);Stack<int> s3;s3 = s2;}//测试插入删除函数void Funtest2(){Stack<int> s;s.Push(1);s.Push(2);s.Push(3);s.Push(4);while(!s.Empty()){cout<<s.Top()<<" ";s.Pop();}}//测试后面的函数void Funtest3(){Stack<int> s;s.Push(1);s.Push(2);s.Push(3);s.Push(4);s.Size();}int main(){//Funtest1();//Funtest2();Funtest3();return 0;}

0 0
原创粉丝点击