Q:通过 数组 实现 栈 功能
A:
MyStack.h
#ifndef MYSTACK_H
#define MYSTACK_H
/******************************/
/*栈实现 2017.03.02 by hyc*****/
/******************************/
class MyStack
{
public:
MyStack(int size); //初始化栈空间
~MyStack();//回收栈空间内存
void clearStack();//清空栈
bool stackEmpty();//判空栈,若空返回true
bool stackFull();//判满栈,若满返回true
int stackLength();//栈中元素个数
bool push(char elem);//元素入栈,栈顶上升
bool pop(char &elem);//元素出栈,栈顶下降
void stackTraverse(bool isFromBottom);//遍历栈中元素 isFromBottom=1,从栈底遍历
private:
char *m_pBuffer;//栈空间指针
int m_isize;//栈容量
int m_itop;//栈顶,也是栈中元素个数
};
#endif // !MYSTACK_H
MyStack.cpp
#include "MyStack.h"
#include <iostream>
using namespace std;
MyStack::MyStack(int size)
{
m_isize = size;
m_pBuffer = new char[size];
m_itop = 0;
}
MyStack::~MyStack()
{
delete[] m_pBuffer;
}
void MyStack::clearStack()
{
m_itop = 0;
}
bool MyStack::stackEmpty()
{
return 0 == m_itop ? true : false;
}
bool MyStack::stackFull()
{
return m_isize == m_itop ? true : false;
}
int MyStack::stackLength()
{
return m_itop;
}
bool MyStack::push(char elem)
{
if (stackFull())
{
return false;
}
m_pBuffer[m_itop] = elem;
m_itop++;
return true;
}
bool MyStack::pop(char &elem)
{
if (stackEmpty())
{
return false;
}
m_itop--;
elem = m_pBuffer[m_itop];
return true;
}
void MyStack::stackTraverse(bool isFromBottom)
{
if (isFromBottom)
{
for (int i = 0; i < m_itop; i++)
{
cout << m_pBuffer[i] << ",";
}
}
else
{
for (int i = m_itop-1; i >= 0; i--)
{
cout << m_pBuffer[i] << ",";
}
}
}
demo.cpp:用于测试栈功能实现情况
#include "MyStack.h"
#include <iostream>
using namespace std;
/******************************/
/*栈实现 2017.03.02 by hyc*****/
/******************************/
int main(void)
{
MyStack *pStack = new MyStack(5);
pStack->push('h');//栈底
pStack->push('e');
pStack->push('l');
pStack->push('l');
pStack->push('o');//栈顶
if (pStack->stackFull()){
cout << "栈满" << endl;
}
pStack->stackTraverse(true);
cout << endl;
char ch;
pStack->pop(ch);
cout << ch << endl;
if (pStack->stackEmpty()){
cout << "栈空" << endl;
}
if (pStack->stackFull()){
cout << "栈满" << endl;
}
pStack->stackTraverse(false);
cout << pStack->stackLength() << endl;
pStack->clearStack();
if (pStack->stackEmpty()){
cout << "栈空" << endl;
}
delete pStack;
pStack = NULL;
system("pause");
return 0;
}
输出结果:
注意:本次练习只实现了简单的int类型的栈功能,可以使用模板类进一步实现其多类型支持。并且本程序有很多不完善的地方,如分配空间等的异常检测。