两个顺序栈共享一个数组的存储空间
//两个顺序栈共享一个数据空间
#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;
}
两个顺序栈共享一个数组的存储空间相关推荐
- 两顺序栈共享Java_数据结构与算法(三),栈与队列
上一篇<数据结构与算法(二),线性表>中介绍了数据结构中线性表的两种不同实现--顺序表与链表.这一篇主要介绍线性表中比较特殊的两种数据结构--栈与队列.首先必须明确一点,栈和队列都是线性表 ...
- 两个路由器桥接共享一个宽带
两个路由器: 主路由器和副路由器 主路由器设置完成的情况下,将副路由器和主路由器桥接,共用一个宽带 1.保持副路由器的WAN和LAN没有线连接的情况下,reset 2.登录192.168.1.1 设置 ...
- java 连接两个arraylist,java – 在两个线程之间共享一个ArrayList?
既然你已经使用了动词'push'和'poll',那么你似乎在寻找一个不是列表的队列. 因此,我认为您正在寻找记录为here的ConcurrentLinkedQueue. 它允许您让UserReques ...
- 数据结构学习笔记——栈的基本知识和顺序存储结构实现栈(顺序栈)
目录 一.栈 (一)栈的概念 (二)栈的排列 (三)共享栈 (四)栈的常见应用 二.顺序栈的定义 三.顺序栈的初始化 四.判断顺序栈是否为空栈 五.判断顺序栈是否为满栈 六.进栈(插入操作) 七.出栈 ...
- 实现顺序栈的各种基本运算的算法C语言,实现顺序栈的各种基本运算的算法
试编写一个算法,让两个顺序栈共用一个数组stack[N]试编写一个算法,让两个顺序栈共用一个数组stack[N],分别实现入栈\出栈操要2个栈公用一个存储空间看来栈顶指针只能从两端开始了(和队列有点像 ...
- 【数据结构】之两栈共享空间(C语言)
文章目录 引言 实现之两栈共享空间 插入元素 删除元素 完整代码 引言 栈的顺序存储还是很方便的,因为它只准栈顶进出元素,所以不存在线性表插入和删除时需要移动元素的问题.不过栈有一个比较大的缺陷,就是 ...
- 【数据结构】-顺序栈(初始化栈顶指针为-1)
顺序栈-初始化栈顶指针为-1 1.头文件及类型定义 2.顺序栈类型定义 3.函数声明 4.基本操作 4.1 初始化顺序栈 4.2 判空 4.3 入栈 4.4 出栈 4.5 读取栈顶元素 4.6 mai ...
- 顺序栈计算器 中缀转后缀表达式
顺序栈计算器 中缀转后缀表达式 前言 一.后缀表达式简述 二.参考书目中的函数实现 1.输入一个后缀表达式并计算 2.将中缀转后缀表达式 三.在原方法基础上改写并结合两个方法 1.输入一个后缀表达式并 ...
- 插入栈顶元素c语言,详解数据结构之顺序栈的基本操做(C语言描述)
1.栈是线性表的特例,所以栈的顺序存储其实也就是线性表顺序存储的简化,咱们称之为顺序栈,线性表是采用数组来实现的,所以顺序栈也采用数组来实现. 2.栈的结构定义:elementype类型根据实际状况而 ...
最新文章
- 三层交换机----VRRP协议学习
- 入门机器学习,这一步必不可少!
- Bootstrap 标签页Tab插件的事件
- android滑动基础篇 TouchView
- Oracle中监听程序无法识别连接描述符中的请求的服务解决办法
- Sampling-Argmax:用重参数技巧优化Soft-Argmax
- DG - 开启Active Data Guard
- Android接口测试工具Apizza,自定义API请求返回值,自定义请求相对路径
- 服务器pe系统ghost系统安装教程,U盘PE启动安装GHOST系统图文教程
- 欧姆龙plc解密实例_欧姆龙PLC CP1H解密实例
- Win10触摸板手势及技巧
- 设置水平线高度html代码是size,html水平线样式 Width:设置水平线的宽度
- pip2 python2.7 安装opencv-python cv2遇到问题的可能解决办法 skbuild list(pattern)
- 龟背驼腰下一句更精彩
- java消息队列-kafka
- 喜茶入股7家茶饮,从“打工仔”做起了“金主爸爸”?
- Mysql 允许IP地址访问
- TCP协议及三次握手的过程
- 关于python字符编码以下选项中错误的是_关于 Python 字符编码,以下选项中描述错误的是...
- 总结一波腾讯,阿里,字节跳动问的 Redis 面试题