博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
两栈共享空间的存储结构和入栈出栈操作
阅读量:4947 次
发布时间:2019-06-11

本文共 1890 字,大约阅读时间需要 6 分钟。

参考《大话数据结构》P95~96——两栈共享存储空间。

当两个栈的需求空间有相反关系时,也就是一个栈增长时,另一个栈在缩短,可以采用两栈共享空间结构。这是针对两个具有相同数据类型的栈的一个设计技巧。

举个简单的例子:

代码和解释如下(VS2012测试通过):

1 #include 
2 #include
3 using namespace std; 4 5 #define MAXSIZE 6 //本例中栈满共6个元素 6 typedef string status;//本例尝试用书上推荐的status返回是否成功,C++中的模板类string比字符数组char[]更方便 7 8 //两栈共享空间的存储结构 9 typedef struct10 {11 char data[MAXSIZE];12 int top1;//栈1的栈顶所在元素的数组下标13 int top2;//栈2的栈顶所在元素的数组下标14 }SqDoubleStack;15 16 //两栈共享空间的初始化,申请内存,把栈初始化为空栈17 //返回指向SqDoubleStack结构的地址18 SqDoubleStack *InitSqDoubleStack(SqDoubleStack *s)19 {20 s=new SqDoubleStack;21 s->top1=-1;22 s->top2=MAXSIZE;23 return s;24 }25 26 //入栈27 //插入元素e为新的栈顶元素,stacknumber是栈号参数28 //因为在开始判断了是否栈满,后面的top1+1和top2-1是不担心溢出问题的29 status Push(SqDoubleStack *s,char e,int stacknumber)30 {31 if(s->top1+1==s->top2)//若栈已满,不能插入新的元素32 return "error";33 if(stacknumber==1)//栈1有元素进栈34 s->data[++s->top1]=e;//先top1加1,再给数组元素赋值35 else if(stacknumber==2)//栈2有元素进栈36 s->data[--s->top2]=e;//先top2减1,再给数组元素赋值37 return "push ok";//元素入栈成功38 }39 40 //出栈41 status Pop(SqDoubleStack *s,char *e,int stacknumber)42 {43 if(stacknumber==1)44 {45 if(s->top1==-1)//若栈1已空,没有元素出栈46 return "error"; 47 *e=s->data[s->top1--];//将栈1的栈顶元素先出栈,再top1减1 48 }49 else if(stacknumber==2)50 {51 if(s->top2==MAXSIZE)//若栈2已空,没有元素出栈52 return "error"; 53 *e=s->data[s->top2++];//将栈1的栈顶元素出栈,再top2加1 54 }55 return "pop ok";//元素出栈成功56 }57 58 int main()59 {60 SqDoubleStack *p=NULL;61 62 //调用初始化函数63 p=InitSqDoubleStack(p);64 65 //入栈66 cout<<"A"<<" "<
<<" ";//进栈1,A67 cout<
top1<
top2<
top1<
top2<

运行结果:

转载于:https://www.cnblogs.com/hslzju/p/5405824.html

你可能感兴趣的文章
百度地图 导航
查看>>
SQLServer 错误: 15404,无法获取有关 Windows NT 组
查看>>
html5全局属性
查看>>
【转】Android Hook框架Xposed详解
查看>>
Android 有用代码片段总结
查看>>
英语各种时态例句
查看>>
从下往上看--新皮层资料的读后感 第三部分 70年前的逆向推演- 从NN到ANN
查看>>
(转)系统引导管理器GRUB详解
查看>>
数据访问C#入门经典第21章-读写压缩数据
查看>>
PHP超时处理全面总结(转)
查看>>
利用python进行数据分析--pandas入门2
查看>>
[zz]使用 libevent 和 libev 提高网络应用性能
查看>>
Linux故障处理最佳实践
查看>>
6标准文件读写
查看>>
jsTree 核心功能(core functionality) API
查看>>
Perl oop链接数据库
查看>>
网络虚拟化我眼中的OpenFlow
查看>>
[leetcode] 3. Longest Substring Without Repeating Characters
查看>>
06 Frequently Asked Questions (FAQ) 常见问题解答 (常见问题)
查看>>
获取判断IE版本 TypeError: Cannot read property 'msie' of undefined
查看>>