堆栈的定义和实现

来源:互联网 发布:网络菜市场 编辑:程序博客网 时间:2024/05/22 00:54

**

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

**

堆栈模型

代码实现:

/*数据结构:stack (数组实现)功能:push  // 进栈          void push (const Type& val);      pop   //出栈          void pop();      top   //返回栈顶元素    const_reference& top() const;      size  //返回栈大小      size_type size() const;      empty //判断栈是否为空   bool empty() const;/*********附加功能(未实现)**********//*      emplace //在堆栈的顶部添加一个新元素(类似push,但避免了构造临时对象)      swap    //交换容器内容*/#include <iostream>#include <cstdlib>template <typename Type>class Stack{public:Stack(){    S=new Type[MAX_Stack];    Size=-1;    Push=0;    Pop=0;//    std::cout<<"栈已构造完毕"<<std::endl;}~Stack(){      delete[] S;//    std::cout<<"栈已析构"<<std::endl;}void push(const Type& val){    if(Size<MAX_Stack-1)        S[++Size]=val;    else    {      upstepStack();      push(val);    }}void pop(){    if(!empty())        {          std::cout<<"栈为空强制退出"<<std::endl;          exit(0);        }    else        Size--;}Type& top()const{  if(!empty())  {    std::cout<<"栈为空强制退出"<<std::endl;    exit(0);  }  else    return S[Size];}int size() const{    return Size;}bool empty() const{    if(Size==-1)        return false;    else        return true;}void upstepStack(){    Type *temp = S;    MAX_Stack+=increment;    S = new Type[MAX_Stack];    for(int i = 0;i<Size;i++)        S[i] = temp[i];    delete[] temp;}private:    Type *S;    int Size;    int Push;    int Pop;    int MAX_Stack=50;    const int increment=20;};

原创粉丝点击