当前位置: 首页 > news >正文

PTA DS 6-2 另类堆栈 (C补全函数)

6-2 另类堆栈

分数 15

全屏浏览

切换布局

作者 DS课程组

单位 浙江大学

在栈的顺序存储实现中,另有一种方法是将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 

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

// 2024/12/9 OK
bool Push( Stack S, ElementType X )
{if (S->Top == S->MaxSize) {printf("Stack Full\n");} else { S->Data[S->Top ++] = X;}return true;
}ElementType Pop( Stack S )
{if (S->Top == 0) {printf("Stack Empty\n");return ERROR;} else {return S->Data[-- S->Top];}
}

 

http://www.lryc.cn/news/502034.html

相关文章:

  • rk3568之mpp开发笔记mpp移植到开发板
  • Vue解决跨域问题
  • Kubernetes Nginx-Ingress | 禁用HSTS/禁止重定向到https
  • TortoiseGit的下载、安装和配置
  • 如何绕过IP禁令
  • Vue3的provide和inject实现多级传递的原理
  • 使用html2canvas实现前端截图
  • 使用 Python 爬取某网站简历模板(bs4/lxml+协程)
  • 深度学习模型中音频流式处理
  • C语言(字符数组和字符指针)
  • SkyWalking Helm Chart 4.7.0 安装、配置
  • 微搭低代码AI组件单词消消乐从0到1实践
  • 23种设计模式之中介者模式
  • 【Golang】Go语言编程思想(六):Channel,第六节,并发编程模式
  • unity打包web,如何减小文件体积,特别是 Build.wasm.gz
  • go引入skywalking
  • 大华DSS数字监控系统 attachment_downloadAtt.action 任意文件下载漏洞复现
  • qt 封装 调用 dll
  • Python使用Selenium库获取 网页节点元素、名称、内容的方法
  • 系统安全——访问控制访问控制
  • SQL Server 数据库还原到某个时点(完整恢复模式)
  • 埃隆马斯克X-AI发布Grok-2大模型,快来体验~
  • Python工厂设计模式:简化对象创建
  • 【隐私计算篇】隐私集合求交(PSI)原理深入浅出
  • 工作中常用的8种设计模式
  • Qwen 论文阅读记录
  • 自动驾驶:百年演进
  • SSM 校园一卡通密钥管理系统 PF 于校园图书借阅管理的安全保障
  • 什么叫中间件服务器?
  • 【docker】12. Docker Volume(存储卷)