//两个顺序栈共享一个数据空间
#include<stdio.h>
#include "stdlib.h"
#define MAXSIZE 100 //是顺序栈所能存储的最多元素个数
typedef int datatype;
typedef struct//顺序栈的定义 
{
    datatype stack[MAXSIZE]; //stack 数组存储栈中所有的数据元素 
    int top;
 } seqstack;//顺序栈的类型定义 
 seqstack *S,*B,s,b;//顺序栈变量定义 
 
void INITSTACK(seqstack *S,seqstack *B)
{
    S->top=-1;
    B->top=MAXSIZE;
    printf("S,B两个栈共享一个数组的存储空间!");
}
 
 int EMPTY(seqstack *S,seqstack *B)
 {
     if(S->top<0&&B->top>=MAXSIZE)
     {printf("栈空!");
     return 1;
     }
     else return 0;
 }
 int FULL(seqstack *S,seqstack *B)
 {
     if(S->top==B->top-1)
     {printf("栈满");
     return 1;
     }
    else return 0; 
  } 
  seqstack *SPUSH(seqstack *S,datatype x)
  {
      
      if(FULL(S,B))
      {
         return 0; 
      }
      else 
      {printf("请输入数据");
          scanf("%d",&x);
          S->top++;
          S->stack[S->top]=x;
      }
      return S;
   } 
   int SPOP(seqstack *S,seqstack *B)
   {datatype x;
       if(EMPTY(S,B))
       {
        return 0;
       }
       else 
       {
           x=S->stack[S->top];
           S->top--;
           printf("出栈成功:%d\n",x); 
           return (x);
       }
   }
   
   seqstack *BPUSH(seqstack *B,datatype x)
   {
       if(FULL(S,B))
       {
        return 0;    
       }
       else 
       {printf("请输入数据");
          scanf("%d",&x);
           B->top--;
           B->stack[B->top]=x;
       }
       return B;
   }
   
   int BPOP(seqstack *S,seqstack *B)
   {datatype x;
       if(EMPTY(S,B))
       {
           return 0;
       }
       else
       {
           x=B->stack[B->top];
           B->top++;
           printf("出栈成功:%d\n",x);
           return x;
       }
   }
   int select()
    
    {int b; 
    printf("两个顺序栈共用一个数组的存储空间:\n请选择功能\n");
       printf("1.初始化\t");
       printf("2.栈1进栈\t");
       printf("3.栈1出栈\t");
       printf("4.栈2进栈\t");
       printf("5.栈2出栈\t\n");
    printf("0.退出\t\n");
    scanf("%d",&b);
    return b;    
    }

int main()
   {
    int select();
    int a;
      S=&s;
    B=&b; 
       void INITSTACK(seqstack *S,seqstack *B);
    int EMPTY(seqstack *S,seqstack *B);
    int FULL(seqstack *S,seqstack *B);
    seqstack *SPUSH(seqstack *S,datatype x);
    int SPOP(seqstack *S,seqstack *B);
    seqstack *BPUSH(seqstack *B,datatype x);
    int BPOP(seqstack *S,seqstack *B);
    while(1)
    {    
        a=select();
        switch(a)
       {
     case 0: exit(0);
    case 1:INITSTACK(&s,&b);
    break;
           case 2:
       SPUSH(&s,a);
       break;
       case 3:
       SPOP(&s,&b);
       break;
       case 4:
       BPUSH(&b,a);
       break;
       case 5:
        BPOP(&s,&b);
       }

}
         return 0;
        
    }

