栈的C++实现

来源:互联网 发布:开通淘宝店铺要钱吗 编辑:程序博客网 时间:2024/06/08 10:04

  以下是数据结构中栈的C++实现,如有需要,请访问我的Github获取完整源码。

//栈类的定义(Stack.h)class Stack { public:     Stack(int size);                      //构造函数,分配内存,初始化栈空间,设置栈容量(size不变),栈顶     ~Stack();                             //析构函数,释放空间     bool stackEmpty();                    //栈判空,为空返回true,非空返回false     bool stackFull();                     //栈判满,为满返回true,非满返回false     void clearStack();                    //清空栈中数据     int stackLength();                    //获取栈中现有元素个数     bool push(char element);              //元素入栈,栈顶上升     bool pop(char &element);              //元素出栈,栈顶下降     //char Stack::pop()                   //元素出栈的另一种定义     void stackTraverse(bool isFromButtom);//遍历栈中所有元素 public:     char *m_pBuffer;                      //栈空间指针,使用new开辟新的栈空间,用这个指针指向这段空间     int m_iSize;                          //栈容量,等于size的值,不变     int m_iTop;                           //栈顶,也代表栈中现有的元素个数 };//类中各成员函数的实现(Stack.cpp)#include<iostream>#include<stdio.h>#include"Stack.h"using namespace std;Stack::Stack(int size){    m_iSize = size;    m_pBuffer = new char[size];                                 //申请空间,大小为size    m_iTop = 0;                                                 //栈顶为0,即为空栈}Stack::~Stack(){    delete []m_pBuffer;    m_pBuffer = NULL;}bool Stack::stackEmpty(){    if(m_iTop == 0)                                             //if(0 == m_iTop)推荐使用,会检查语法     {        return true;    }    else     {        return false;    }}bool Stack::stackFull(){    if(m_iTop == m_iSize)                                      //if(m_iTop >= m_iSize) 也可    {        return true;    }    else    {        return false;    }}void Stack::clearStack(){    m_iTop = 0;                                                //栈中元素无效,新元素会覆盖掉旧元素}int Stack::stackLength(){    return m_iTop;}bool Stack::push(char element)                                 //先判满{    if(stackFull())    {        return false;    }    m_pBuffer[m_iTop] = element;    m_iTop++;                                                  //下一个要入栈的位置    return true;}bool Stack::pop(char &element)                                 //推荐bool类型{    if(stackEmpty())    {        return false;    }    m_iTop--;                                                  //保证top中有元素    element = m_pBuffer[m_iTop];                                  //m_iTop--;    return true;}/*char Stack::pop()                                              //char类型的出栈{    if(stackEmpty())    {        throw 1;    }    m_iTop--;                                                  //保证top中有元素    return m_pBuffer[m_iTop];}*/void Stack::stackTraverse(bool isFromButtom)                  //当栈中元素较为复杂时,需要使用visit()函数访问 {    if (isFromButtom)    {        for(int i = 0; i < m_iTop; i++)                       //从栈底向栈顶遍历        {            cout << m_pBuffer[i] << endl;        }    }    else    {        for(int i = m_iTop; i >= 0; i--)                      //从栈顶向栈底遍历        {            cout << m_pBuffer[i] << endl;        }    }}
原创粉丝点击