一.静态数组实现

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 = -; // 指向顶部元素的指针 void push(STACK_TYPE value){
assert(!is_full());
top_element += ;
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 == -;
} bool is_full(void){
return top_element == STACK_SIZE-;
}

  

二.动态数组实现

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 = -; //creat_stack
void creat_stack(size_t size){
assert(stack_size == );
stack_size = size;
stack = malloc(stack_size*sizeof(STACK_TYPE));
assert(stack != NULL);
} //destroy_stack
void destroy_stack(void){
assert(stack_size>);
stack_size = ;
free(stack);
stack = NULL;
} void push(STACK_TYPE value){
assert(!is_full());
top_element += ;
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 == -;
} bool is_full(void){
return top_element == stack_size-;
}

参考文献

《C和指针》

C语言描述栈的实现及操作(数组实现)的更多相关文章

  1. C语言描述栈的实现及操作(链表实现)

    #include<stdio.h> #include<malloc.h> #include<stdlib.h> typedef int Elementtype; / ...

  2. C语言描述二叉树的实现及操作(链表实现)

    概述     二叉树为每个节点最多有两个儿子节点(左儿子节点和右儿子节点)的树. 前序遍历:根结点 ---> 左子树 ---> 右子树. 中序遍历:左子树---> 根结点 ---&g ...

  3. C语言描述队列的实现及操作(链表实现)

    // 队列的单链表实现 // 头节点:哨兵作用,不存放数据,用来初始化队列时使队头队尾指向的地方 // 首节点:头节点后第一个节点,存放数据 #include<stdio.h> #incl ...

  4. C语言描述链表的实现及操作

    一.链表的创建操作 // 操作系统 win 8.1 // 编译环境 Visual Stuido 2017 #include<stdio.h> #include<malloc.h> ...

  5. C语言描述队列的实现及操作(数组实现)

    一.静态数组实现 1.队列接口 #include<stdio.h> // 一个队列模块接口 // 命名为myqueue.h #define QUEUE_TYPE int // 定义队列类型 ...

  6. 【数据结构】之栈(C语言描述)

    栈(Stack)是编程中最常用的数据结构之一. 栈的特点是“后进先出”,就像堆积木一样,堆的时候要一块一块堆到最上面,拆的时候需要从最上面一块一块往下拆.栈的原理也一样,只不过它的操作不叫堆和拆,而是 ...

  7. 利用栈实现算术表达式求值(Java语言描述)

    利用栈实现算术表达式求值(Java语言描述) 算术表达式求值是栈的典型应用,自己写栈,实现Java栈算术表达式求值,涉及栈,编译原理方面的知识.声明:部分代码参考自茫茫大海的专栏. 链栈的实现: pa ...

  8. 【数据结构】之栈(Java语言描述)

    在前面的[这篇文章]中,我简单介绍了栈这种数据结构的操作功能,并使用C语言对其进行了代码的编写. Java的JDK中默认为我们提供了栈这种数据结构的API—— Stack . Java中的Stack类 ...

  9. 数据结构(java语言描述)

    概念性描述与<数据结构实例教程>大同小异,具体参考:http://www.cnblogs.com/bookwed/p/6763300.html. 概述 基本概念及术语 数据 信息的载体,是 ...

随机推荐

  1. 图像处理------透明混合 - Alpha Blending效果

    基本原理: 图像的透明混合有个专属名词– Alpha Blending 对任意两张图像可以合成为一张图像,合成图像的像素取值根据数学公式: RGB3 = (1- a) * RGB1 + a * RGB ...

  2. Jqurey 得到url参数 getUrlParam

    Jqurey 得到url参数 getUrlParam <script type="text/javascript"> (function ($) { //扩展方法获取u ...

  3. 芝麻HTTP:记scikit-learn贝叶斯文本分类的坑

    基本步骤: 1.训练素材分类: 我是参考官方的目录结构: 每个目录中放对应的文本,一个txt文件一篇对应的文章:就像下面这样 需要注意的是所有素材比例请保持在相同的比例(根据训练结果酌情调整.不可比例 ...

  4. Unity3d开发中与oc交互之类型转换

    对于非科班出身的程序来说,在没有学过C和OC的情况,用unity开发iOS相关的功能,是非常痛苦的.简单写一下自己遇到的,并且没有百度到的坑. 1.C#给OC传递字典 一般流程是,C#调用C,C调用O ...

  5. MyEclipse 2014专业版的破解--Windows系统的软件安装

    一.破解前的准备 MyEclipse2014破解包: 您可以到计算机相关专业所用软件---百度云链接下载中找到链接地址进行下载. 二.破解步骤 1.打开破解文件资源包 2.执行run.bat 3.输入 ...

  6. FFT\NTT总结

    学了好久,终于基本弄明白了 推荐两个博客: 戳我 戳我 再推荐几本书: <ACM/ICPC算法基础训练教程> <组合数学>(清华大学出版社) <高中数学选修> 预备 ...

  7. 【BZOJ4872】分手是祝愿(动态规划,数学期望)

    [BZOJ4872]分手是祝愿(动态规划,数学期望) 题面 BZOJ 题解 对于一个状态,如何求解当前的最短步数? 从大到小枚举,每次把最大的没有关掉的灯关掉 暴力枚举因数关就好 假设我们知道了当前至 ...

  8. [HNOI2014]米特运输

    显然知道一个节点就可以推出整棵树 然而直接乘会爆longlong 所以考虑取log 最后排序算众数即可 # include <stdio.h> # include <stdlib.h ...

  9. [BZOJ2743] [HEOI2012] 采花 (树状数组)

    Description 萧芸斓是Z国的公主,平时的一大爱好是采花. 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花.花园足够大,容纳了n朵花,花有c种颜色(用整数1-c表示),且花是排成一 ...

  10. mongo分布式集群搭建手记

    一.架构简介 目标 单机搭建mongodb分布式集群(副本集 + 分片集群),演示mongodb分布式集群的安装部署.简单操作. 说明 在同一个vm启动由两个分片组成的分布式集群,每个分片都是一个PS ...