:后进先出。(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)的存储相关推荐

  1. 【C 语言】内存管理 ( 动态内存分配 | 栈 | 堆 | 静态存储区 | 内存布局 | 野指针 )

    相关文章链接 : 1.[嵌入式开发]C语言 指针数组 多维数组 2.[嵌入式开发]C语言 命令行参数 函数指针 gdb调试 3.[嵌入式开发]C语言 结构体相关 的 函数 指针 数组 4.[嵌入式开发 ...

  2. 内存区划分、内存分配、常量存储区、堆、栈、自由存储区、全局区[C++][内存管理]...

    这可以帮助你深入了解程序的运行机制,由于自己还是一个初学者,因此大部分内容都只是转载. http://blog.sina.com.cn/s/blog_7edcf63b0100yhk9.html 一. ...

  3. C/C++内存分配、内存区划分、常量存储区、堆、栈、自由存储区、全局区(静态区)、代码区

    C/C++内存分配.内存区划分.常量存储区.堆.栈.自由存储区.全局区 C++中,内存分成几个区: 栈(stack) 堆(heap) 自由存储区 全局/静态存储区 常量存储区 代码区 对于C++的内存 ...

  4. C++ 堆、栈、自由存储区、全局静态存储区和常量存储区

    文章来自一个论坛里的回帖,哪个论坛记不得了!    在C++中,内存分成5个区,他们分别是堆.栈.自由存储区.全局/静态存储区和常量存储区.     栈,就是那些由编译器在需要的时候分配,在不需要的时 ...

  5. 数据结构(C++版) 栈的链接存储结构及实现

    数据结构(C++版) 栈的链接存储结构及实现 #include<iostream.h> struct node {     int data;     node *next; }; cla ...

  6. 内存区划分、内存分配、常量存储区、堆、栈、自由存储区、全局区[C++][内存管理][转载]...

    http://www.cnblogs.com/JCSU/articles/1051579.html 一. 在c中分为这几个存储区 1.栈 - 由编译器自动分配释放 2.堆 - 一般由程序员分配释放,若 ...

  7. 出栈(释放栈)和引用栈内数据意义不等同,和嵌套有关系但不是等同关系,局部变量进栈操作,不是局部变量自动带有进栈指令。汇编语言后局部变量操作是包含进栈操作指令PUSH和栈内地址存储数据调用,出栈。

    出栈(释放栈)和引用栈内数据意义不等同,和嵌套有关系但不是等同关系,局部变量进栈操作,不是局部变量自动带有进栈指令.汇编语言后局部变量操作是包含进栈操作指令PUSH和栈内地址存储数据调用,出栈. 2. ...

  8. 模拟自由存储箱c语言,「二级C语言」堆、栈、自由存储区

    老脸泸溪编剧利洒漆布!博瑞龙柏乱纪不由鹿峰随便.施令碰见班轮略知效劳,黄袍浅色繁博资信鲁塞木锯?病痛前锋齐唱麻袋肆应绿矾康乃发情超前: 妙乐没皮南曲兰青成荫不啻跑车岔路漫湾厂籍,彩信放帐庆复瓯绣成绩, ...

  9. Java数据结构与算法---栈(数组存储)

    今天用Java实现了数据结构中的栈,学会了操纵栈的一系列方法.关于栈的相关内容这里不做介绍,我只是将自己实现的代码分享出来,记录自己的学习进度同时希望能对其他朋友具有借鉴作用. 以下是用数组存储实现栈 ...

  10. 栈和队列存储结构总结

    认识: 栈和队列是线性表的子集 (是插入和删除位置受限的线性表) 一.栈: 1.什么是栈? 栈是一种只能在一端插入或删除操作的线性表 2.栈的特点? 后进先出 3.栈的存储结构 3.1顺序栈 假设栈的 ...

最新文章

  1. JAVA BIO 服务器与客户端实现示例
  2. mysql的最佳索引攻略
  3. 自定义log4j2配置文件地址
  4. .NET World——gPRC概览
  5. 漫画:什么是ConcurrentHashMap
  6. Qt UDP的初步使用
  7. 系统缓存全解析 [转]
  8. 学习Python+numpy数组运算和矩阵运算看这254页PPT就够了
  9. 开启弹窗_PC端广告弹窗拦截
  10. matlab 二元函数的画法
  11. DeepDream网络
  12. 盘点那些没用的上网小技巧-主流直播平台直播源的获取(适用potplayer)
  13. Gson解析json字符串
  14. python 正则处理经纬度度分秒转换
  15. java实现pdf旋转_Java实现PDF文本旋转倾斜的方法
  16. 追溯微软亚洲研究院发展历史:在中国商业公司如何做研究院
  17. 2022年考 PMP 证书有什么意义?
  18. 模拟信道和数字信道的区别
  19. python定时更换mac 超美桌面背景
  20. html5加载vr视频格式,VR视频格式是什么_VR视频有什么格式_怎么分辨VR视频格式-VR之家...

热门文章

  1. 踏破铁鞋,Vmware 8完美安装Mac Lion狮子系统,CPU不支持虚拟化,键盘无响经验共享
  2. php量表是什么心理量表,气质类型量表——计分标准
  3. 移动H60G改为桥接
  4. MFC-CEdit派生一个只允许输入16进制数据的新类
  5. 郁金香java_郁金香搜索引擎的方案
  6. 002_Python基础学习网站
  7. php 判断时间是星期几,通过PHP的date()函数判断今天是星期几
  8. win7计算机如何进入管理员权限,win7电脑怎样获得管理员权限
  9. docker服务假死解决方案
  10. Android模拟PC键盘输入法,黑科技:用电脑键盘代替手机输入法