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

PTA 6-7 在一个数组中实现两个堆栈

本题要求在一个数组中实现两个堆栈。

函数接口定义:

Stack CreateStack( int MaxSize ); bool Push( Stack S, ElementType X, int Tag ); ElementType Pop( Stack S, int Tag );

其中Tag是堆栈编号,取1或2;MaxSize堆栈数组的规模;Stack结构定义如下:

typedef int Position; struct SNode { ElementType *Data; Position Top1, Top2; int MaxSize; }; typedef struct SNode *Stack;

注意:如果堆栈已满,Push函数必须输出“Stack Full”并且返回false;如果某堆栈是空的,则Pop函数必须输出“Stack Tag Empty”(其中Tag是该堆栈的编号),并且返回ERROR。

裁判测试程序样例:

#include <stdio.h> #include <stdlib.h> #define ERROR 1e8 typedef int ElementType; typedef enum { push, pop, end } Operation; typedef enum { false, true } bool; typedef int Position; struct SNode { ElementType *Data; Position Top1, Top2; int MaxSize; }; typedef struct SNode *Stack; Stack CreateStack( int MaxSize ); bool Push( Stack S, ElementType X, int Tag ); ElementType Pop( Stack S, int Tag ); Operation GetOp(); /* details omitted */ void PrintStack( Stack S, int Tag ); /* details omitted */ int main() { int N, Tag, X; Stack S; int done = 0; scanf("%d", &N); S = CreateStack(N); while ( !done ) { switch( GetOp() ) { case push: scanf("%d %d", &Tag, &X); if (!Push(S, X, Tag)) printf("Stack %d is Full!\n", Tag); break; case pop: scanf("%d", &Tag); X = Pop(S, Tag); if ( X==ERROR ) printf("Stack %d is Empty!\n", Tag); break; case end: PrintStack(S, 1); PrintStack(S, 2); done = 1; break; } } return 0; } /* 你的代码将被嵌在这里 */

输入样式:

5 Push 1 1 Pop 2 Push 2 11 Push 1 2 Push 2 12 Pop 1 Push 2 13 Push 2 14 Push 1 3 Pop 2 End

输出样式:

Stack 2 Empty Stack 2 is Empty! Stack Full Stack 1 is Full! Pop from Stack 1: 1 Pop from Stack 2: 13 12 11

代码:

//创建栈 Stack CreateStack( int MaxSize ){ Stack res = (Stack)malloc(sizeof(Stack)); res -> Data = (int *)malloc(sizeof(int) * MaxSize); res -> Top1 = -1; res -> Top2 = MaxSize; res -> MaxSize = MaxSize; return res; } //输入数据 bool Push( Stack S, ElementType X, int Tag ){ if(S->Top1 + 1 == S->Top2){ printf("Stack Full\n"); return false; } if(Tag == 1){ S->Data[++S->Top1] = X; }else if(Tag==2){ S->Data[--S->Top2] = X; } return true; } //输出数据 ElementType Pop( Stack S, int Tag ){ if(Tag == 1){ if(S->Top1 == -1){ printf("Stack %d Empty\n",Tag); return ERROR; } return S->Data[S->Top1--]; } if(Tag == 2){ if(S->Top2 == S->MaxSize){ printf("Stack %d Empty\n",Tag); return ERROR; } return S->Data[S->Top2++]; } }
http://www.jsqmd.com/news/482872/

相关文章:

  • Ubuntu 20.04下A-LOAM环境搭建全攻略:从依赖安装到Kitti数据集实战
  • GLM-4.7-Flash保姆级部署教程:5分钟用Ollama搞定最强30B模型
  • 大模型时代,3阶9步快速崛起!告别死记硬背,职场AI高手都在用这套方法
  • EasyAnimateV5-7b-zh-InP在VSCode中的开发环境配置
  • REFramework:重塑游戏体验的非侵入式引擎增强方案
  • 打卡信奥刷题(2960)用C++实现信奥题 P5931 [清华集训 2015] 灯泡
  • 机器人控制必看:旋转矩阵在六轴机械臂运动规划中的5个坑
  • WaveTools:优化《鸣潮》游戏体验的开源工具创新解决方案
  • Chord多模态检索:Elasticsearch集成方案
  • 安卓毕设题目推荐:基于效率提升的选题策略与技术实现路径
  • Phi-3-vision-128k-instruct新手教程:无需CUDA基础的图文对话模型上手
  • 从单兵作战到团队协作:Coze多Agent模式构建复杂智能体的实战解析
  • Halcon仿射矩形实战:用rectangle2中点坐标实现高精度物体对齐(附完整代码)
  • 【MOOC】华中科技大学计算机组成原理慕课精讲-第四章-存储系统核心概念与真题解析
  • 车载以太网转换器选购指南:从100BASE-T1到1000BASE-T1的8种方案对比
  • 赣州章贡区琴行哪家好
  • 软件测试Bug篇
  • 手把手教你用ISCE+mintpy处理Sentinel-1数据(附完整参数配置)
  • 维修电工必看:CODESYS SFC顺序指令实战Demo详解(附完整代码)
  • 【LangChain专栏】Retrieval 高级检索策略
  • Chord - Ink Shadow 代码生成潜力探索:辅助编写基础Python爬虫脚本
  • 从MySQL慢查询到CPU 100%:一次IO等待引发的性能故障复盘
  • 热键冲突智能诊断系统:破解Windows快捷键资源竞争的技术方案
  • MybatisPlus + ShardingSphere JDBC批量插入不返回主键?5.2.1版本终极解决方案
  • 避坑指南:Vivado多层IP嵌套时模块重名的3种解决方案(附IP-XACT文件修改示例)
  • 【2026年最新600套毕设项目分享】springboot河南传统文化的展示与交流网站平台(14153)
  • 线性规划(Linear Programming, LP)
  • 基于微信小程序的勤工俭学系统设计与实现
  • Phi-3-vision-128k-instruct代码实例:Python调用vLLM API实现图片问答
  • SpringBoot新手避坑指南:从零搭建Web项目到Thymeleaf模板实战