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系统的默认栈空间的大小 ...
随机推荐
- Angularjs总结(一)表单验证
常用的表单验证1.必须字段html5特性 增加required <input type="text" required /> 2.最小长度和最大长度 <input ...
- 让USB键盘的LED灯听你的!(不干扰使用)
最近在研究一个课题,如何能利用键盘的led灯通道进行有效通信,那么首先要做的就是尝试能否在不影响键盘的情况下控制LED灯(num lock ,caps lock ,scroll lock)的使用. 首 ...
- js 组件的写法
var Test1 = function(){ var name = ""; this.setName = function(username){ name = username; ...
- Win7下通过easyBCD引导安装Ubuntu14.04
Ubuntu14.04作为目前最新版本的ubuntu系统,相信很多人都想在自己的电脑上安装一下,然而系统的安装方法各式各样,u盘法.grub引导法等等,这里我将介绍在win7系统下用easyBCD软件 ...
- 实现windows和linux的NFS交互
说明:本文是Omni-NFS-X Windows与Linux间通讯的另一种方式和在windows中配置使用NFS客户端的杂交篇 概述 windows/winnt4.0/win2000与Linux/Fr ...
- webStorm中的混乱代码格式化
Mac上 command + alt + l windows上 control + alt + l
- 如何用 React Native 创建一个iOS APP?
诚然,React Native 结合了 Web 应用和 Native 应用的优势,可以使用 JavaScript 来开发 iOS 和 Android 原生应用.在 JavaScript 中用 Reac ...
- c++调用ffmpeg
在自己编译好ffmpeg库后,已经迫不及待的想尝试用vs2010来调用ffmpeg,在开始调用的时候遇到了些问题,但还是解决了. 配置vs 1.右键工程-属性,在然后选择 配置属性 -> C/C ...
- QImage与QPixmap加载图片效果(QImage不能拉伸图片,QPixmap默认拉伸图片)
QImage与QPixmap加载图片 效果 . 分类: QT开发 qtQtQT PixmapTest::PixmapTest(QWidget *parent) : QDialog(parent) {t ...
- Android Wear 开发入门
大家好,我是陆嘉杰,我是一名Android开发者.我想和大家进行一些技术交流,希望越来越多的人能和我成为好朋友. 大家都知道,智能手表是下一个开发的风口,而这方面的技术又属于前沿,所以和大家分享下An ...