基础介绍

共享栈就是一块内存分配给两个栈,两个栈从各自端点向中间生长,就是计算机基础中内存栈的实现吧

代码

#include "stdio.h"
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define MAXSIZE 20 /* 存储空间初始分配量 */typedef int Status;typedef int SElemType; /* SElemType类型根据实际情况而定,这里假设为int *///两栈共享空间结构
typedef struct
{SElemType data[MAXSIZE];int top1;      /* 栈1栈顶指针 */int top2;     /* 栈2栈顶指针 */
}SqDoubleStack;Status visit(SElemType c)
{printf("%d ", c);return OK;
}Status InitStack(SqDoubleStack* S)
{S->top1 = -1;S->top2 = MAXSIZE;return OK;
}// 把S置为空栈
const Status ClearStack(SqDoubleStack* S)
{S->top1 = -1;S->top2 = MAXSIZE;return OK;
}//判断是否为空栈
Status StackEmpty(SqDoubleStack* S)
{if (S->top1 == -1 && S->top2 == MAXSIZE)return TRUE;else{return FALSE;}
}//返回元素的个数
int StackLength(SqDoubleStack* S)
{return (S->top1 + 1) + (MAXSIZE - S->top2);
}//插入元素e为某个栈的新元素
Status Push(SqDoubleStack* S, SElemType e, int stackNumber)
{if (S->top1 + 1 == S->top2)return ERROR;else if (stackNumber == 1){S->top1++;S->data[S->top1] = e;}else{S->top2--;S->data[S->top2] = e;}return OK;
}//返回栈顶元素
Status Pop(SqDoubleStack* S, SElemType* e, int stackNumber)
{if (stackNumber == 1){if (S->top1 == -1)return ERROR;*e = S->data[S->top1--];}else if (stackNumber == 2){if (S->top2 == MAXSIZE)return ERROR;*e = S->data[S->top2++];}return OK;
}const Status StackTraverse(SqDoubleStack* S)
{int i;i = 0;while (i <= S->top1){visit(S->data[i++]);}i = S->top2;while (i < MAXSIZE){visit(S->data[i++]);}printf("\n");return OK;}
int main()
{int j;SqDoubleStack s;int e;if (InitStack(&s) == OK){for (j = 1; j <= 5; j++)Push(&s, j, 1);for (j = MAXSIZE; j >= MAXSIZE - 2; j--)Push(&s, j, 2);}printf("栈中元素依次为:");StackTraverse(&s);printf("当前栈中元素有:%d \n", StackLength(&s));Pop(&s, &e, 2);printf("弹出的栈顶元素 e=%d\n", e);printf("栈空否:%d(1:空 0:否)\n", StackEmpty(&s));for (j = 6; j <= MAXSIZE - 2; j++)Push(&s, j, 1);printf("栈中元素依次为:");StackTraverse(&s);printf("栈满否:%d(1:否 0:满)\n", Push(&s, 100, 1));ClearStack(&s);printf("清空栈后,栈空否:%d(1:空 0:否)\n", StackEmpty(&s));return 0;
}

