模拟实现stack

一:
(1)stack是一种序列式容器,在头文件<stack>中包括,也是一个适配器类,默认的底层实现为vector;
(2)他的特点是先进后出,只能在栈顶对元素进行压栈和出栈操作;
(3)模拟是实现stack,要实现★栈的判空,★求栈中元素个数,★压栈和★出栈操作,★返回栈顶元素等;
二.、程序代码:

#include <iostream>
using namespace std;
#include <cassert>
#include<cstdlib>
template<class T>
class Stack
{
public:
    Stack()
        :_a(NULL)
        ,_size(0)
        ,_capacity(0)
    {}
    ~Stack()
    {
        if (_a!=NULL)
        {
            delete []_a;
            _a=NULL;

        }
        _size=0;
        _capacity=0;
    }
public:
    bool Empty()//判断栈是否为空
    {
    return   _size==0;
    }
    bool Full()//判断栈是否已满
    {
        return   _size==_capacity;
    }
    size_t Size()//返回栈中元素的个数
    {
        return _size;
    }
    T& Top()// 返回栈顶的元素
    {
        assert(_size>0);
        return _a[_size-1];
    }
    void CheakCapacity()//判容
    {
        if (Full())
        {
            int NewCapacity=_capacity*2+3;
            T* tmp=new T[NewCapacity];
            //memcpy(tmp,_a,sizeof(T)*_size);
            for (size_t i=0;i<_size;++i)
            {
              tmp[i]=_a[i];
            }
            delete[] _a;
            _a=tmp;
            _capacity=NewCapacity;

        }

    }
    void Push(const T& x)//栈顶压入新元素
    {

        CheakCapacity();
        _a[_size]=x;
        _size++;
    }
    void Pop()// 删除栈顶元素
    {
       if (Empty())
       {
           cout<<"栈已空"<<endl;
           return;
       }
       else
       {
         _size--;
       }
    }
protected:
    T*  _a;
    size_t _size;
    size_t _capacity;
};

测试代码:

int main()
{
    Stack<int>  s;
    s.Push(1);
    s.Push(3);
    s.Push(5);
    s.Push(7);
    s.Push(9);
    cout<<"stack empty?"<<s.Empty()<<endl;
    cout<<"stack full?"<<s.Empty()<<endl;
    s.Pop();
    cout<<"stack size:"<<s.Size()<<endl;
    cout<<"stack top:"<<s.Top()<<endl;
    return 0;
}

三:运行结果:
这里写图片描述

接下来是栈的好兄弟队列的模拟实现——-O(∩_∩)O哈哈~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值