头文件
#ifndef STACK_H
#define STACK_H
class Stack{
private:
char *m_pBuffer; //存栈的数组指针
int m_iTop; //栈底下标
int m_iSize; //数组大小
public:
Stack(int size);
~Stack();
bool isEmpty();
bool isFull();
void clearStack();
bool push(char elem);
bool pop(char &elem);
void stackTraverse();
int StackLength();
};
#endif
cpp文件实现
#include "Stack.h"
#include <iostream>
using namespace std;
Stack::Stack(int size){
m_iSize = size;
m_pBuffer = new char[m_iSize];
m_iTop = 0;
}
Stack::~Stack(){
delete []m_pBuffer;
m_pBuffer = NULL;
}
bool Stack::isEmpty(){ //判空
if (0 == m_iTop){
return true;
}
return false;
};
bool Stack::isFull(){ //判满
if (m_iSize == m_iTop){
return true;
}
return false;
};
void Stack::clearStack(){ //清空栈
m_iTop = 0;
};
bool Stack::push(char elem){ //进栈
if (isFull()){ //首先判满,满了就装不进了
return false;
}
m_pBuffer[m_iTop] = elem;
m_iTop++;
return true;
};
bool Stack::pop(char &elem){ //出栈
if (isEmpty()){ //首先判空,空没东西弹出栈
return false;
}
m_iTop--; //因为之前进栈的时候top自增,所以添加后总是指向一个空的栈空间,所以要先top-1,才会有元素出栈
elem = m_pBuffer[m_iTop];
return true;
};
void Stack::stackTraverse(){ //遍历栈
for (int i = 0; i < m_iTop; i++){ //从栈底到栈顶遍历
cout << m_pBuffer[i] << endl;
}
for (int i = m_iTop - 1 ; i >= 0; i--){ //从栈顶到栈底遍历
cout << m_pBuffer[i] << endl;
}
};
int Stack::StackLength(){ //获取栈元素的个数
return m_iTop;
};
测试栈
#include "Stack.h"
#include <iostream>
using namespace std;
int main(void){
Stack *s = new Stack(5);
s->push('h');
s->push('e');
s->push('l');
s->push('l');
s->push('o');
s->stackTraverse();
delete s;
s = NULL;
system("pause");
return 0;
}