C语言实现两栈空间共享
一个同学让我改一段两栈共享的C语言代码,实现进栈、出栈、输出栈里元素的功能。
代码如下:
#include <stdio.h>
#include <stdlib.h>
#define MaxSize 100
typedef int ElemType;
typedef int Status; typedef struct {
ElemType data[MaxSize];
int top1;
int top2;
}Stack, *pStack; //初始化
Status InitStack(pStack S)
{
S->top1 = -;
S->top2 = MaxSize;
return ;
} //入栈函数
Status Push_Stack(pStack S, ElemType e, int stackNumber)
{
if (S->top1 + == S->top2)
return ;
switch (stackNumber)
{
case : S->data[++S->top1] = e; break;
case : S->data[--S->top2] = e; break;
}
return ;
} //出栈函数
Status Pop_Stack(pStack S, ElemType *e, int stackNumber)
{
if ( == stackNumber)
{ //判断栈是否为空
if (- == S->top1)
return ;
*e = S->data[--S->top1];
}
else if ( == stackNumber)
{
if (MaxSize == S->top2)
return ;
*e = S->data[++S->top2];
printf("出栈的元素为:%d\n",*e);
}
return ;
} //输出栈中的元素
Status DispStack(pStack S, int stackNumber)
{
int i;
if ( == stackNumber)
{
if (- == S->top1){
printf("栈为空!\n");
return ;
}
printf("栈1中的元素为:");
for (i = ; i <= S->top1; i++)
printf("%d ", S->data[i]);
printf("\n");
printf("栈顶元素为:%d\n", S->data[S->top1]);
}
else if ( == stackNumber)
{
if (MaxSize == S->top2){
printf("栈为空!\n");
return ;
}
printf("栈2中的元素为:");
for (i = MaxSize - ; i >= S->top2; i--)
printf("%d ", S->data[i]);
printf("\n");
printf("栈顶元素为:%d\n", S->data[S->top2]);
}
} int main(void)
{
Stack S;
ElemType e;
int n;
int tmp;
InitStack(&S);
for (;;){
printf("请选择要输入哪个栈中的元素 1或2,退出输入请输入3:\n");
//Visual C++ 2012 使用了更加安全的 run-time library routines 。新的Security CRT functions(就是那些带有“_s”后缀的函数)
scanf_s("%d", &n);
if ( == n)
{
break;
}
else if(!=n && !=n){
printf("输入错别选项!请选择要输入哪个栈中的元素 1或2,退出输入请输入3:\n");
}
printf("请输入元素值:\n");
scanf_s("%d", &tmp); if ( == n || == n)
{
if ( == Push_Stack(&S, tmp, n)){
printf("栈已满,不能再添加元素!\n");
break;
}
} } while (true){
printf("请选择要输出哪个栈中的元素 1或2:\n");
scanf_s("%d", &n);
if (n == )
{
DispStack(&S, );
break;
}
else if (n == )
{
DispStack(&S, );
break;
}
else{
printf("输入错误选项!\n");
}
}
system("pause");
return ;
}
C语言实现两栈空间共享的更多相关文章
- 顺序栈与两栈共享空间-C语言实现
栈是一种只能允许在栈顶插入数据与删除数据的数据结构,其实这就是一种特殊的线性表,特殊在 只能在表尾进行增减元素,上代码 #include <stdio.h> #define MAXSIZE ...
- 02两栈共享空间_DoubleStack--(栈与队列)
#include "stdio.h" #include "stdlib.h" #include "io.h" #include " ...
- C语言中函数调用过程(如何管理栈空间)
ps:先做草稿,以后有时间再整理并贴图,:) 主要是利用栈底寄存器(ebp).栈顶寄存器(esp)跟eax寄存器(存储返回值)来实现. 假设P调用Q: P() { Q(1,2); } (跟实际情况可能 ...
- C语言中的栈和堆
原文出处<http://blog.csdn.net/xiayufeng520/article/details/45956305#t0> 栈内存由编译器分配和释放,堆内存由程序分配和释放. ...
- Go语言是如何处理栈的
转自:http://tonybai.com/2014/11/05/how-stacks-are-handled-in-go/ Go 1.4Beta1刚刚发布,在Go 1.4Beta1中,Go语言的st ...
- 《浏览器工作原理与实践》 <12>栈空间和堆空间:数据是如何存储的?
对于前端开发者来说,JavaScript 的内存机制是一个不被经常提及的概念 ,因此很容易被忽视.特别是一些非计算机专业的同学,对内存机制可能没有非常清晰的认识,甚至有些同学根本就不知道 JavaSc ...
- C语言实现顺序栈以及栈的特点
什么是栈? 同顺序表和链表一样,栈也是用来存储逻辑关系为 "一对一" 数据的线性存储结构,如下图所示. 从上图我们看到,栈存储结构与之前所学的线性存储结构有所差异,这缘于栈对数据 ...
- 关于C语言函数调用压栈和返回值问题的疑惑
按照C编译器的约定调用函数时压栈的顺序是从右向左,并且返回值是保存在eax寄存器当中.这个命题本该是成立的,下面用一个小程序来反汇编观察执行过程: #include<stdio.h> in ...
- 更改Linux默认栈空间的大小
有时候在Linux写C++程序处理大量的数据,程序内部需要分配很大的数组来存放一些数据,但有时候分配的数组太大的话运行时会出现段错误.这种情况可能是分配的数组大小超过了Linux系统的默认栈空间的大小 ...
随机推荐
- SQL几个有点偏的语句
SQL语句是一种集合操作,就是批量操作,它的速度要比其他的语言快,所以在设计的时候很多的逻辑都会放在sql语句或者存储过程中来实现,这个是一种设计思想.但是今天我们来讨论另外一个话题.Sql页提供了丰 ...
- 'EntityValidationErrors' property for more details
很多小猿遇到这个Exception 的时候,都会有点无厘头.这个时候最好try-- catch下,找到出错的地方.本人习惯在页面上加个lable标签,把exc msg(exception messag ...
- UIView的layoutSubviews和drawRect方法
UIView的layoutSubviews和drawRect方法 首先两个方法都是异步执行.layoutSubviews方便数据计算,drawRect方便视图重绘. layoutSubview ...
- 视频处理简单实例 [OpenCV 笔记2]
VideoCapture是OpenCV 2.X中新增的类,提供从摄像机或视频文件捕获视频的C++接口.利用它读入视频的方法一般有两种: // method 1 VideoCapture capture ...
- LCS最长公共子序列HDU1159
最近一直在学习算法,基本上都是在学习动态规划以及字符串.当然,两者交集最经典之一则是LCS问题. 首先LCS的问题基本上就是在字符串a,b之间找到最长的公共子序列,比如 YAOLONGBLOG 和 Y ...
- Photon引擎开发实战(1)——Photon 简介
Photon简介 Photon是一套使用广泛的socket server引擎,服务端底层C++编写,客户端C#编写,跨多平台,收费,效率可观的一款引擎.实用上前有九城游戏(原魔兽世界代理),现在笔者发 ...
- 开发错误日志之No matching bean of type [xxx] found for dependency
No matching bean of type [org.springframework.data.mongodb.core.MongoTemplate] found for dependency ...
- Android 学习手札(三) 视图(View)
在Android 系统红,任何可视化组件都需要从android.view.View类继承.可以使用两种方式创建View对象. · 一种方式是使用XML来配置View的相关属性,然后使用相应的方法来装载 ...
- 解决WEB(apache)服务器time_wait过高的性能优化过程
目录 1.网站的硬件环境 2.修改Httpd.conf 3.修改sysctl.conf文件 一.网站环境LAMP硬件环境 [root@www conf]# dmidecode -s processor ...
- JavaScript Iframe富文本编辑器中的光标定位
最近在项目中碰到一个比较棘手的问题: 在iframe富文本编辑器中,有个工具栏,这个工具栏在iframe标签之外,工具栏上有一个按钮,点击该按钮向iframe正在编辑中的光标处插入一个图片,图片会插入 ...