C语言描述栈的实现及操作(数组实现)
一.静态数组实现
1.堆栈接口
// 一个堆栈模块接口 // 命名为stack.h#define STACK_YTPE int // 堆栈所存储值的类型// push函数 // 把一个新值压入栈中 void push(STACK_YTPE value);// pop函数 // 从堆栈中弹出一个值 STACK_YTPE pop(void); // top函数 // 返回堆栈顶部元素的值 STACK_YTPE top(void);// is_empty函数 // 如果堆栈为空,返回TRUE,否则返回FALSE bool is_empty(void);// is_full函数 // 如果堆栈已满,返回TRUE,否则返回FALSE bool is_full(void);
2.静态数组堆栈
#include<stdio.h> #include<assert.h> #include"stack.h"#define STACK_SIZE 100 // 堆栈中值数量的最大限制static STACK_TYPE stack[STACK_SIZE]; // 存储堆栈中值得数组 static int top_element = -1; // 指向顶部元素的指针void push(STACK_TYPE value){assert(!is_full());top_element += 1;stack[top_element] = value; }STACK_TYPE pop(void){assert(!is_empty());return stack[top_element--]; }STACK_TYPE top(void){assert(!is_empty());return stack[top_element]; }bool is_empty(void){return top_element == -1; }bool is_full(void){return top_element == STACK_SIZE-1; }
二.动态数组实现
1.堆栈接口
只需要最原来的stack.h接口基础上加上添加以下两个定义即可。
// creat_stack函数 // 创建堆栈。参数指定可以保存多少元素 void creat_stack(size_t size);// destroy_stack函数 // 销毁堆栈。释放堆栈所使用的内存 void destroy_stack(void);
2.动态数组堆栈
// 一个动态分配数组实现的堆栈 #include<stdio.h> #include<assert.h> #include<stdlib.h> #include<malloc.h> #include"stack.h"// 用于存储堆栈元素的数组和指向堆栈顶部元素的指针 static STACK_TYPE *stack; static size_t stack_size; static int top_element = -1;//creat_stack void creat_stack(size_t size){assert(stack_size == 0);stack_size = size;stack = malloc(stack_size*sizeof(STACK_TYPE));assert(stack != NULL); }//destroy_stack void destroy_stack(void){assert(stack_size>0);stack_size = 0;free(stack);stack = NULL; }void push(STACK_TYPE value){assert(!is_full());top_element += 1;stack[top_element] = value; }STACK_TYPE pop(void){assert(!is_empty());return stack[top_element--]; }STACK_TYPE top(void){assert(!is_empty());return stack[top_element]; }bool is_empty(void){return top_element == -1; }bool is_full(void){return top_element == stack_size-1; }
参考文献
《C和指针》
转载于:https://www.cnblogs.com/maluning/p/8196388.html
C语言描述栈的实现及操作(数组实现)相关推荐
- python中栈的描述是_数据结构与算法:Python语言描述 栈和队列.ppt
数据结构与算法:Python语言描述 栈和队列 迷宫问题 迷宫问题的特点: 存在一集可能位置,一些位置相互连通,一步可达 一个位置可能连通若干位置,出现向前探查的多种可能(有分支) 目标是找到一条路径 ...
- c语言中初始化的主要作用,C语言初始化——栈的初始化
栈是一种具有后进先出性质的数据组织方式,也就是说后存放的先取出,先存放的后取出.栈底是第一个进栈的数据所处的位置,栈顶是最后一个进栈的数据所处的位置. 1.满栈与空栈 根据SP指针指向的位置,栈可以分 ...
- 花式模拟【栈结构】做“日志分析”(洛谷P1165题题解,Java语言描述)
题目要求 P1165题目链接 分析 标准的栈结构,但使用数组来模拟会更简单. 因为对于这个问题,其实数组不需要存储真实数值,只考虑当前最大值就行了. 毕竟,出栈也不需要返回当前真实值. 另外,我们只使 ...
- 基于栈的后缀表达式求值(洛谷P1449题题解,Java语言描述)
题目要求 P1449题目链接 分析 给出后缀表达式求值,就相当于没了括号,而且很直接. 我们需要使用栈结构来完成任务. Java原装的栈使用了很多synchronized,导致性能不佳,但我们也就将就 ...
- [Catalan]求解随机出栈可能数(洛谷P1044题题解,Java语言描述)
题目要求 P1044题目链接 分析 题意就是:N个数依次进栈,可随机出栈,算一下可能的出栈序列数. 其实这个就是Catalan啊,如果数据结构与算法有一定的刷题积累的学生应该经常做这样的About栈的 ...
- c语言栈的实现以及操作_C++语言实现顺序栈
在写C语言实现顺序栈的时候,我已经向大家介绍了栈的特点以及介绍了栈的相关操作,并利用C语言实现了相关算法.在这里小编就不在继续给大家介绍了,需要温习的可以看看之前的文章,下面是链接C语言实现顺序栈在这 ...
- 刁肥宅手笔:纯C语言实现栈的相关操作
有一种爱不解释--我爱C语言! /*Name:纯C语言实现栈的相关操作Copyright:欢迎共享此代码Author:刁肥宅Date: 04/08/18 21:55Description:调试过程出行 ...
- 大学python用什么教材-数据结构 Python语言描述 大学教材
书名:数据结构:Python语言描述 定价:69.8 ISBN:9787115485779 作者:张光河 版次:第1版 出版时间:2018-07 内容提要: Python是目前流行的程序设计语言,国内 ...
- C 语言 函数调用栈
From:https://www.cnblogs.com/clover-toeic/p/3755401.html https://www.cnblogs.com/clover-toeic/p/3 ...
最新文章
- 为什么数据库连接池不采用 IO 多路复用?
- python工程师薪资-Python工程师工资多少
- Javascript高级程序设计——基本类型和引用类型的值
- stk软件支持Linux,STK组件基础篇:开发入门
- ML之LassoRRidgeR:基于datasets糖尿病数据集利用LassoR和RidgeR算法(alpha调参)进行(9→1)回归预测
- python3.6 websocket异步高并发_在Python3.6上的websocket客户端中侦听传入消息时出现问题...
- 一键刷入twrp_小米/红米手机到手了该怎么解锁和刷 twrp
- STL学习笔记-multimap的基本使用
- javascript 通过地址获取经纬度 get lat long from address
- Oracle发布Oracle数据库的官方Node.js驱动node-oracledb
- Oracle的SQL基础之查询(简单查询)
- netbeans 添加gif图片_告别PC 用手机完成各种GIF动画编辑
- pig0.15+hadoop2.x安装 (注意版本匹配)
- OTT网络电视直播APP运营平台-如何保证视频的流畅性
- Vue + ElementUI el-input无法输入、修改、删除的问题
- sqlite3 dbconfig说明
- Mac上使用微信读书(微信读书网页版)
- AcWing 导弹防御系统 Python代码
- 中移物联网联合上研院推出快速定位服务,助力智慧物联网发展
- 雨听 | 英语学习笔记(六)~作文范文:公务员考试的热潮
热门文章
- C#中Invoke 和 BeginInvoke 的区别
- 每天进步一点点《ML - K-means》
- 设置随机种子之后,网络训练结果仍然不同的解决方法(针对随机采样的数据集)torch设置随机种子,num_worker对数据采样的影响。
- 《Effective Approaches to Attention-based Neural Machine Translation》—— 基于注意力机制的有效神经机器翻译方法
- sqoop将mysql数据导入到hive指定的数据库中
- Photoshop CS6将多张图片合成GIF动态图或视频,并将其保存导出
- H.264整数DCT公式推导及蝶形算法分析
- Spring线程池开发实战
- ZZULIOJ21级新生周赛(1)——命题人:朱会东老师——2822: 探姬粉丝众多
- python axes_python matplotlib中axes与axis的区别?