在一个数组中实现两个堆栈

6-11 在一个数组中实现两个堆栈 (20 分)
本题要求在一个数组中实现两个堆栈。

函数接口定义:

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

//两栈共享空间
//S->Top1 + 1 == S->Top2栈满
Stack CreateStack( int MaxSize )
{struct SNode *S=NULL;S=(struct SNode *)malloc(sizeof(struct SNode));//为S这个节点开辟空间S->Data=(int *)malloc(MaxSize*sizeof(int));//为S中的数据开辟MaxSize的空间S->Top1=-1;//栈1空,栈顶指针S->Top2=MaxSize;//栈2空,栈顶指针S->MaxSize=MaxSize;return S;
}
bool Push( Stack S, ElementType X, int Tag )//Tag是堆栈编号
{if(S->Top2 - S->Top1==1){printf("Stack Full\n");return false;}else{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;}else{return S->Data[(S->Top1)--];}}else if(Tag==2){if(S->Top2==S->MaxSize){printf("Stack %d Empty\n",Tag);return ERROR;}else{return S->Data[(S->Top2)++];}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/312488.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

逻辑结构的四种基本关系

逻辑结构的四种基本关系 1集合结构&#xff1a;数据元素之间除了“属于同一集合”的关系外&#xff0c;没有其他关系 2线性结构&#xff1a;数据元素之间存在一对一的关系 3树结构&#xff1a;数据元素之间存在一对多的关系 4图结构&#xff1a;数据元素之间存在多对多的关系

轻量级开源小程序SDK发车啦

Magicodes.WxMiniProgram.Sdk轻量级微信小程序SDK&#xff0c;支持.NET Framework以及.NET Core。目前已提供Abp模块的封装&#xff0c;支持开箱即用。地址&#xff1a;https://github.com/xin-lai/Magicodes.WxMiniProgram.SdkNuget新的包主要功能轻量级微信小程序SDK&#xf…

单链表基础知识详解

//通常使用结构的嵌套来定义单向链表结点的数据类型 typedef struct Node *PtrToNode;//将Node命名为PtrToNode struct Node {ElementType Data;//存储结点数据PtrToNode Next&#xff1b;//指向下一个结点的指针 }; //结构类型Node中的Next分量又是该结构类型的指针&#xff0…

[译文] C# 8 已成旧闻, 向前, 抵达 C# 9!

C# 8 is old news. Onward, to C# 9! (C# 8 已成旧闻, 向前, 抵达 C# 9!)Did you know that planning is already underway for the ninth version of the C# language?第九版 C# 语言已经在开发中了, 你晓得伐?Now, to be fair, this has been in the planning phases long,…

考察对顺序表的理解

顺序表是在计算机内存中以数组的形式保存的线性表 线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素、使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中&#xff0c;即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻…

2020年你应该学习 .Net Core

一、什么是.NET Core.NET Core是一个开源通用的开发框架&#xff0c;支持跨平台&#xff0c;即支持在Window&#xff0c;macOS&#xff0c;Linux等系统上的开发和部署&#xff0c;并且可以在硬件设备&#xff0c;云服务&#xff0c;和嵌入式/物联网方案中进行使用。.NET Core的…

对表头指针、表头结点,单链表删除的理解

https://blog.csdn.net/weixin_46678290/article/details/105309156

C# WPF发票打印

C# WPF发票打印内容目录实现效果业务场景编码实现本文参考源码下载1.实现效果发票界面PDF打印结果2.业务场景界面作为发票预览&#xff0c;按客户需求可打印成发票纸张给客户。3.编码实现3.1 添加Nuget库站长使用 .Net Core 3.1 创建的WPF工程&#xff0c;创建“Invoice”解决方…

对全局变量,static静态变量的理解

如果所有的变量按照下面的程序进行定义和声明&#xff0c;那么在main()函数中所有可用的变量为 &#xff08;&#xff09;。 void fun(int x) {static int y;……return; } int z; void main( ) {int a,b;fun(a);…… }A.x,y B.x,y,z C.a,b,z D.a,b,x,y,z static静态变量的值在…

dotNET知音,19年归档

2019年下半年开通公众号&#xff0c;尝试着分享和技术交流&#xff0c;也很高兴认识很多NETer同行。为了方便阅读&#xff0c;进行归档&#xff0c;如果之前有错过的文章&#xff0c;这是一个很好的补课机会。.NETCore3.0&#xff1a;《.Net Core3.0 配置Configuration》《.Net…

顺序表和链表的优缺点理解

若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算&#xff0c;则利用哪种存储方式最节省时间&#xff1f;D A.双链表 B.单循环链表 C.带头结点的双循环链表 D.顺序表 想要存取任一指定序号的元素&#xff0c;链表实现这个功能的代价很大 本来顺序表的…

阿里如何应对亿级高并发大流量?如何保障高可用和稳定性!

作者&#xff1a;丁浪&#xff0c;目前在创业公司担任高级技术架构师。曾就职于阿里巴巴大文娱和蚂蚁金服。具有丰富的稳定性保障&#xff0c;全链路性能优化的经验。架构师社区特邀嘉宾&#xff01;阅读本文&#xff0c;你将会收获&#xff1a; 高并发、大流量场景的常见问题和…

中缀转后缀

从中序表达式 转换为 后序表达式 例题&#xff1a; 利用栈对表达式19/(8-5)*4求值的过程中&#xff0c;操作数栈的最大容量是多少&#xff1f;&#xff08;B &#xff09;。 A.3 B.4 C.5 D.2 操作数栈&#xff1a;先是/(- &#xff0c; 然后遇到)&#xff0c;则为/ &#xff0…

动手造轮子:写一个日志框架

动手造轮子&#xff1a;写一个日志框架Intro日志框架有很多&#xff0c;比如 log4net / nlog / serilog / microsoft.extensions.logging 等&#xff0c;如何在切换日志框架的时候做到不用修改代码&#xff0c;只需要切换不同的 loggingProvider 就可以了&#xff0c;最低成本的…

对循环队列的理解

循环队列存储在数组A[0…n-1]中&#xff0c;其头尾指针分别为f和r&#xff0c;头指针f总是指向队头元素&#xff0c;尾指针r总是指向队尾元素的下一个位置&#xff0c;则元素e入队时的操作为&#xff08;B &#xff09;。 A.A[r]e; rr1 B.A[r]e; r(r1)%n C.A[r]e;r(r1)%(n1) D.…

【C】@程序员,我们送给你一个成熟的Excel导入导出组件

程序员的显著特点有一天跟一位同事跟我闲聊&#xff0c;讨论起过去若干年软件行业的感受&#xff0c;他问了个问题&#xff1a;你觉得一个好的软件工程师最显著的特点是什么&#xff1f;我想了一会&#xff0c;说&#xff1a;大概是坐得住吧。某种意义上来说&#xff0c;在互联…

SummerBoot,将SpringBoot的先进理念与C#的简洁优雅合二为一

哈哈哈哈&#xff0c;大家好&#xff0c;我就是高产似母猪的三合&#xff0c;好久没写博客了&#xff0c;因为最近几个月在不断的加班&#xff0c;加班时长平均每个月120小时以上。今天是2020年的第一天&#xff0c;作为一条程序汪&#xff0c;觉得不做点啥好像对不起这个特别有…

树的度,结点,叶子结点,二叉树

设树T的度为4&#xff0c;其中度为1、2、3、4的结点个数分别为4、2、1、1。则T中有多少个叶子结点&#xff1f; A.4 B.6 C.8 D.10 一棵含有n个结点的树&#xff0c;有n-1个分支&#xff0c;即 n 14 22 31 41 1 16; 又由于 n n0 n1 n2 n3 n4 n0 8; n0 8 16&#…

C#刷遍Leetcode面试题系列连载(6):No.372 - 超级次方

点击蓝字“dotNET匠人”关注我哟加个“星标★”&#xff0c;每日 7:15&#xff0c;好文必达&#xff01;前文传送门:C# 刷遍 Leetcode 面试题系列连载&#xff08;1&#xff09; - 入门与工具简介C#刷遍Leetcode面试题系列连载&#xff08;2&#xff09;: No.38 - 报数C#刷遍Le…