数据结构【动态栈】代码实现
时间:2022-07-22
本文章向大家介绍数据结构【动态栈】代码实现,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
栈存入数据,就像把东西往箱子里面放一样,先放进去的最后取出来。 如下图所示:
一个栈需要两个指针标识栈顶与栈底,栈顶以TOP标识,栈底以BOTTOM来标识。 栈底指针永远指向栈底元素。
代码实现:
typedef struct Node
{
int nData;
Node * pNext;
} * PNODE;
typedef struct Stack
{
PNODE pTop;
PNODE pBtm;
} *PSTACK;
void initStack(PSTACK pStack);
void push_Stack(PSTACK pStack, int nValue);
bool isEmpty_Stack(const PSTACK pStack);
void show_Stack(const PSTACK pStack);
void pop_Stack(PSTACK pStack);
int main()
{
Stack oStack;
initStack(&oStack);
push_Stack(&oStack, 1);
push_Stack(&oStack, 2);
push_Stack(&oStack, 3);
push_Stack(&oStack, 4);
push_Stack(&oStack, 5);
pop_Stack(&oStack);
pop_Stack(&oStack);
pop_Stack(&oStack);
show_Stack(&oStack);
}
void initStack(PSTACK pStack)
{
pStack->pBtm = (PNODE)malloc(sizeof(Node));
if (nullptr == pStack->pBtm)
{
std::cout << "内存申请失败!";
exit(-1);
}
pStack->pBtm->pNext = nullptr;
pStack->pTop = (PNODE)malloc(sizeof(Node));
if (nullptr == pStack->pTop)
{
std::cout << "内存申请失败!";
exit(-1);
}
pStack->pTop->pNext = pStack->pBtm;
}
void push_Stack(PSTACK pStack, int nValue)
{
//创建一个新节点
PNODE pNewNode = (PNODE)malloc(sizeof(Node));
if (nullptr == pNewNode)
{
std::cout << "内存申请失败!";
exit(-1);
}
pNewNode->nData = nValue;
PNODE pTempNode = pStack->pTop->pNext;
pNewNode->pNext = pTempNode;
pStack->pTop->pNext = pNewNode;
}
bool isEmpty_Stack(const PSTACK pStack)
{
if (pStack->pTop->pNext == pStack->pBtm)
{
return true;
}
return false;
}
void show_Stack(const PSTACK pStack)
{
if (isEmpty_Stack(pStack))
{
return;
}
PNODE pNode = pStack->pTop->pNext;
while (pNode != pStack->pBtm)
{
std::cout << pNode->nData << "t";
pNode = pNode->pNext;
}
}
void pop_Stack(PSTACK pStack)
{
if (isEmpty_Stack(pStack))
{
return;
}
PNODE pTempNode = pStack->pTop->pNext;
pStack->pTop->pNext = pTempNode->pNext;
std::cout << "删除的元素为:" << pTempNode->nData << "n";
free(pTempNode);
}
- 动态创建MySQL Group Replication的节点(r11笔记第84天)
- sysbench压测小记(r11笔记第99天)
- WordPress启用memcached动态缓存以及报错解决
- 升级CentOS6.5内核,开启Nginx的fastopen和reuseport特性
- Nginx网站使用CDN之后禁止用户真实IP访问的方法
- 相差数十倍的SQL性能分析(r11笔记第98天)
- shell脚本实现整站缓存和预缓存,进一步提升网站整体加载速度
- Oracle中的PGA监控报警分析(r11笔记第96天)
- MySQL错误修复记录:Table xx is marked as crashed and should be repaired
- WordPress百度自动推送JS优化,规避错误、重复推送问题
- Oracle 12c中DBCA搭建备库体验(r11笔记第92天)
- 一行代码彻底禁用WordPress缩略图自动裁剪功能
- MySQL中xtrabackup备份恢复全攻略(r12笔记第11天)
- 分享一次Linux任务计划crontab不执行的问题排查过程
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 聊聊dubbo-go的nacosRegistry
- Java离Linux内核有多远?
- 关于懒汉模式和恶汉模式的区别
- Chrome 新功能 — CSS Overview 尝鲜
- 0门槛,轻松实现条形竞赛图动画
- 读懂数据库中的乐观锁和悲观锁和MVCC
- CentOS 7.x安装微服务网关Apache APISIX
- Sentinel规则Pull模式持久化
- 如何用Cloudbase Framework部署一个Vue项目?
- 第17问:如何评估 alter table 的进度?
- 【LeeCode 困难 python3】329. 矩阵中的最长递增路径
- 干!一张图整理了 Python 所有内置异常
- 面试官问:孤儿进程和僵尸进程,你造吗~
- 最全Vue开发环境搭建
- apicloud api.openwin