栈之C++封装

来源:互联网 发布:ios软件开发工程师招聘 编辑:程序博客网 时间:2024/06/04 18:47

1. 栈的简介

1.1栈的特点

栈(Stack)是一种线性存储结构,它具有如下特点:

  1. 栈中的数据元素遵守”先进后出"(First In Last Out)的原则,简称FILO结构。
  2. 限定只能在栈顶进行插入和删除操作。

1.2栈的相关概念

栈的相关概念:

  1. 栈顶与栈底:允许元素插入与删除的一端称为栈顶,另一端称为栈底。
  2. 压栈:栈的插入操作,叫做进栈,也称压栈、入栈。
  3. 弹栈:栈的删除操作,也叫做出栈。

例如我们有一个存储整型元素的栈,我们依次压栈:{1,2,3}

在压栈的过程中,栈顶的位置一直在”向上“移动,而栈底是固定不变的。
如果我们要把栈中的元素弹出来:

出栈的顺序为3、2、1 ,顺序与入栈时相反,这就是所谓的”先入后出“。
在弹栈的过程中,栈顶位置一直在”向下“移动,而栈底一直保持不变。

如果你玩过一种称为汉诺塔的益智玩具,你就会知道游戏中小圆盘的存取就是一种先进后出的顺序,一个圆柱就是一个栈:

1.3 栈的操作

栈的常用操作为:

  1. 弹栈,通常命名为pop
  2. 压栈,通常命名为push
  3. 求栈的大小
  4. 判断栈是否为空
  5. 获取栈顶元素的值

2、栈的C++封装
  .h文件:
#ifndef ZZCSTACK_H#define ZZCSTACK_Hclass CZzcStack{public:CZzcStack(int nSize);//为栈分配内存~CZzcStack();        //回收栈内存bool IsStackEmpty();//判断栈是否为空bool IsStackFull();//判断栈是否为满void ClearStack();//清空栈int GetStackLength();//获取栈中元素的个数bool PushStackToTail(char cItem);//压入栈尾,也可将其它复杂的结构体替代char型。bool PopStackFromTail(char &cItem);//将栈尾元素出栈void StackTraverse(bool bFromButton);//遍历栈中的元素private:char *m_pBuffer;//栈空间指针int m_nCapacity;//栈容量int m_nTop;//栈顶};#endif

.Cpp文件:
#include "StdAfx.h"#include "ZzcStack.h"#include<iostream>using namespace std;CZzcStack::CZzcStack(int nSize){m_nCapacity = nSize;m_pBuffer   = new char[m_nCapacity];m_nTop      = -1;//初始化时栈顶为-1}CZzcStack::~CZzcStack(){delete[]m_pBuffer;m_pBuffer = NULL;}bool CZzcStack::IsStackEmpty(){if (-1 == m_nTop){return true;}return false;}bool CZzcStack::IsStackFull(){if (m_nTop >= m_nCapacity-1){return true;}return false;}void CZzcStack::ClearStack(){m_nTop = -1;}int CZzcStack::GetStackLength(){return m_nTop+1;}bool CZzcStack::PushStackToTail(char cItem){if (IsStackFull()){return false;}m_nTop++;m_pBuffer[m_nTop] = cItem;return true;}bool CZzcStack::PopStackFromTail(char &cItem){if (IsStackEmpty()){return false;}cItem = m_pBuffer[m_nTop];m_nTop--;return true;}void CZzcStack::StackTraverse(bool bFromButton){if (bFromButton){for (int i = 0;i <= m_nTop;i++){cout<<m_pBuffer[i]<<",";}} else{for (int i = m_nTop;i >=0;i--){cout<<m_pBuffer[i]<<",";}}cout<<endl;}

理论部分内容借鉴自:点击打开链接
原创粉丝点击