6-1 另类堆栈 (8 分)
**
6-1 另类堆栈 (8 分)
**
在栈的顺序存储实现中,另有一种方法是将Top定义为栈顶的上一个位置。请编写程序实现这种定义下堆栈的入栈、出栈操作。如何判断堆栈为空或者满?
函数接口定义:
bool Push( Stack S, ElementType X );
ElementType Pop( Stack S );
其中Stack结构定义如下:
typedef int Position;
typedef struct SNode *PtrToSNode;
struct SNode {ElementType *Data; /* 存储元素的数组 */Position Top; /* 栈顶指针 */int MaxSize; /* 堆栈最大容量 */
};
typedef PtrToSNode Stack;
注意:如果堆栈已满,Push函数必须输出“Stack Full”并且返回false;如果队列是空的,则Pop函数必须输出“Stack Empty”,并且返回ERROR。
裁判测试程序样例:
#include <stdio.h>
#include <stdlib.h>#define ERROR -1
typedef int ElementType;
typedef enum { push, pop, end } Operation;
typedef enum { false, true } bool;
typedef int Position;
typedef struct SNode *PtrToSNode;
struct SNode {ElementType *Data; /* 存储元素的数组 */Position Top; /* 栈顶指针 */int MaxSize; /* 堆栈最大容量 */
};
typedef PtrToSNode Stack;Stack CreateStack( int MaxSize )
{Stack S = (Stack)malloc(sizeof(struct SNode));S->Data = (ElementType *)malloc(MaxSize * sizeof(ElementType));S->Top = 0;S->MaxSize = MaxSize;return S;
}bool Push( Stack S, ElementType X );
ElementType Pop( Stack S );Operation GetOp(); /* 裁判实现,细节不表 */
void PrintStack( Stack S ); /* 裁判实现,细节不表 */int main()
{ElementType X;Stack S;int N, done = 0;scanf("%d", &N);S = CreateStack(N);while ( !done ) {switch( GetOp() ) {case push: scanf("%d", &X);Push(S, X);break;case pop:X = Pop(S);if ( X!=ERROR ) printf("%d is out\n", X);break;case end:PrintStack(S);done = 1;break;}}return 0;
}/* 你的代码将被嵌在这里 */
输入样例:
4
Pop
Push 5
Push 4
Push 3
Pop
Pop
Push 2
Push 1
Push 0
Push 10
End
//结尾无空行
输出样例:
Stack Empty
3 is out
4 is out
Stack Full
0 1 2 5
//结尾无空行
/* 你的代码将被嵌在这里 */
bool Push( Stack S, ElementType X ){if(S->Top!=S->MaxSize){S->Data[S->Top]=X;S->Top++;return true;}else{printf("Stack Full\n");return false;}}ElementType Pop( Stack S ){int a;if(S->Top!=0){a=S->Top;S->Top--;return S->Data[a];}else{printf("Stack Empty\n");return ERROR;}}
6-1 另类堆栈 (8 分)相关推荐
- 6-2 在一个数组中实现两个堆栈 (8 分)
** 6-2 在一个数组中实现两个堆栈 (8 分) ** 本题要求在一个数组中实现两个堆栈. 函数接口定义: Stack CreateStack( int MaxSize ); bool Push( ...
- 【CCCC】L3-002 特殊堆栈 (30分),nlogn维护序列中位数,STL大乱斗,有重multiset,vector+二分插入
problem L3-002 特殊堆栈 (30分) 堆栈是一种经典的后进先出的线性结构,相关的操作主要有"入栈"(在堆栈顶插入一个元素)和"出栈"(将栈顶元素返 ...
- 函数使用了堆栈的字节超过_单片机地址空间,堆栈理解
data –可寻址片内ram 0x00-0x7f bdata-可位寻址片内ram idata-可寻址片内ram,允许访问全部内部ram 0x00-0xff padata-分页寻址访问片外ram xda ...
- C++ 内存中堆栈讲解
其实我们都知道,计算机内存本来就是一块内存,没有堆栈之分. 堆.栈都是运行程序存放变量和数据的地方. 字符串常量区:存放常量字符串 栈区:存放所有的临时变量和声明 全局常量区:存放定义在函数之外本文件 ...
- 团队程序设计天梯赛考点内容总结(15分以上题)
L1: L1-002 打印沙漏 (20 分) 字符模拟 L1-003 个位数统计 (15 分) 字符模拟 L1-005 考试座位号 (15 分) 模拟 L1-006 连续因子 (20 分) 数学因数分 ...
- java中堆与栈的区别 彻底理解
每一个Java应用都唯一对应一个JVM实例,每一个实例唯一对应一个堆.应用程序在运行中所创建的所有类实例或数组都放在这个堆中,并由应用所有 的线程共享.跟C/C++不同,Java中分配堆内存是自动初始 ...
- 004:STM32启动文件详解及SystemInit函数分析(转)
1 ;先在RAM中分配系统使用的栈,RAM的起始地址为0x2000_0000 2 ;然后在RAM中分配变量使用的堆 3 ;然后在CODE区(flash)分配中断向量表,flash的起始地址为0x080 ...
- 容器,你还只用Docker吗?(上)
本文转自: http://www.dockerinfo.net/3824.html 作者介绍 周晖,Pivotal大中国区云计算首席架构师,有丰富的PaaS云实际建设经验,负责过国内某知名银行已经生产 ...
- 快速定位java系统的线上问题--转
原文地址:http://m.blog.csdn.net/article/details?id=43376943 前言:我们的场景并没有像BAT等大型互联网公司里的系统那么复杂,但是基本上也有一定的规模 ...
最新文章
- UNIX文件mode t详解
- oracle一行变一列,oracle多行变一行
- C语言再学习 -- 位、字节、字、字长、字元的关系
- 测试软件ipc,IPC整机测试工具
- Javascript 引擎工作机制(js层面梳理)
- canoco5主成分分析步骤_R语言 PCA主成分分析
- 堆排序原理及其实现(C++)
- 别吹了!Python程序员正在消失! 资深CTO:你才发现?
- 关于hexo更新到GitHub后博客内容未变问题
- 60-008-022-使用-命令-yarn-session命令
- 使用Idea添加PYTHONPATH的一种方案
- c语言 0x12ed,C语言基本数据类型及运算题库有答案.doc
- 考拉Android统一弹框
- JS客户端学习笔记二
- Hbase安装教程详解
- JS 获取当前页面url(不含参数)
- 物理学 物体的运动力学分析之牛顿三定律 单摆的MATLAB运动仿真(一)
- 计算机硬件选购与市场调查实验报告,计算机组装与维护实训报告范例-20210527010902.docx-原创力文档...
- Visual Studio 2019 编译报错:错误 CS2012 无法打开 obj\Debug\xx.exe”进行写入 --“对路径xx.exe”的访问被拒绝)解决方法
- linux卡死怎么办
热门文章
- 查看本地服务器MYSQL的端口号
- Oracle从零开始2——简单查询
- ajax请求可以延时吗,延时校验AJAX请求
- 怎么查看表用了那个序列_知识分享008:怎样在手机上用萤石云查看海康威视监控录像...
- IOS之block,一点小心得
- bzoj1925: [Sdoi2010]地精部落 [dp]
- 《用户故事与敏捷方法》阅读笔记三
- 工具使用-----Jmeter的基础用法
- ExtJS 4.2 教程-07:Ext.Direct
- 高效程序员常用的工具