大话数据结构08:共享栈 C++相关推荐

  1. 数据结构 3-1-2 共享栈

    一.概念 共享栈是为了优化一般栈的空间利用而提出的优化,在线性栈的两端设置两个栈,共用整个空间,即在一个数组空间中实现了两个栈.可能在实际中并不会用到,但是在题目考察中还是会出现的. 共享栈是为了更有 ...

  2. 数据结构(共享栈的实现)

    1.定义 共享栈:两个栈共享同一片内存空间,两个栈从两边往中间增长. 目的:节省内存空间. 空栈判断:一号栈的栈顶指针为-1,二号栈的栈顶指针为MaxSize. 栈满判断:一号栈的栈顶指针位置等于二号 ...

  3. 【数据结构】共享栈详解 判断共享栈满条件栈顶指针变化详解记忆方法例题

    摘要:简单易懂,详细地介绍共享栈概念,指针,判断共享栈栈满条件以及记忆方法等 目录 共享栈概念 栈顶指针&变化详解 栈顶指针种类的记忆方法 判断栈满条件 判断栈满条件的记忆方法 例题 解题思路 ...

  4. 【数据结构】-共享栈

    共享栈 共享栈示意图 1.头文件及类型定义 2.共享栈类型定义 3.函数声明 4.基本操作 4.1 初始化共享栈 4.2 1号栈判空 4.3 2号栈判空 4.4 1号栈入栈 4.5 2号栈入栈 4.6 ...

  5. [大话数据结构-读书笔记] 栈

    栈 1 栈的定义 1.1 栈的定义 在我们软件应用中,栈这种后进先出数据结构的应用是非常普遍的.比如Word. Photoshop 等文档或图像编辑软件中, 都有撤销 (undo)的操作,也是用栈这种 ...

  6. 大话数据结构系列之栈的实际应用(十)

    文章目录 斐波那契函数推导( Java.C ) 使用栈来实现四则运算( Java.C ) 栈与递归的关系 "递归"与"迭代"的选择性讨论 诗词即兴环节 斐波那契 ...

  7. 大话数据结构 06:栈 顺序存储结构

    基础内容 栈的基础操作: 顺序栈代码 #include "stdio.h" #define OK 1 #define ERROR 0 #define TRUE 1 #define ...

  8. 大话数据结构-栈与队列

    文章知识点来至于大话数据结构里边章节知识, 这篇主要介绍栈与队列在计算机中存储形式, 以及在某些算法领域中对栈和队列的相关应用.章节最后介绍了著名的逆波兰表达式, 以及通过算法来实现该表达式的运算过程 ...

  9. 《大话数据结构》读书笔记-栈与队列

    写在前面:本文仅供个人学习使用.<大话数据结构>通俗易懂,适合整体做笔记输出,构建体系.并且文中很多图片来源于该书. 文章目录 4.2栈的定义 4.2.1 栈的定义 4.2.2 进栈出栈变 ...

最新文章

  1. 选择适合页面或应用程序的数据查看机制
  2. pagefile.sys解析
  3. mysql 路由_mysql 命令大全
  4. MySQL获取数据库每个表的行数
  5. 一个不错的机器视觉库 SimpleCV: a kinder, gentler machine vision library
  6. stm32数据手册中文_浅聊STM32系统构架
  7. jquery复选框 选中事件 及其判断是否被选中_常用笔记
  8. 【Flink】Flink CDH6.3.2 下的yarn per job模式 savepoint和checkpoint,卡住,没有保存成功文件
  9. matlab 集合操作
  10. Java新职篇:多态性、封装性与继承性相互作用是什么?
  11. 乐山计算机学校搬迁,【骨头再次发贴】谈谈新校区。
  12. java爬虫登录_Java爬虫中怎么爬取需要登录的网站
  13. fgo服务器维护中,FGO维护更新公告 更新内容一览
  14. [ffmpeg][goav]ffmpeg代码例子pcmu重采样并转码aac格式
  15. HFC网、FTTx技术、PON
  16. ps制作html网页的跳转,PS图片转页面CSS+HTML的步骤
  17. 珠海网站建设需要多少钱?
  18. 整理:X86架构图示以及各部分解释
  19. 【随便聊聊】Mac 笔记本该怎么选?
  20. 关于Visual Studio 中“scanf”输入报错的解决方法

热门文章

  1. java例程练习(布局管理器[FlowLayout])
  2. 使用SampleGrabber过滤器扑获图像
  3. find命令过滤 no such_linux find -exec rm -r 报No such file or directory
  4. JS获取元素属性和自定义属性
  5. 多行文本超出用省略号代替,单击展开全部
  6. 欢迎使用Augury[翻译]
  7. angular6的响应式表单
  8. 计算机基础:离散数学和完备性
  9. OpenCV直方图均衡化
  10. supervisor安装部署和使用实例