堆栈的定义和实现

**

栈(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;
};

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值