栈(Stack)——class Stack 和 class Stack T 实现

对于Stack类的实现,跟之前链表实现也一样,只是封装成为面向对象的类了

PS:这里是线式存储的类和模板实现,链表式的实际上写法也是一样的

class Stack代码如下:

mystack.h

#include<stdlib.h>
#include<stdio.h>
struct Stack
{
        int _len;
        int _top;
        char * _space; //压入char类型
};
class mystack
{
    public:
        mystack(int sizeLen);  //初始化
        ~mystack(); //销毁
        bool isStackEmpty();
        bool isStackFull();
        void push(char ch);
        char pop();
        void resetStack();
    private:
        Stack * s;
};

 

mystack.cpp

#include "mystack.h"
mystack::mystack(int sizeLen)
{
    s->_len=sizeLen;
    s->_top=0;
    s->_space=(char*)malloc(sizeof(char*)*s->_len);
}
mystack::~mystack()
{
    free(s->_space);
}
bool mystack::isStackEmpty()
{
    return s->_top==0;
}
bool mystack::isStackFull()
{
    return s->_top==s->_len;
}
void mystack::push(char ch)
{
    s->_space[s->_top++]=ch;
}
char mystack::pop()
{
    return  s->_space[--s->_top];
}
void mystack::resetStack()
{
    s->_top=0;
}


main函数

#include <iostream>
#include"mystack.h"
using namespace std;
int main()
{
    mystack s(26);
    if(!s.isStackFull())
    {
        for(char ch = 'A';ch<='Z';ch++)
            s.push(ch);
    }
    //s.resetStack();
    while(!s.isStackEmpty())
        printf("%c ",s.pop());
    s.~mystack();
    return 0;
}


 

 

class Stack T (模板)实现如下:

mystack.h

#include<stdlib.h>
#include<stdio.h>
template<typename T>
class mystack   //这里需要把struct定义放在类的定义中
{
    public:
        mystack(int sizeLen);  //初始化
        ~mystack(); //销毁
        bool isStackEmpty();
        bool isStackFull();
        void push(T ch);
        T pop();
        void resetStack();
    protected:
        struct Stack
        {
                int _len;
                int _top;
                T * _space; //压入char类型
        };
    private:
        Stack * s;
};

//这里需要再头文件中放置全部的模板声明和定义,若放在cpp里编译不通过
template<typename T> //每个函数前都要写,注意格式,其他跟上面的 class 一样
mystack<T>::mystack(int sizeLen)
{
    s->_len=sizeLen;
    s->_top=0;
    s->_space=(char*)malloc(sizeof(char*)*s->_len);
}

template<typename T>
mystack<T>::~mystack()
{
    free(s->_space);
}

template<typename T>
bool mystack<T>::isStackEmpty()
{
    return s->_top==0;
}

template<typename T>
bool mystack<T>::isStackFull()
{
    return s->_top==s->_len;
}

template<typename T>
void mystack<T>::push(T ch)
{
    s->_space[s->_top++]=ch;
}

template<typename T>
T mystack<T>::pop()
{
    return  s->_space[--s->_top];
}

template<typename T>
void mystack<T>::resetStack()
{
    s->_top=0;
}

main函数

#include <iostream>
#include"mystack.h"
using namespace std;
int main()
{
    mystack<char> s(26);
    if(!s.isStackFull())
    {
        for(char ch = 'A';ch<='Z';ch++)
            s.push(ch);
    }
    //s.resetStack();
    while(!s.isStackEmpty())
        printf("%c ",s.pop());
    s.~mystack();
    return 0;
}

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值