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. 概述 基本概念及术语 数据 信息的载体,是 ...
随机推荐
- Duplicate entry '97112' for key 1
1.错误描述 2014-07-08 10:27:13,939 ERROR(com.you.conn.JDBCConnection:104) -com.mysql.jdbc.exceptions.jdb ...
- (五)java运算
java在运算的时候,会存在数据类型的转换,其中一种是自动类型转换,也称为隐式类型转换,这种转换需要满足一定的条件: 1.这两种类型是兼容的,例如同时都是整数类型或者都是数字类型 2. ...
- R语言-动画
使用动画可以使得图形更形象,更能反映数据的变化 1.安装环境gganimate if(!require(devtools)) install.packages("devtools" ...
- python 生成器和迭代器有这篇就够了
本节主要记录一下列表生成式,生成器和迭代器的知识点 列表生成器 首先举个例子 现在有个需求,看列表 [0,1,2,3,4,5,6,7,8,9],要求你把列表里面的每个值加1,你怎么实现呢? 方法一(简 ...
- SharedPreferences实现保存用户名功能
1. 简介 SharedPreferences是一种轻型的数据存储方式,通过key-value键值对的方式将数据存储在xml文件中,常用于存储简单的配置信息. 2. 使用方式 2.1 获取Shar ...
- github上的文件比对
Skip to content This repository Pull requests Issues Marketplace Explor ...
- [UVA 10529]Dumb Bones
题面在这里 题意 放\(n\)个相连的骨牌,每次放的时候有\(pl\)的概率往左倒,有\(pr\)的概率往右倒,骨牌倒的时候可能会打翻左边相邻或者右边相邻的骨牌,并引起连锁反应直到最后一个骨牌旁边没有 ...
- python操作excel常用的方法
读操作模块安装 pip install xlrd 写操作模块安装 pip install xlwt xlrd读操作 1.打开excel xl = xlrd.open_workbook('test.xl ...
- VMware下安装centos7及网络配置
之前遇到过用虚拟机安装上centos7上不了网,昨天解决了,但是手抽删错了,把centos7误删了,今天就一起安装下. 首先打开VMware,我这里用的版本是VMware12,然后我们新建虚拟机 下一 ...
- PHP+MySQL分页原理实现
功能简介:包含上一页.下一页.首页.尾页.跳转页面等功能. 编码寄语:化繁为简,则豁然开朗. 运行截图: 关键步骤: 创建数据库 CREATE TABLE `page` ( `ID` ) NOT NU ...