一.静态数组实现

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. linux shell中获取mongodb最大连接数、内存使用情况等

    前两天接到了一个新的需求,需要在linux shell脚本中监控到mongodb最大连接数.内存使用情况等. 但是我对于linux shel很不了解,只是会一些简单常用的linux的操作而已,只要一顿 ...

  2. UBOOT添加命令的执行流程

    BootLoader(引导装载程序)是嵌入式系统软件开发的第一个环节,它把操作系统和硬件平台衔接在一起,对于嵌入式系统的后续软件开发十分重要,在整个开发中也占有相当大的比例.U-BOOT是当前比较流行 ...

  3. FusionCharts 2D柱状图和折线图的组合图调试错误

    在设计FusionCharts 2D柱状图和折线图的组合图的时候,我发现不管怎么重启服务器,组合图就是不出来.后来,我通过调试发现我犯了一个致命的错误,运用平常一贯的思维,认为3D图有这种类型,那么2 ...

  4. Vxworks 6.6系列下载地址

    Vxworks 6.6系列下载地址: ---------------------------------- ftp://ftp.windriver.speedera.net/ftp.windriver ...

  5. ip2long的用法

    ip2long:将IPv4的ip地址(以小数点分隔形式)转换为int Description int ip2long ( string ip_address ) 如果ip地址非法,返回FALSE(PH ...

  6. Java Web项目部署Tomcat运行出错

    1.在部署Java Web项目的过程中,启动Tomcat出现报错提示 具体报错如下: Could not load the Tomcat server configuration at \Server ...

  7. Procedure execution failed 2013 - Lost connection to MySQL server during query

    1 错误描述 Procedure execution failed 2013 - Lost connection to MySQL server during query 2 错误原因 由错误描述可知 ...

  8. Linux显示各栏位的标题信息列

    Linux显示各栏位的标题信息列 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ who -H 名称 线路 时间 备注 youhaidong :0 2015-0 ...

  9. 序列化Json格式

    Json = JsonUtil.Serialize(new { code = 1, msg = "文件删除成功" }); public class JsonUtil     {   ...

  10. jquery Dialog弹框插件使用

    var dialog = new Dialog({ title: '购物车', type: 'url', width: 520, content: "Uplolo.aspx", s ...