一.静态数组实现

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. mongodb去除重复的数据

    里边的内容在某些情况下不可行,可以参考下一篇. 今天出现了一个新的需求,有个部门需要拿到mongodb中的数据,要求去掉其中一个字段内容相同的数据. 虽然mongodb中有distinct来去重,但是 ...

  2. 进程中调用CreateMutex

    // TestStorage.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <Windows.h> #inc ...

  3. mongodb一些使用技巧或注意事项记录

    1.有的时候需要删除指定字段那一列,使用update操作.例如要删除name这一列: query  json: {"name":{$exists:true}} update jso ...

  4. 一个URL的组成

    URL的组成 URL由三部分组成:协议类型,主机名和路径及文件名.通过URL可以指定的主要有以下几种:http.ftp.gopher.telnet.file等.   URL的组成 URL的组成 协议 ...

  5. PHPmysqli的 预处理执行查询语句

    header( 'Content-Type:text/html;charset=utf-8 '); require 'prepareSrarment.php'; $mysqli=new mysqli( ...

  6. R语言自动化报告格式——knitr

    R语言自动化报告格式--knitr 相关文献: R语言自动化报告格式--knitr 资讯 | R Notebooks 即将发布 ------------------------------------ ...

  7. hi3531 SDK已编译文件系统制作jffs2文件系统镜像并解决问题 .

    一, 安装SDK 1.Hi3531 SDK包位置 在"Hi3531_V100R001***/01.software/board"目录下,您可以看到一个 Hi3531_SDK_Vx. ...

  8. Error Code: 1630. FUNCTION rand.string does not exist

    1.错误描述 13:50:13 call new_procedure Error Code: 1630. FUNCTION rand.string does not exist. Check the ...

  9. INS-30011 输入的ADMIN口令不符合Oracle建议的标准

    1.错误描述 2.错误原因 由于在设置密码时,首个字符为数字,导致出错 a.必须以字母开头 b.长度不超过30个字符 c.只能包含字母.数字和_.$.# d.不能使用关键字和保留字 3.解决办法 重新 ...

  10. 手机端仿ios的省市县3级联动脚本一

    一,图片实例 二,代码 2.1,代码 $('#provinceCity_fu').click(function(){ var $this = $(this); new Picker({ "t ...