// _DataStructure_C_Impl:共享栈
#include<stdio.h>
#include<stdlib.h>
#define StackSize 100
typedef char DataType;
//两个共享栈的数据结构类型定义
typedef struct
{DataType stack[StackSize];int top[2];
}SSeqStack;
//共享栈的初始化操作
void InitStack(SSeqStack *S){S->top[0]=0;S->top[1]=StackSize-1;
}
//共享栈进栈操作。进栈成功返回1,否则返回0
int PushStack(SSeqStack *S,DataType e,int flag){if(S->top[0]==S->top[1])    //在进栈操作之前,判断共享栈是否为空return 0;switch(flag){case 0:     //当flag为0,表示元素要进左端的栈S->stack[S->top[0]]=e;    //元素进栈S->top[0]++; //修改栈顶指针break;case 1:       //当flag为1,表示元素要进右端的栈S->stack[S->top[1]]=e;    //元素进栈S->top[1]--;   //修改栈顶指针break;default:return 0;}return 1;
}
//出栈操作
int PopStack(SSeqStack *S,DataType *e,int flag){switch(flag){       //在出栈操作之前,判断是哪个栈要进行出栈操作case 0:if(S->top[0]==0)  //左端的栈为空,则返回0,表示出栈操作失败return 0;S->top[0]--;    //修改栈顶指针*e=S->stack[S->top[0]];  //将出栈的元素赋值给ebreak;case 1:       if(S->top[1]==StackSize-1)     右端的栈为空,则返回0,表示出栈操作失败return 0;S->top[1]++;        //修改栈顶指针*e=S->stack[S->top[1]];      //将出栈的元素赋值给ebreak;default:return 0;}return 1;
}
//取栈顶元素。将栈顶元素值返回给e,并返回1表示成功;否则返回0表示失败。
int GetTop(SSeqStack S,DataType *e,int flag){switch(flag){case 0:if(S.top[0]==0)return 0;*e=S.stack[S.top[0]-1];break;case 1:if(S.top[1]==StackSize-1)return 0;*e=S.stack[S.top[1]+1];break;default:return 0;}return 1;
}
int StackEmpty(SSeqStack S,int flag){switch(flag){case 0:if(S.top[0]==0)return 1;break;case 1:if(S.top[1]==StackSize-1)return 1;break;default:return 0;}return 0;
}
void main(){SSeqStack S1,S2;            /*定义一个栈*/int i;DataType a[]={'a','b','c','d','e'};DataType b[]={'x','y','z','r'};DataType e1,e2;InitStack(&S1);                 /*初始化栈*/InitStack(&S2);for(i=0;i<sizeof(a)/sizeof(a[0]);i++)  /*将数组a中元素依次进栈*/{if(PushStack(&S1,a[i],0)==0){printf("栈已满,不能进栈!");return;}}for(i=0;i<sizeof(b)/sizeof(b[0]);i++) /*将数组b中元素依次进栈*/{if(PushStack(&S2,b[i],1)==0){printf("栈已满,不能进栈!");return;}}    if(GetTop(S1,&e1,0)==0){printf("栈已空");return;}if(GetTop(S2,&e2,1)==0){printf("栈已空");return;}printf("栈S1的栈顶元素是:%c,栈S2的栈顶元素是:%c\n",e1,e2);printf("S1出栈的元素次序是:");i=0;while(!StackEmpty(S1,0))    {PopStack(&S1,&e1,0);printf("%4c",e1);    }printf("\n");printf("S2出栈的元素次序是:");while(!StackEmpty(S2,1)) {PopStack(&S2,&e2,1);printf("%4c",e2);}printf("\n");    system("pause");
}

转载于:https://www.cnblogs.com/javafly/p/6037157.html

_DataStructure_C_Impl:共享栈相关推荐

  1. 【数据结构】栈-顺序栈、链式栈、共享栈

    栈的定义 栈(Stack):只允许在一端进行插入或删除操作的线性表 栈顶(Top):线性表允许进行插入和删除的那一端. 栈底(Bottom):固定的,不允许进行插入和删除的另一端. Tips: 1.栈 ...

  2. 大话数据结构08:共享栈 C++

    基础介绍 共享栈就是一块内存分配给两个栈,两个栈从各自端点向中间生长,就是计算机基础中内存栈的实现吧 代码 #include "stdio.h" #define OK 1 #def ...

  3. 【数据结构与算法】共享栈的Java实现

    共享栈 在一个程序中如果同时具有相同类型的两个顺序栈,最直接的方法是为每个栈开辟一个一个数组空间,这样做的结果可能出现一个栈的空间已经被占满而无法再进行操作而另一个栈的空间仍有大量剩余而没有得到利用的 ...

  4. 数据结构之 顺序栈、共享栈、链栈

    顺序栈.共享栈.链栈 一.思维导图: 二.栈的定义: 三.栈的特点: 四.栈的基本操作: 五.常考题型: 六.顺序栈: 1.思维导图: 2.顺序栈基本操作的实现: 1.定义栈: 2. 初始化栈:Ini ...

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

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

  6. 一个数组实现两个栈(共享栈)

    题目:   一个数组实现两个栈. 方法1:   下标为0的位置为栈1的栈底,下标为1的位置为栈2的栈底,栈1的元素存放在下标为偶数的位置上,栈2的元素放在下标为奇数的位置上.   如上图所示的数组:若 ...

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

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

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

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

  9. 【C语言实现共享栈】关于【共享栈】,你知道多少,快来看看吧

    目录 一 .共享栈的基本概念 1.定义 2.特点 二.共享栈的表示 三.共享栈的基本操作 1.共享栈的初始化操作 2.共享栈的判空操作 3.共享栈的进栈操作 0号栈进栈 1号栈进栈 4.共享栈的出栈操 ...

最新文章

  1. Http代理程序,基于hash缓存实现
  2. tf.placeholder类似函数中的形参
  3. python处理excel文件-python读取excel文件
  4. 链式栈的初始化,判空,进栈,出栈,求长,求顶,打印,清空和销毁
  5. Java 帝国之消息队列
  6. 深度优化sql 查询, 提升性能一百倍是什么概念?
  7. mave工程中的一个类调用另一个聚合工程的一个类_软件工程系列-UML1
  8. Nginx根据User-Agent适配PC和手机
  9. Scala学习(一、环境配置和基础)
  10. JMX系列之JmxMBeanServer
  11. 【JUC】JDK1.8源码分析之ReentrantReadWriteLock(七)
  12. 利用ST MCU内部的基准参考电压监测电源电压及其它
  13. 关于PHP中echo换行问题
  14. mac音频剪辑合并软件哪款比较好用,求推荐
  15. 各地区磁偏角和磁倾角查询网址及方法
  16. 2021-2027全球及中国运动营养和体重管理食品行业研究及十四五规划分析报告
  17. axios 的responseType 类型动态设置
  18. 计算机主机无反应,电脑突然开不了机、主机没反应、不显示,几个方法轻松解决...
  19. 机器学习——regression
  20. 7-4 宿舍谁最高? (20 分)

热门文章

  1. hdu2191(多重背包)
  2. vmware中的linux虚拟机如何增加磁盘容量
  3. 怎么往JFrame中添加图片
  4. 自动启动和关闭Oracle 脚本
  5. IBM交付第25000个高端磁盘存储方案
  6. 高效访问Internet-启用ISA Server的缓存
  7. 重建SYSVOL和NETLOGON共享
  8. 两次称量误差多少为恒重_双台子100吨二手散装罐回收价格多少
  9. Java发令枪ConcurrentExecutor之控制线程数,并发数
  10. 【Objective-C】栈(stack)和堆(heap)的区别