**

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 分)相关推荐

  1. 6-2 在一个数组中实现两个堆栈 (8 分)

    ** 6-2 在一个数组中实现两个堆栈 (8 分) ** 本题要求在一个数组中实现两个堆栈. 函数接口定义: Stack CreateStack( int MaxSize ); bool Push( ...

  2. 【CCCC】L3-002 特殊堆栈 (30分),nlogn维护序列中位数,STL大乱斗,有重multiset,vector+二分插入

    problem L3-002 特殊堆栈 (30分) 堆栈是一种经典的后进先出的线性结构,相关的操作主要有"入栈"(在堆栈顶插入一个元素)和"出栈"(将栈顶元素返 ...

  3. 函数使用了堆栈的字节超过_单片机地址空间,堆栈理解

    data –可寻址片内ram 0x00-0x7f bdata-可位寻址片内ram idata-可寻址片内ram,允许访问全部内部ram 0x00-0xff padata-分页寻址访问片外ram xda ...

  4. C++ 内存中堆栈讲解

    其实我们都知道,计算机内存本来就是一块内存,没有堆栈之分. 堆.栈都是运行程序存放变量和数据的地方. 字符串常量区:存放常量字符串 栈区:存放所有的临时变量和声明 全局常量区:存放定义在函数之外本文件 ...

  5. 团队程序设计天梯赛考点内容总结(15分以上题)

    L1: L1-002 打印沙漏 (20 分) 字符模拟 L1-003 个位数统计 (15 分) 字符模拟 L1-005 考试座位号 (15 分) 模拟 L1-006 连续因子 (20 分) 数学因数分 ...

  6. java中堆与栈的区别 彻底理解

    每一个Java应用都唯一对应一个JVM实例,每一个实例唯一对应一个堆.应用程序在运行中所创建的所有类实例或数组都放在这个堆中,并由应用所有 的线程共享.跟C/C++不同,Java中分配堆内存是自动初始 ...

  7. 004:STM32启动文件详解及SystemInit函数分析(转)

    1 ;先在RAM中分配系统使用的栈,RAM的起始地址为0x2000_0000 2 ;然后在RAM中分配变量使用的堆 3 ;然后在CODE区(flash)分配中断向量表,flash的起始地址为0x080 ...

  8. 容器,你还只用Docker吗?(上)

    本文转自: http://www.dockerinfo.net/3824.html 作者介绍 周晖,Pivotal大中国区云计算首席架构师,有丰富的PaaS云实际建设经验,负责过国内某知名银行已经生产 ...

  9. 快速定位java系统的线上问题--转

    原文地址:http://m.blog.csdn.net/article/details?id=43376943 前言:我们的场景并没有像BAT等大型互联网公司里的系统那么复杂,但是基本上也有一定的规模 ...

最新文章

  1. UNIX文件mode t详解
  2. oracle一行变一列,oracle多行变一行
  3. C语言再学习 -- 位、字节、字、字长、字元的关系
  4. 测试软件ipc,IPC整机测试工具
  5. Javascript 引擎工作机制(js层面梳理)
  6. canoco5主成分分析步骤_R语言 PCA主成分分析
  7. 堆排序原理及其实现(C++)
  8. 别吹了!Python程序员正在消失! 资深CTO:你才发现?
  9. 关于hexo更新到GitHub后博客内容未变问题
  10. 60-008-022-使用-命令-yarn-session命令
  11. 使用Idea添加PYTHONPATH的一种方案
  12. c语言 0x12ed,C语言基本数据类型及运算题库有答案.doc
  13. 考拉Android统一弹框
  14. JS客户端学习笔记二
  15. Hbase安装教程详解
  16. JS 获取当前页面url(不含参数)
  17. 物理学 物体的运动力学分析之牛顿三定律 单摆的MATLAB运动仿真(一)
  18. 计算机硬件选购与市场调查实验报告,计算机组装与维护实训报告范例-20210527010902.docx-原创力文档...
  19. Visual Studio 2019 编译报错:错误 CS2012 无法打开 obj\Debug\xx.exe”进行写入 --“对路径xx.exe”的访问被拒绝)解决方法
  20. linux卡死怎么办

热门文章

  1. 查看本地服务器MYSQL的端口号
  2. Oracle从零开始2——简单查询
  3. ajax请求可以延时吗,延时校验AJAX请求
  4. 怎么查看表用了那个序列_知识分享008:怎样在手机上用萤石云查看海康威视监控录像...
  5. IOS之block,一点小心得
  6. bzoj1925: [Sdoi2010]地精部落 [dp]
  7. 《用户故事与敏捷方法》阅读笔记三
  8. 工具使用-----Jmeter的基础用法
  9. ExtJS 4.2 教程-07:Ext.Direct
  10. 高效程序员常用的工具