栈:后进先出
话不多说先上代码:
头文件MyStack.h
#ifndef MYSTACK_H
#define MYSTACK_H
class MyStack
{
public:
MyStack(int size);//分配内存初始化栈空间,设定栈容量,栈顶
~MyStack();//回收栈空间内存
bool stackEmpty();//判断栈是否为空,空返回ture,非空返回false
bool stackFull();//判定栈是否已经满,满返回ture,不满返回false
void clearStack();//清空栈
int stackLength(); //已有的元素个数
void push(char elem);//元素入栈,栈顶上升
char pop();//元素出栈,栈顶下降
bool pop(char &elem)
void stackTraverse(bool);//遍历栈中所有元素
//目的:掌握栈的实现原理和运行机制
private:
char *m_pBuffer;//栈空间指针
int m_iSize;//栈容量
int m_iTop;//栈顶,栈中元素个数
};
#endif
类的实现MyStack.cpp
#include "MyStack.h"
#include <iostream>
MyStack::MyStack(int size)//分配内存初始化栈空间,设定栈容量,栈顶
{
m_iSize = size;
m_pBuffer = new char[size];
m_iTop = 0;
}
~MyStack::MyStack()//回收栈空间内存
{
delete []m_pBuffer;
m_pBuffer = NULL;
}
bool MyStack::stackEmpty()//判断栈是否为空,空返回ture,非空返回false
{
if(0 == m_iTop)
{
return true;
}
return false;
}
bool MyStack::stackFull()//判定栈是否已经满,满返回ture,不满返回false
{
if(m_iTop >= m_iSize)
{
return true;
}
return false;
}
void MyStack::clearStack()//清空栈
{
m_iTop = 0;
}
int MyStack::stackLength(); //已有的元素个数
{
return m_iTop;
}
void MyStack::push(char elem);//元素入栈,栈顶上升
{
if(stackFull())
{
return false;
}
m_pBuffer[m_iTop] = elem;
m_itop++;
return true;
}
char MyStack:: pop()//元素出栈,栈顶下降
{
if(stackEmpty())
{
throw 1;//这边需要完善
}else
{
m_iTop--;
m_pBuffer[m_iTop];
}
return m_pBuffer[m_iTop];
}
bool MyStack::pop(char &elem)
{
if(stackEmpty())
{
return false;
}else
{
m_iTop--;
elem = m_pBuffer[m_iTop];
}
return true;
}
void MyStack::stackTraverse(bool isFromButtom)//遍历栈中所有元素
{
if(isFromButtom)
{
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]<<",";
}
}
}
main
#include <iostream>
#include "MyStack.h"
#include "MyStack.cpp"
using namespace std;
int main()
{
MyStack *pStack=new MyStack(5);
delete pStack;
pStack=NULL;
pStack->push('h');//低
pStack->push('e');
pStack->push('l');
pStack->push('l');
pStack->push('0');//顶
pStack->stackTraverse(true);
char elem =0;
pStack->pop(elem);//取出来的是栈顶的那个字符o
cout<<endl<<elem<<endl;
cout<<pStack->stackLength()<<endl;
//pStack->pop();
if(pStack->stackEmpty())
{
cout<<"栈为空"<<endl;
}
if(pStack->stackFull())
{
cout<<"栈为满"<<endl;
}
pStack->clearStack();+
cout<<pStack->stackLength()<<endl;
system("pause");
return 0;
}