一.静态数组实现

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语言描述栈的实现及操作(数组实现)相关推荐

  1. python中栈的描述是_数据结构与算法:Python语言描述 栈和队列.ppt

    数据结构与算法:Python语言描述 栈和队列 迷宫问题 迷宫问题的特点: 存在一集可能位置,一些位置相互连通,一步可达 一个位置可能连通若干位置,出现向前探查的多种可能(有分支) 目标是找到一条路径 ...

  2. c语言中初始化的主要作用,C语言初始化——栈的初始化

    栈是一种具有后进先出性质的数据组织方式,也就是说后存放的先取出,先存放的后取出.栈底是第一个进栈的数据所处的位置,栈顶是最后一个进栈的数据所处的位置. 1.满栈与空栈 根据SP指针指向的位置,栈可以分 ...

  3. 花式模拟【栈结构】做“日志分析”(洛谷P1165题题解,Java语言描述)

    题目要求 P1165题目链接 分析 标准的栈结构,但使用数组来模拟会更简单. 因为对于这个问题,其实数组不需要存储真实数值,只考虑当前最大值就行了. 毕竟,出栈也不需要返回当前真实值. 另外,我们只使 ...

  4. 基于栈的后缀表达式求值(洛谷P1449题题解,Java语言描述)

    题目要求 P1449题目链接 分析 给出后缀表达式求值,就相当于没了括号,而且很直接. 我们需要使用栈结构来完成任务. Java原装的栈使用了很多synchronized,导致性能不佳,但我们也就将就 ...

  5. [Catalan]求解随机出栈可能数(洛谷P1044题题解,Java语言描述)

    题目要求 P1044题目链接 分析 题意就是:N个数依次进栈,可随机出栈,算一下可能的出栈序列数. 其实这个就是Catalan啊,如果数据结构与算法有一定的刷题积累的学生应该经常做这样的About栈的 ...

  6. c语言栈的实现以及操作_C++语言实现顺序栈

    在写C语言实现顺序栈的时候,我已经向大家介绍了栈的特点以及介绍了栈的相关操作,并利用C语言实现了相关算法.在这里小编就不在继续给大家介绍了,需要温习的可以看看之前的文章,下面是链接C语言实现顺序栈在这 ...

  7. 刁肥宅手笔:纯C语言实现栈的相关操作

    有一种爱不解释--我爱C语言! /*Name:纯C语言实现栈的相关操作Copyright:欢迎共享此代码Author:刁肥宅Date: 04/08/18 21:55Description:调试过程出行 ...

  8. 大学python用什么教材-数据结构 Python语言描述 大学教材

    书名:数据结构:Python语言描述 定价:69.8 ISBN:9787115485779 作者:张光河 版次:第1版 出版时间:2018-07 内容提要: Python是目前流行的程序设计语言,国内 ...

  9. C 语言 函数调用栈

    From:https://www.cnblogs.com/clover-toeic/p/3755401.html    https://www.cnblogs.com/clover-toeic/p/3 ...

最新文章

  1. 为什么数据库连接池不采用 IO 多路复用?
  2. python工程师薪资-Python工程师工资多少
  3. Javascript高级程序设计——基本类型和引用类型的值
  4. stk软件支持Linux,STK组件基础篇:开发入门
  5. ML之LassoRRidgeR:基于datasets糖尿病数据集利用LassoR和RidgeR算法(alpha调参)进行(9→1)回归预测
  6. python3.6 websocket异步高并发_在Python3.6上的websocket客户端中侦听传入消息时出现问题...
  7. 一键刷入twrp_小米/红米手机到手了该怎么解锁和刷 twrp
  8. STL学习笔记-multimap的基本使用
  9. javascript 通过地址获取经纬度 get lat long from address
  10. Oracle发布Oracle数据库的官方Node.js驱动node-oracledb
  11. Oracle的SQL基础之查询(简单查询)
  12. netbeans 添加gif图片_告别PC 用手机完成各种GIF动画编辑
  13. pig0.15+hadoop2.x安装 (注意版本匹配)
  14. OTT网络电视直播APP运营平台-如何保证视频的流畅性
  15. Vue + ElementUI el-input无法输入、修改、删除的问题
  16. sqlite3 dbconfig说明
  17. Mac上使用微信读书(微信读书网页版)
  18. AcWing 导弹防御系统 Python代码
  19. 中移物联网联合上研院推出快速定位服务,助力智慧物联网发展
  20. 雨听 | 英语学习笔记(六)~作文范文:公务员考试的热潮

热门文章

  1. C#中Invoke 和 BeginInvoke 的区别
  2. 每天进步一点点《ML - K-means》
  3. 设置随机种子之后,网络训练结果仍然不同的解决方法(针对随机采样的数据集)torch设置随机种子,num_worker对数据采样的影响。
  4. 《Effective Approaches to Attention-based Neural Machine Translation》—— 基于注意力机制的有效神经机器翻译方法
  5. sqoop将mysql数据导入到hive指定的数据库中
  6. Photoshop CS6将多张图片合成GIF动态图或视频,并将其保存导出
  7. H.264整数DCT公式推导及蝶形算法分析
  8. Spring线程池开发实战
  9. ZZULIOJ21级新生周赛(1)——命题人:朱会东老师——2822: 探姬粉丝众多
  10. python axes_python matplotlib中axes与axis的区别?