栈(LIFO)的存储
栈:后进先出。(LIFO结构)
栈是限定仅在表尾进行插入和删除操作的线性表。允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom),不含任何数据元素的栈称为空栈。
功能:用于浏览器的后退操作,以及word等软件的撤销操作。
两栈共享空间,用一个数组来存储两个栈。
/*两栈共享空间结构*/
typedef struct
{SElemType data[MAXSIZE];int top1; /*栈1栈顶指针*/int top2; /*栈2栈顶指针*/
}SqDoubleStack;
对于两栈共享空间的Push方法,除了要插入元素值参数外,还需要有一个判断是栈1还是栈2的栈号参数 stackNumber:
/*插入元素e为新的栈顶元素*/
Status Push(SqDoubleStack *S,SElemType e,int stackNumber)
{if(S->top1+1==S->top2) /*栈已满,不能再push新元素了*/return ERROR; if(stackNumber==1) /*栈1有元素进栈*/S->data[++S->top1]=e; /*若栈1则先top1+1后给数组元素赋值*/else if(stackNumber==2) /*栈2有元素进栈*/S->data[--S->top2]=e; /*若栈2则先top2-1后给元素赋值*/return OK;
}
因为在开始已经判断了是否有栈满的情况,所以后面的top1+1或top2-1是不担心溢出问题的。对于两栈共享空间的Pop方法,参数就只是判断栈1 栈2的参数stackNumber:
/*若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR*/
Status Pop(SqDoubleStack *S,SElemType *e,int stackNumber)
{if(stackNumber==1){if(S->top1==1)return ERROR; /*说明栈1已经是空栈,溢出*/*e=S->data[S->top1--]; /*将栈1的栈顶元素出栈*/}else if(stackNumber==2){if(S->top2==MAXSIZE)return ERROR; /*说明栈2已经是空栈,溢出*/*e=S->data[S->top2++]; /*将栈2的栈顶元素出栈}return OK;
}
栈(LIFO)的存储相关推荐
- 【C 语言】内存管理 ( 动态内存分配 | 栈 | 堆 | 静态存储区 | 内存布局 | 野指针 )
相关文章链接 : 1.[嵌入式开发]C语言 指针数组 多维数组 2.[嵌入式开发]C语言 命令行参数 函数指针 gdb调试 3.[嵌入式开发]C语言 结构体相关 的 函数 指针 数组 4.[嵌入式开发 ...
- 内存区划分、内存分配、常量存储区、堆、栈、自由存储区、全局区[C++][内存管理]...
这可以帮助你深入了解程序的运行机制,由于自己还是一个初学者,因此大部分内容都只是转载. http://blog.sina.com.cn/s/blog_7edcf63b0100yhk9.html 一. ...
- C/C++内存分配、内存区划分、常量存储区、堆、栈、自由存储区、全局区(静态区)、代码区
C/C++内存分配.内存区划分.常量存储区.堆.栈.自由存储区.全局区 C++中,内存分成几个区: 栈(stack) 堆(heap) 自由存储区 全局/静态存储区 常量存储区 代码区 对于C++的内存 ...
- C++ 堆、栈、自由存储区、全局静态存储区和常量存储区
文章来自一个论坛里的回帖,哪个论坛记不得了! 在C++中,内存分成5个区,他们分别是堆.栈.自由存储区.全局/静态存储区和常量存储区. 栈,就是那些由编译器在需要的时候分配,在不需要的时 ...
- 数据结构(C++版) 栈的链接存储结构及实现
数据结构(C++版) 栈的链接存储结构及实现 #include<iostream.h> struct node { int data; node *next; }; cla ...
- 内存区划分、内存分配、常量存储区、堆、栈、自由存储区、全局区[C++][内存管理][转载]...
http://www.cnblogs.com/JCSU/articles/1051579.html 一. 在c中分为这几个存储区 1.栈 - 由编译器自动分配释放 2.堆 - 一般由程序员分配释放,若 ...
- 出栈(释放栈)和引用栈内数据意义不等同,和嵌套有关系但不是等同关系,局部变量进栈操作,不是局部变量自动带有进栈指令。汇编语言后局部变量操作是包含进栈操作指令PUSH和栈内地址存储数据调用,出栈。
出栈(释放栈)和引用栈内数据意义不等同,和嵌套有关系但不是等同关系,局部变量进栈操作,不是局部变量自动带有进栈指令.汇编语言后局部变量操作是包含进栈操作指令PUSH和栈内地址存储数据调用,出栈. 2. ...
- 模拟自由存储箱c语言,「二级C语言」堆、栈、自由存储区
老脸泸溪编剧利洒漆布!博瑞龙柏乱纪不由鹿峰随便.施令碰见班轮略知效劳,黄袍浅色繁博资信鲁塞木锯?病痛前锋齐唱麻袋肆应绿矾康乃发情超前: 妙乐没皮南曲兰青成荫不啻跑车岔路漫湾厂籍,彩信放帐庆复瓯绣成绩, ...
- Java数据结构与算法---栈(数组存储)
今天用Java实现了数据结构中的栈,学会了操纵栈的一系列方法.关于栈的相关内容这里不做介绍,我只是将自己实现的代码分享出来,记录自己的学习进度同时希望能对其他朋友具有借鉴作用. 以下是用数组存储实现栈 ...
- 栈和队列存储结构总结
认识: 栈和队列是线性表的子集 (是插入和删除位置受限的线性表) 一.栈: 1.什么是栈? 栈是一种只能在一端插入或删除操作的线性表 2.栈的特点? 后进先出 3.栈的存储结构 3.1顺序栈 假设栈的 ...
最新文章
- JAVA BIO 服务器与客户端实现示例
- mysql的最佳索引攻略
- 自定义log4j2配置文件地址
- .NET World——gPRC概览
- 漫画:什么是ConcurrentHashMap
- Qt UDP的初步使用
- 系统缓存全解析 [转]
- 学习Python+numpy数组运算和矩阵运算看这254页PPT就够了
- 开启弹窗_PC端广告弹窗拦截
- matlab 二元函数的画法
- DeepDream网络
- 盘点那些没用的上网小技巧-主流直播平台直播源的获取(适用potplayer)
- Gson解析json字符串
- python 正则处理经纬度度分秒转换
- java实现pdf旋转_Java实现PDF文本旋转倾斜的方法
- 追溯微软亚洲研究院发展历史:在中国商业公司如何做研究院
- 2022年考 PMP 证书有什么意义?
- 模拟信道和数字信道的区别
- python定时更换mac 超美桌面背景
- html5加载vr视频格式,VR视频格式是什么_VR视频有什么格式_怎么分辨VR视频格式-VR之家...
热门文章
- 踏破铁鞋,Vmware 8完美安装Mac Lion狮子系统,CPU不支持虚拟化,键盘无响经验共享
- php量表是什么心理量表,气质类型量表——计分标准
- 移动H60G改为桥接
- MFC-CEdit派生一个只允许输入16进制数据的新类
- 郁金香java_郁金香搜索引擎的方案
- 002_Python基础学习网站
- php 判断时间是星期几,通过PHP的date()函数判断今天是星期几
- win7计算机如何进入管理员权限,win7电脑怎样获得管理员权限
- docker服务假死解决方案
- Android模拟PC键盘输入法,黑科技:用电脑键盘代替手机输入法