对于Stack类的实现,跟之前链表实现也一样,只是封装成为面向对象的类了
PS:这里是线式存储的类和模板实现,链表式的实际上写法也是一样的
#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;
};
#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;
}
#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;
}
#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;
}
#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;
}