两个顺序栈共享一个数组的存储空间相关推荐

  1. 两顺序栈共享Java_数据结构与算法(三),栈与队列

    上一篇<数据结构与算法(二),线性表>中介绍了数据结构中线性表的两种不同实现--顺序表与链表.这一篇主要介绍线性表中比较特殊的两种数据结构--栈与队列.首先必须明确一点,栈和队列都是线性表 ...

  2. 两个路由器桥接共享一个宽带

    两个路由器: 主路由器和副路由器 主路由器设置完成的情况下,将副路由器和主路由器桥接,共用一个宽带 1.保持副路由器的WAN和LAN没有线连接的情况下,reset 2.登录192.168.1.1 设置 ...

  3. java 连接两个arraylist,java – 在两个线程之间共享一个ArrayList?

    既然你已经使用了动词'push'和'poll',那么你似乎在寻找一个不是列表的队列. 因此,我认为您正在寻找记录为here的ConcurrentLinkedQueue. 它允许您让UserReques ...

  4. 数据结构学习笔记——栈的基本知识和顺序存储结构实现栈(顺序栈)

    目录 一.栈 (一)栈的概念 (二)栈的排列 (三)共享栈 (四)栈的常见应用 二.顺序栈的定义 三.顺序栈的初始化 四.判断顺序栈是否为空栈 五.判断顺序栈是否为满栈 六.进栈(插入操作) 七.出栈 ...

  5. 实现顺序栈的各种基本运算的算法C语言,实现顺序栈的各种基本运算的算法

    试编写一个算法,让两个顺序栈共用一个数组stack[N]试编写一个算法,让两个顺序栈共用一个数组stack[N],分别实现入栈\出栈操要2个栈公用一个存储空间看来栈顶指针只能从两端开始了(和队列有点像 ...

  6. 【数据结构】之两栈共享空间(C语言)

    文章目录 引言 实现之两栈共享空间 插入元素 删除元素 完整代码 引言 栈的顺序存储还是很方便的,因为它只准栈顶进出元素,所以不存在线性表插入和删除时需要移动元素的问题.不过栈有一个比较大的缺陷,就是 ...

  7. 【数据结构】-顺序栈(初始化栈顶指针为-1)

    顺序栈-初始化栈顶指针为-1 1.头文件及类型定义 2.顺序栈类型定义 3.函数声明 4.基本操作 4.1 初始化顺序栈 4.2 判空 4.3 入栈 4.4 出栈 4.5 读取栈顶元素 4.6 mai ...

  8. 顺序栈计算器 中缀转后缀表达式

    顺序栈计算器 中缀转后缀表达式 前言 一.后缀表达式简述 二.参考书目中的函数实现 1.输入一个后缀表达式并计算 2.将中缀转后缀表达式 三.在原方法基础上改写并结合两个方法 1.输入一个后缀表达式并 ...

  9. 插入栈顶元素c语言,详解数据结构之顺序栈的基本操做(C语言描述)

    1.栈是线性表的特例,所以栈的顺序存储其实也就是线性表顺序存储的简化,咱们称之为顺序栈,线性表是采用数组来实现的,所以顺序栈也采用数组来实现. 2.栈的结构定义:elementype类型根据实际状况而 ...

最新文章

  1. 三层交换机----VRRP协议学习
  2. 入门机器学习,这一步必不可少!
  3. Bootstrap 标签页Tab插件的事件
  4. android滑动基础篇 TouchView
  5. Oracle中监听程序无法识别连接描述符中的请求的服务解决办法
  6. Sampling-Argmax:用重参数技巧优化Soft-Argmax
  7. DG - 开启Active Data Guard
  8. Android接口测试工具Apizza,自定义API请求返回值,自定义请求相对路径
  9. 服务器pe系统ghost系统安装教程,U盘PE启动安装GHOST系统图文教程
  10. 欧姆龙plc解密实例_欧姆龙PLC CP1H解密实例
  11. Win10触摸板手势及技巧
  12. 设置水平线高度html代码是size,html水平线样式 Width:设置水平线的宽度
  13. pip2 python2.7 安装opencv-python cv2遇到问题的可能解决办法 skbuild list(pattern)
  14. 龟背驼腰下一句更精彩
  15. java消息队列-kafka
  16. 喜茶入股7家茶饮,从“打工仔”做起了“金主爸爸”?
  17. Mysql 允许IP地址访问
  18. TCP协议及三次握手的过程
  19. 关于python字符编码以下选项中错误的是_关于 Python 字符编码,以下选项中描述错误的是...
  20. 总结一波腾讯,阿里,字节跳动问的 Redis 面试题

热门文章

  1. Ajax实现点击导航栏只切换页面内容,导航栏不变
  2. 失物招领网站毕业设计,失物招领网站设计与实现,失物招领论文源码设计分析毕设作品参考
  3. 人工神经网络(ANN/NN)、感知机(PLA)
  4. 数字图像处理篇(7)角点检测
  5. 微信小程序中的vw和vh单位
  6. 森林防火指挥系统截图
  7. 森林救火与计算机相关,无人机森林防火解决方案包含了哪些技术?
  8. Hack The Boo 2022 CTF题目writeups
  9. autojs连模拟器_autojs-vue
  10. Linux 系统下各种包的安装方法