博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构-栈(栈基本实现C++)
阅读量:4093 次
发布时间:2019-05-25

本文共 2012 字,大约阅读时间需要 6 分钟。

​栈和队列是两种重要的线性结构。从数据结构角度看,栈和队列也是线性表,其特殊在于栈和队列的基本操作是线性表操作的子集,他们是操作受限的线性表。但是从数据类型角度看,他们是和线性表大不相同的抽象数据类型。

栈是限定仅在表尾进行插入或者删除操作的线性表。表尾端称“栈顶”,表头端称“栈底”,不含元素的空表称“空栈”。栈最主要的特性为“先进后出”。

栈和线性表类似,有两种存储表示方法:顺序存储和链式存储

以下是对顺序栈抽象数据类的基本实现:

CStack.hpp

#include 
​const static int DEFAULT_CAPACITY = 0xffff; //栈默认容量大小宏定义template
class CStack{private: int m_iTop; //栈顶 int m_iCapacity; //栈容量大小 T *m_pDataArray; //指向栈内数据的指针​public: //默认无参构造函数 CStack() :m_iTop(0), m_iCapacity(DEFAULT_CAPACITY) { //初始化栈数据数组 m_pDataArray = new T[m_iCapacity]; } //构造函数,指定栈大小 CStack(int capacity) :m_iTop(0), m_iCapacity(capacity) { m_pDataArray = new T[m_iCapacity]; }​ //析构函数 ~CStack() { delete[]m_pDataArray; m_pDataArray = nullptr; }​​ //入栈 void push(T t); //获取栈顶元素 T top(); //出栈 T pop(); //清空栈 void clear() { m_iTop = 0; } int capacity() { return m_iCapacity; } int size() { return m_iTop; } bool empty() { return 0 == m_iTop; } bool full() { return m_iTop == m_iCapacity; }​ //遍历栈元素,打印输出 void traverse(){ for (int i = 0; i < m_iTop; i++) std::cout << m_pDataArray[i] << " ";​ std::cout << std::endl; }};​template
T CStack
::pop(){ if (empty()) throw "empty stack.";​ return m_pDataArray[--m_iTop];}​template
T CStack
::top(){ if (empty()) throw "empty stack.";​ return m_pDataArray[m_iTop - 1];}​template
void CStack
::push(T t){ if (full()) throw "full stack.";​ m_pDataArray[m_iTop] = t; m_iTop++;}

 

main.cpp

#include "CStack.hpp"#include 
using namespace std;int main(int argc, char** argv){ CStack
stack(5); for (int i = 0; i < 5; i++) stack.push(i); cout << "size: " << stack.size() << endl; stack.traverse();​ cout << stack.pop() << endl; stack.traverse();​ stack.clear(); stack.traverse();​ //for (int i = 0; i < 5; i++) // stack.push(i); //stack.push(6);​ system("pause"); return 0;}

 

执行结果:

 

栈的应用可以说有很多,比如编译器中符号匹配的检验、数制转换、汉诺塔问题求解等,可以看出栈这种结构是比较强大而且有趣的。

 

--|END|--


 

 

转载地址:http://neiii.baihongyu.com/

你可能感兴趣的文章
DOM 对象及其元素的层级关系
查看>>
linux-命令-用户
查看>>
node启动项目报错
查看>>
数据库建模开源工具推荐——EZDML
查看>>
idea hybris integration 插件未生效
查看>>
微信测试之本地接口测试-ngrok
查看>>
MySQL DDL
查看>>
IDEA properties文件中文显示异常
查看>>
Maven POM packaging
查看>>
centos docker阿里云镜像配置
查看>>
IDEA 2020 导入maven项目spring等jar找不到
查看>>
vagrant 常用指令手册
查看>>
windows 10 9001端口被占用
查看>>
postman online/web 在线工具
查看>>
vscode 创建vue自定义模板
查看>>
spring cloud gateway CORS配置
查看>>
Java -运算符+引起的NullPointerException
查看>>
spring cloud gateway routes加载顺序的研究
查看>>
MyBatis 大于小于不等于的写法
查看>>
正则表达式具体示例
查看>>