C 基于数组存储的堆栈实现
一、堆栈简介
对于需要管理的队列,主要操作是在序列的末尾插入和取出(删除)元素,有这样操作要求的序列我们称之为堆栈(Stack)。
堆栈可以认为是具有一定约束的线性表,插入和删除都作用在一个称为栈顶(Top)的位置。日常生活中和也可以看到堆栈的例子,例如对厨房中叠放的盘子来说,使用盘子(删除操作)时从顶端拿走盘子,用完放回(插入操作)时也是放到顶端。
通常把数据插入称为压入栈(Push),数据取出(删除)叫做弹出栈(Pop)。正是由于最后入栈的元素最先弹出这一特性,堆栈也被称为后入先出(Last In First Out, LIFO)表。
二、堆栈的抽象数据类型定义及基本操作
typedef struct SNode* PtrToSNode;
struct SNode
{
int* Data;//存放堆栈元素的数组
int Top;//记录栈顶位置
int MaxSize;//记录堆栈长度
};
类型名称:堆栈(Stack)。
数据对象集:一个有0个或多个元素的有穷线性表。
操作集:对于一个具体长度为正整数MaxSize的堆栈S来说,对堆栈中的任一元素X来说,有以下操作:
1、PtrToSNode Create(int max):创建一个最大容量为max的空堆栈
PtrToSNode Create(int max)
{
PtrToSNode s = (PtrToSNode)malloc(sizeof(struct SNode));//开辟堆栈所需要的空间
s->Data = (int*)malloc(max * sizeof(int));//开辟存储堆栈数据的数组所需要的空间
s->Top = -1;//Top记录当前栈顶元素的下标值,置为-1,说明栈为空
s->MaxSize = max;//堆栈的最大容量
return s;
}
2、bool IsFull(PtrToSNode s):判断堆栈是否已满
bool IsFull(PtrToSNode s)
{
return (s->Top == s->MaxSize - 1);
}
3、bool Push(PtrToSNode s, int num):入栈
bool Push(PtrToSNode s, int num)
{
if (! IsFull(s))
{
s->Top++;
s->Data[s->Top] = num;
return true;
}
else
{
printf("栈已满!");
system("pause");
return false;
}
}
4、bool IsEmpty(PtrToSNode s):判断堆栈是否空
bool IsEmpty(PtrToSNode s)
{
return (s->Top == -1);
}
5、int Pop(PtrToSNode s):出栈
int Pop(PtrToSNode s)
{
if (!IsEmpty(s))
{
int num = s->Data[s->Top];
s->Top--;
return num;
}
else
{
printf("堆栈空!");
system("pause");
return -1;
}
}
C 基于数组存储的堆栈实现的更多相关文章
- 教你如何使用Java手写一个基于数组实现的队列
一.概述 队列,又称为伫列(queue),是先进先出(FIFO, First-In-First-Out)的线性表.在具体应用中通常用链表或者数组来实现.队列只允许在后端(称为rear)进行插入操作,在 ...
- 实现基于Memcache存储的Session类
自主实现Session功能的类,基于文件方式存储Session数据,测试基本通过,还比较好玩,实际应用没有意义,只不过是学习Session是如何实现的. 使用基于文件的Session存取瓶颈可能都是在 ...
- java中存储机制堆栈。
一.java的六种存储地址及解释 1) 寄存器(register):这是最快的存储区,因为它位于不同于其他存储区的地方——处理器内部.但是寄存器的数量极其有限,所以寄存器由编译器根据需求进行分配.你不 ...
- 基于数组的shell脚本编写
基于数组的shell脚本编写 2017年08月17日 22:56:36 momokuku123 阅读数:369 数据:变量,文件,数组 变量:存储单个元素的内存中的一块存储空间 数组:存储多个元素的内 ...
- sql server数据库如何存储数组,int[]float[]double[]数组存储到数据库方法
原文地址:https://www.zhaimaojun.top/Note/5475296 将数组存储到数据库的方法 (本人平时同csharp编写代码,所以本文中代码都是csharp代码,有些地方jav ...
- 基于数组或链表的学生信息管理系统(小学期C语言程序实训)
1.基于数组的学生信息管理系统 实验内容: 编写并调试程序,实现学校各专业班级学生信息的管理.定义学生信息的结构体类型,包括:学号.姓名.专业.班级.3门成绩. 实验要求: (1) main函数:以菜 ...
- 基于本地存储的kvm虚拟机在线迁移
基于本地存储的kvm虚拟机在线迁移 kvm虚拟机迁移分为4种(1)热迁移基于共享存储(2)热迁移基于本地存储(3)冷迁移基于共享存储(4)冷迁移基于本地存储 这里介绍的是基于本地存储的热迁移 动态块迁 ...
- 实现基于文件存储的Session类
自主实现Session功能的类,基于文件方式存储Session数据,测试基本通过,还比较好玩,实际应用没有意义,只不过是学习Session是如何实现的. 一般基于文件存储Session数据效率不是很高 ...
- 基于visual Studio2013解决算法导论之023队列实现(基于数组)
题目 基于数组的队列 解决代码及点评 #include <stdio.h> #include <stdlib.h> #include <time.h> #i ...
随机推荐
- IDEA启动maven项目
一.安装IDEA 自行到官网下载,有条件请购买版权 地址:https://www.jetbrains.com/idea/ 二.修改快捷键(如果不是eclipse老用户请忽略这段) 左上角File→Sr ...
- [原创]iFPGA-USB2.0 FT2232H USB & UART开发板使用说明
iFPGA-USB2.0 FT2232H USB & UART 开发板使用说明 基本特性: 沉金工艺: 速度达到30MB/S以上: FT2232H USB2.0免固件开发: FPGA-USB2 ...
- md
> 引用# 一级标题## 二级标题,总共六级标题 - ul + li + li 1. 1232. 456 [链接](http://www.baidu.com)  auth:简单密码认证 持久化 save:将数据同步保存到磁盘 bgsave:将数据异步保存到磁盘 lastsave:返回上次成功将数据 ...
- mac抓包工具anyproxy
本文以 mac为代理,ios手机为客户端举例. 文档地址:http://anyproxy.io/ 1.环境配置: 安装 node :参考 https://www.jianshu.com/p/3 ...
- flink学习
flink介绍: Apache Flink is an open source platform for distributed stream and batch data processing. F ...
- python面试题之Python支持什么数据类型?
所属网站分类: 面试经典 > python 作者:外星人入侵 链接:http://www.pythonheidong.com/blog/article/67/ 来源:python黑洞网,专注py ...
- SQL增删改语句
一,插入数据 1.使用 insert ...values 语句插入单行或多行元组数据 insert into 表名 (列名,列名,...,列名) values 值 表名:指被插入数据的表名 列名: ...
- CentOS7完成mysql的安装和远程访问
详见链接https://blog.csdn.net/weixin_42266606/article/details/80879571 (此处我的本地用户名root,密码root:远程用户名root,密 ...
- AAC编码学习
AAC音频编码 https://www.jianshu.com/p/af0165f923e9 https://blog.csdn.net/u013427969/article/details/5309 ...