栈之C++封装
来源:互联网 发布:ios软件开发工程师招聘 编辑:程序博客网 时间:2024/06/04 18:47
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_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;}
理论部分内容借鉴自:点击打开链接
阅读全文
0 0
- OOP之封装 【C#】
- OOP之封装 【C#】
- 栈之C++封装
- Objective-C语法之继承、封装、多态
- 黑马程序员 之 Objective-C 浅谈封装
- Object-c 面向对象之封装
- C语言之单向链表封装
- C#--封装
- 【C#】封装
- 3.封装继承与多态之objective-c
- 3.封装继承与多态之objective-c
- 面向对象三大特性 之 封装(C#)
- 面向对象之继承,封装,多态c语言实现
- 用C语言实现面向对象之封装
- C++/CLI 托管C++之字符串封装【5】
- C++/CLI 托管C++之enum枚举封装【6】
- C++/CLI 托管C++之结构体封装【8】
- C++/CLI 托管C++之联合体union封装【10】
- web前端三大技术介绍之CSS
- Android Studio集成SVN报错
- D3.js实现节点折叠+闪烁+叶节点形状改变的demo
- Python 爬虫学习笔记
- C#实现对外部程序的调用操作
- 栈之C++封装
- HUNNU---第八届校赛<混淆视听>
- 润乾V5部署异常信息:no report config file!错误排除步骤
- MySQL学习记录
- python 虚拟环境搭建
- LaTex——数学相关(公式)
- 10大程序员实用基础算法
- oralce存储过程拼接sql字符串,并执行sql字符串给变量赋值
- Windows操作系统上安装和配置LDAP Server