一步一步写算法(之线性堆栈)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
前面我们讲到了队列,今天我们接着讨论另外一种数据结构:堆栈。堆栈几乎是程序设计的命脉,没有堆栈就没有函数调用,当然也就没有软件设计。那么堆栈有什么特殊的属性呢?其实,堆栈的属性主要表现在下面两个方面:
(1)堆栈的数据是先入后出
(2)堆栈的长度取决于栈顶的高度
那么,作为连续内存类型的堆栈应该怎么设计呢?大家可以自己先试一下:
(1)设计堆栈节点
typedef struct _STACK_NODE
{int* pData;int length;int top;
}STACK_NODE;
(2)创建堆栈
STACK_NODE* alloca_stack(int number)
{STACK_NODE* pStackNode = NULL;if(0 == number)return NULL;pStackNode = (STACK_NODE*)malloc(sizeof(STACK_NODE));assert(NULL != pStackNode);memset(pStackNode, 0, sizeof(STACK_NODE));pStackNode->pData = (int*)malloc(sizeof(int) * number);if(NULL == pStackNode->pData){free(pStackNode);return NULL;}memset(pStackNode->pData, 0, sizeof(int) * number);pStackNode-> length = number;pStackNode-> top= 0;return pStackNode;
}
(3)释放堆栈
STATUS free_stack(const STACK_NODE* pStackNode)
{if(NULL == pStackNode)return FALSE;assert(NULL != pStackNode->pData); free(pStackNode->pData);free((void*)pStackNode);return TRUE;
}
(4)堆栈压入数据
STATUS stack_push(STACK_NODE* pStackNode, int value)
{if(NULL == pStackNode)return FALSE;if(pStackNode->length == pStackNode->top)return FALSE;pStackNode->pData[pStackNode->top ++] = value;return TRUE;
}
(5)堆栈弹出数据
STATUS stack_pop(STACK_NODE* pStackNode, int* value)
{if(NULL == pStackNode || NULL == value)return FALSE;if(0 == pStackNode->top)return FALSE;*value = pStackNode->pData[-- pStackNode->top];return TRUE;
}
(6)统计当前堆栈中包含多少数据
int count_stack_number(const STACK_NODE* pStackNode)
{return pStackNode->top;
}
建议: 堆栈是函数调用的基础,是递归调用的基础,是很多问题的根源,建议朋友们平时有时间好好练习一下。
【预告: 下面一篇博客介绍链表的内容】
一步一步写算法(之线性堆栈)相关推荐
- 一步一步写算法(之线性队列)
[ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 这里的线性结构实际上指的就是连续内存的意思,只不过使用"线性"这个词显得比 ...
- 一步一步写算法(之图结构)
原文:一步一步写算法(之图结构) [ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 图是数据结构里面的重要一章.通过图,我们可以判断两个点之间是 ...
- 一步一步写算法(之prim算法 中)
原文:一步一步写算法(之prim算法 中) [ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] C)编写最小生成树,涉及创建.挑选和添加过程 MI ...
- 一步一步写算法(之寻找丢失的数)
一步一步写算法(之寻找丢失的数) 原文:一步一步写算法(之寻找丢失的数) [ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 假设我们有一个1亿个 ...
- 一步一步写算法(之克鲁斯卡尔算法 中)
一步一步写算法(之克鲁斯卡尔算法 中) 原文:一步一步写算法(之克鲁斯卡尔算法 中) [ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 前面说到 ...
- 一步一步写算法(之prim算法 下)
[ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 前两篇博客我们讨论了prim最小生成树的算法,熟悉了基本的流程.基本上来说,我们是按照自上而下 ...
- 一步一步写算法(开篇)
[ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 算法是计算机的生命.没有算法,就没有软件,计算机也就成了一个冰冷的机器,没有什么实用价值.很多 ...
- 编程题C语言写牛牛数星星,一步一步写算法(之“数星星”)
原文: 一步一步写算法(之"数星星") [ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 学过编程的朋友都知道,当初为了学习 ...
- 一步一步写算法(之 算法总结)【转】
转自:http://blog.csdn.net/feixiaoxing/article/details/6993718 版权声明:本文为博主原创文章,未经博主允许不得转载. [ 声明:版权所有,欢迎转 ...
- 一步一步写算法(之 算法总结)
[ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 自10月初编写算法系列的博客以来,陆陆续续以来写了几十篇.按照计划,还有三个部分的内容没有介绍 ...
最新文章
- CentOS6.9 ARM虚拟机扩容系统磁盘
- 如何用 Redis 解决海量重复提交问题
- NET MVC3 中的枚举多语言实现,DescriptionPairAttribute
- advanced installer重新打包教程
- WSAStartup()函数以及DLL的加载
- WPF DatePicker 默认显示当前时间
- Java13-day04【Integer、int和String的相转、自动装箱和拆箱、Date、SimpleDateFormat、Calendar、异常、try...catch、throws】
- java性能调优工具--笔记
- [CTF]思维导向图
- android phone win10下载,微软Your Phone新功能: 可在Win 10 PC 上运行 Android 应用程序...
- javascript - return
- 互联网“最强大脑”齐聚乌镇 他们看到了怎样的未来?
- [HTML] Prettify 代码高亮使用总结
- HTML仿小米官网登陆
- Lwm2m的server分析
- 视频直播系统源码,简单的移动端轮播图
- “诗词吾爱”第38期擂台赛《伤春、惜春》获胜作品欣赏【转载】
- Mongodb之Chunk研究
- 每日一题#10-22 Ransomware
- ubuntu 1204 server xp 硬盘安装