动态栈的创建

来源:互联网 发布:unity3d安装步骤 编辑:程序博客网 时间:2024/06/06 06:54

一、什么是栈

       栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。


栈可以是个容器,并且这个容器存放元素的特点是先进后出


栈的接口有 :

push();         //将元素压入栈

pop();           //删除栈顶元素

top();            //读取栈顶元素

size();           //栈内元素的个数

empty();        //栈是否为空,为空返回1,否则返回0


二、栈的实现

栈:(1)静态栈:

               优点:实现简单。

               缺点:栈大小固定,当空间存满后无法再存,或给的空间太大浪费空间

       (2)动态栈

               缺点:相比静态栈代码实现复杂容易出错

               优点:大小不固定,当内存不足时可自己开辟空间


动态栈的实现:

#define Max_Stack 3                        //1.动态栈template<class T>class Stack{public:Stack():_array((T*)malloc(sizeof(T)*Max_Stack)), _capacity(Max_Stack), _size(0){ }void Push(const T& data)         //元素入栈{CheckCapacity();_array[_size] = data;_size++;}void Pop()          //顶部元素出栈{if (Empty())return;_size--;}T Top()              //读取顶部元素{if (Empty())return NULL;return _array[_size-1];}T Top()const          {if (Empty())return NULL;return _array[_size-1];}size_t Size()const        //获取当前元素个数{return _size;}bool Empty()const         //判断栈是否为空{return _size == 0;}private:void CheckCapacity()       //增容函数{if (_size < _capacity)    return;else{T*ret = (T*)realloc(_array, (2 * _capacity + 3)*sizeof(T));if (ret != NULL){_array = ret;_capacity = 2 * _capacity + 3;}}}T* _array;size_t _capacity;size_t _size;};

栈的调用:

int main(){Stack<int> s;s.Push(1);         //压栈s.Push(2);         //压栈s.Push(3);         //压栈s.Push(4);         //压栈s.Push(5);         //压栈cout << s.Size() << endl;    //栈内元素个数cout<<s.Top()<<endl;         //访问栈顶元素s.Pop();                   //删除栈顶元素cout<<s.Top()<<endl;        //访问栈顶元素s.Pop();                   //删除栈顶元素system("pause");return 0;}


                         






原创粉丝点击