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 = -; // 指向顶部元素的指针 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语言描述栈的实现及操作(数组实现)的更多相关文章
- C语言描述栈的实现及操作(链表实现)
#include<stdio.h> #include<malloc.h> #include<stdlib.h> typedef int Elementtype; / ...
- C语言描述二叉树的实现及操作(链表实现)
概述 二叉树为每个节点最多有两个儿子节点(左儿子节点和右儿子节点)的树. 前序遍历:根结点 ---> 左子树 ---> 右子树. 中序遍历:左子树---> 根结点 ---&g ...
- C语言描述队列的实现及操作(链表实现)
// 队列的单链表实现 // 头节点:哨兵作用,不存放数据,用来初始化队列时使队头队尾指向的地方 // 首节点:头节点后第一个节点,存放数据 #include<stdio.h> #incl ...
- C语言描述链表的实现及操作
一.链表的创建操作 // 操作系统 win 8.1 // 编译环境 Visual Stuido 2017 #include<stdio.h> #include<malloc.h> ...
- C语言描述队列的实现及操作(数组实现)
一.静态数组实现 1.队列接口 #include<stdio.h> // 一个队列模块接口 // 命名为myqueue.h #define QUEUE_TYPE int // 定义队列类型 ...
- 【数据结构】之栈(C语言描述)
栈(Stack)是编程中最常用的数据结构之一. 栈的特点是“后进先出”,就像堆积木一样,堆的时候要一块一块堆到最上面,拆的时候需要从最上面一块一块往下拆.栈的原理也一样,只不过它的操作不叫堆和拆,而是 ...
- 利用栈实现算术表达式求值(Java语言描述)
利用栈实现算术表达式求值(Java语言描述) 算术表达式求值是栈的典型应用,自己写栈,实现Java栈算术表达式求值,涉及栈,编译原理方面的知识.声明:部分代码参考自茫茫大海的专栏. 链栈的实现: pa ...
- 【数据结构】之栈(Java语言描述)
在前面的[这篇文章]中,我简单介绍了栈这种数据结构的操作功能,并使用C语言对其进行了代码的编写. Java的JDK中默认为我们提供了栈这种数据结构的API—— Stack . Java中的Stack类 ...
- 数据结构(java语言描述)
概念性描述与<数据结构实例教程>大同小异,具体参考:http://www.cnblogs.com/bookwed/p/6763300.html. 概述 基本概念及术语 数据 信息的载体,是 ...
随机推荐
- JAVA之编码---->CSV在文本下是正常的,用EXCEL打开是乱码的问题
JAVA之编码---->CSV在文本下是正常的,用EXCEL打开是乱码的问题 在JAVA下输出文件流,保存成CSV(用UTF-8)文件,怎么处理用EXCEL下是乱码,但是在记事本等其他软件都是正 ...
- windows共享虚拟机ubuntu目录
1)安装 sudo apt-get install samba 2)配置文件vi /etc/samba/smb.conf 添加如下 3)启动服务 sudo service smbd start 4)w ...
- 获取MySql每一列的数据类型和长度默认值等信息
如何获取MySql表中各个列的数据类型? show columns from tablename 返回结果如下: id int(11) NO PRI auto_incr ...
- setBit testBit权限管理(shiro项目中来的二)
一,setBit testBit权限管理的理解 1.1.jdk7文档解释 public boolean testBit(int n)Returns true if and only if the de ...
- javaScript替换元素节点
<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...
- 【BZOJ2330】【SDOI2012】糖果(差分约束,SPFA)
[BZOJ2330][SDOI2012]糖果 题面 题目描述 幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果.但是小朋友们也有嫉妒心,总是会提出一些要 ...
- [BZOJ1926][SDOI2010]粟粟的书架
BZOJ Luogu Description 幸福幼儿园 B29 班的粟粟是一个聪明机灵.乖巧可爱的小朋友,她的爱好是画画和读书,尤其喜欢 Thomas H. Cormen 的文章.粟粟家中有一个 R ...
- LightOJ1245 Harmonic Number (II)
题意 \(求\Sigma \lfloor \frac{n}{i} \rfloor\) Input starts with an integer T (≤ 1000), denoting the num ...
- sqoop2报错
sqoop:000> create link --cid 4 Creating link for connector with id 4Exception has occurred during ...
- nginx学习之rewrite
rewrite 语法学习 什么是rewrite nginx的rewrite主要功是实现URL地址重写.nginx的rewrite规则需要PCRE的支持,既可以通过Perl兼容正则表达式进行规则匹配.n ...