02两栈共享空间_DoubleStack--(栈与队列)
- #include "stdio.h"
- #include "stdlib.h"
- #include "io.h"
- #include "math.h"
- #include "time.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;
- }
- /* 构造一个空栈S */
- Status InitStack(SqDoubleStack *S)
- {
- S->top1=-;
- S->top2=MAXSIZE;
- return OK;
- }
- /* 把S置为空栈 */
- Status ClearStack(SqDoubleStack *S)
- {
- S->top1=-;
- S->top2=MAXSIZE;
- return OK;
- }
- /* 若栈S为空栈,则返回TRUE,否则返回FALSE */
- Status StackEmpty(SqDoubleStack S)
- {
- if (S.top1==- && S.top2==MAXSIZE)
- return TRUE;
- else
- return FALSE;
- }
- /* 返回S的元素个数,即栈的长度 */
- int StackLength(SqDoubleStack S)
- {
- return (S.top1+)+(MAXSIZE--S.top2);
- }
- /* 插入元素e为新的栈顶元素 */
- Status Push(SqDoubleStack *S,SElemType e,int stackNumber)
- {
- if (S->top1+==S->top2) /* 栈已满,不能再push新元素了 */
- return ERROR;
- if (stackNumber==) /* 栈1有元素进栈 */
- S->data[++S->top1]=e; /* 若是栈1则先top1+1后给数组元素赋值。 */
- else if (stackNumber==) /* 栈2有元素进栈 */
- S->data[--S->top2]=e; /* 若是栈2则先top2-1后给数组元素赋值。 */
- return OK;
- }
- /* 若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR */
- Status Pop(SqDoubleStack *S,SElemType *e,int stackNumber)
- {
- if (stackNumber==)
- {
- if (S->top1==-)
- return ERROR; /* 说明栈1已经是空栈,溢出 */
- *e=S->data[S->top1--]; /* 将栈1的栈顶元素出栈 */
- }
- else if (stackNumber==)
- {
- if (S->top2==MAXSIZE)
- return ERROR; /* 说明栈2已经是空栈,溢出 */
- *e=S->data[S->top2++]; /* 将栈2的栈顶元素出栈 */
- }
- return OK;
- }
- Status StackTraverse(SqDoubleStack S)
- {
- int i;
- i=;
- 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=;j<=;j++)
- Push(&s,j,);
- for(j=MAXSIZE;j>=MAXSIZE-;j--)
- Push(&s,j,);
- }
- printf("栈中元素依次为:");
- StackTraverse(s);
- printf("当前栈中元素有:%d \n",StackLength(s));
- Pop(&s,&e,);
- printf("弹出的栈顶元素 e=%d\n",e);
- printf("栈空否:%d(1:空 0:否)\n",StackEmpty(s));
- for(j=;j<=MAXSIZE-;j++)
- Push(&s,j,);
- printf("栈中元素依次为:");
- StackTraverse(s);
- printf("栈满否:%d(1:否 0:满)\n",Push(&s,,));
- ClearStack(&s);
- printf("清空栈后,栈空否:%d(1:空 0:否)\n",StackEmpty(s));
- return ;
- }
02两栈共享空间_DoubleStack--(栈与队列)的更多相关文章
- 顺序栈与两栈共享空间-C语言实现
栈是一种只能允许在栈顶插入数据与删除数据的数据结构,其实这就是一种特殊的线性表,特殊在 只能在表尾进行增减元素,上代码 #include <stdio.h> #define MAXSIZE ...
- 包含MIN函数的栈+一个数组实现两个堆栈+两个数组实现MIN栈
1.题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数. 思路:利用一个辅助栈来存放最小值 栈 3,4,2,5,1 辅助栈 3,2,1 每入栈一次,就与辅 ...
- 递归&栈帧空间
递归函数: 自己调用自己的函数 def digui(n): print(n) if n > 0: digui(n-1) print(n) digui(5) 执行结果: 5 4 3 2 1 0 0 ...
- Java描述表达式求值的两种解法:双栈结构和二叉树
Java描述表达式求值的两种解法:双栈结构和二叉树 原题大意:表达式求值 求一个非负整数四则混合运算且含嵌套括号表达式的值.如: # 输入: 1+2*(6/2)-4 # 输出: 3.0 数据保证: 保 ...
- Java堆空间Vs栈内存
之前我写了几篇有关Java垃圾收集的文章之后,我收到了很多电子邮件,请求解释Java堆空间,Java栈内存,Java中的内存分配以及它们之间的区别. 您可能在Java,Java EE书籍和教程中看到很 ...
- JVM 运行时数据区:程序计数器、Java 虚拟机栈和本地方法栈,方法区、堆以及直接内存
Java 虚拟机可以看作一台抽象的计算机,如同真实的计算机,它也有自己的指令集和运行时内存区域. Java 虚拟机在执行 Java 程序的过程中会把它所管理的内存(运行时内存区域)划分为若干个不同的数 ...
- 【JVM第三篇--运行时数据区】程序计数器、虚拟机栈、本地方法栈
写在前面的话:本文是在观看尚硅谷JVM教程后,整理的学习笔记.其观看地址如下:尚硅谷2020最新版宋红康JVM教程 一.运行时数据区 我们在编写Java程序时,使用JVM的流程主要如下所示: 虚拟机在 ...
- MySQL Innodb的两种表空间方式
要说表空间,MySQL的表空间管理远远说不上完善.换句话说,事实上MySQL根本没有真正意义上的表空间管理.MySQL的Innodb包含两种表空间文件模式,默认的共享表空间和每个表分离的独立表空间.只 ...
- [原创]java WEB学习笔记59:Struts2学习之路---OGNL,值栈,读取对象栈中的对象的属性,读取 Context Map 里的对象的属性,调用字段和方法,数组,list,map
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
随机推荐
- Java的面向对象思想
多态性: 一种方法有多种实现,采用哪一种实现由Java虚拟机在运行时动态决定,这种能力成为动态绑定(dynamic binding),也称为多态性(polymorphism)(源于一个希腊单词,意为“ ...
- ecshop去官方化的修改
1:如何修改网站"欢迎光临本店" 回答:languages\zh_cn\common.php文件中, $_LANG['welcome'] = '欢迎光临本店';将他修改成你需要的字 ...
- SQLite使用教程6 创建表
http://www.runoob.com/sqlite/sqlite-create-table.html SQLite 创建表 SQLite 的 CREATE TABLE 语句用于在任何给定的数据库 ...
- Gitbook安装
Gitbook安装 Gitbook是从NMP安装的,命令行: $ npm install gitbook -g 安装完之后,你可以检验下是否安装成功: $ gitbook -V 0.4.2 如果你看到 ...
- C#/Access-数据库获取自动编号的最大值
//conStrSQL你改成你的access,我这里用的SQL2005string conStrSQL = "Data Source=xx.xx.xx.xx;Initial Catalog= ...
- git codes
https://github.com/chibi-guts/DressUpProject https://github.com/TuttiFruttiFT/TFAndroid https://gith ...
- 【异构计算】OpenCL矩阵转置
介绍 矩阵转置,主要的技巧还是利用好local memory ,防止local memory,以及glabol memory的读取尽量是合并读写. 完整代码一: main.cpp代码 #include ...
- ios开发——笔记篇
:开关 BOOL isopen = !isopen; //View @property (nonatomic, assign) BOOL open;//模型属性 self.group.open = ! ...
- [原创]javascript prototype 对象 函数 <精简的美丽......>
精简的美丽...... javascript prototype 对象 函数 在javascript中我们都知道创建一个对象使用如下代码var x = {}对象可以拥有属性和方法var x = { ...
- [Effective C++ --005]了解C++默默编写并调用哪些函数
<前言>编译器是个十分敬业的工作者,不但为你编译代码,甚至为你生成代码,不可思议吧.本文主要介绍编译器究竟会为我们生成和调用哪些代码. <空类和非空类>如果问什么样的类是空类? ...