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系统的默认栈空间的大小 ...
随机推荐
- wp 修改 提高youtu 速度
resolve = 后添加 |.googlevideo.com ,并修改 crlf_rules crlf_rules = /^https?:\/\/[^\/]+\.c\.youtube\.com\// ...
- xcode 7种使用coredata遇到 Class not found, using default NSManagedObject instead.问题
CoreData: warning: Unable to load class named 'CoreDataSwift2_2.Bowtie' for entity 'Bowtie'. Class n ...
- label语句和break continue的使用(高程第三章)
break&&outermost var num = 0; outermost: for(var i=0;i<10;i++){ for(var j=0;j<10;j++){ ...
- ZOJ 1423 (Your)((Term)((Project))) (模拟+数据结构)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=423 Sample Input 3(A-B + C) - (A+(B ...
- C++拷贝构造函数详解 转
一. 什么是拷贝构造函数 首先对于普通类型的对象来说,它们之间的复制是很简单的,例如: [c-sharp] view plaincopy int a = 100; int b = a; 而类对象与普通 ...
- Oracel用rownum实现真分页
因为oracle的rownum是一个伪列,使用的时候如果要用必须查询出来显示的标记例如本sql中标记为 num. 值得一提的是最内层的这个查询sql:“select a.集团规范编码...”本身有一个 ...
- Python转码问题
在Python中,可以对String调用decode和encode方法来实现转码. 比如,若要将某个String对象s从gbk内码转换为UTF-8,可以如下操作 s.decode('gbk').e ...
- 关于abbr 的一些用法
<span style="margin: 20px;">位 000置:</span><abbr title='四川省绵阳市梓潼县文昌镇金龙乡一大队二组 ...
- CentOS6.5 yum安装桌面环境
安装原因 安装centos6.5时选择了minimal CentOS最小化安装方式 需要使用浏览器拨号连接内网 安装过程 通过yum grouplist查询在 group 软件包中,Desktop.D ...
- mssql 获取表结构信息
SELECT (case when a.colorder=1 then d.name else null end) 表名, a.colorder 字段序号,a.name 字段名, (case when ...