栈之C++封装

xiaoxiao2021-02-28  120

1. 栈的简介

1.1栈的特点

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

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

1.2栈的相关概念

栈的相关概念:

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

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

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

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

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

1.3 栈的操作

栈的常用操作为:

弹栈,通常命名为pop压栈,通常命名为push求栈的大小判断栈是否为空获取栈顶元素的值 2、栈的C++封装   .h文件: #ifndef ZZCSTACK_H #define ZZCSTACK_H class 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; } 理论部分内容借鉴自: 点击打开链接
转载请注明原文地址: https://www.6miu.com/read-18258.html

最新回复(0)