6-2 另类堆栈 (15分)

2024-02-20 14:08
文章标签 15 堆栈 另类

本文主要是介绍6-2 另类堆栈 (15分),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

6-2 另类堆栈 (15分)

在栈的顺序存储实现中,另有一种方法是将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 
ool Push( Stack S, ElementType X )
{if(S->Top==S->MaxSize){printf("Stack Full\n");return false;}else {S->Data[(S->Top)]=X;S->Top++;return true;}
}
ElementType Pop( Stack S )
{if(S->Top==0){printf("Stack Empty\n");return ERROR;}else return S->Data[--(S->Top)];
}

这篇关于6-2 另类堆栈 (15分)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/728473

相关文章

剑指Offer—编程题15(链表中倒数第k个结点)

题目:输入一个链表,输出该链表中倒数第k 个结点.为了符合大多数人的习惯,本题从1 开始计数,即链表的尾结点是倒数第1 个结点.例如一个链表有6 个结点,从头结点开始它们的值依次是1 、2、3、4、5 、6。这个个链表的倒数第3 个结点是值为4 的结点. public static class ListNode {int value;ListNode next;} 解题思路:

C语言从入门到进阶(15万字总结)

前言: 《C语言从入门到进阶》这本书可是作者呕心沥血之作,建议零售价1元,当然这里开个玩笑。  本篇博客可是作者之前写的所有C语言笔记博客的集结,本篇博客不止有知识点,还有一部分代码练习。 有人可能会问,作者不会是cv战士吧!作者在这里回答大家,有cv战士的成分,但不完全是。我是将之前博客冗余的部分删除。有句话叫取其精华,去其糟粕当嘛!当然作者除了删除冗余部分还会修改一小部分,因为之前

找猴王:15只猴子围成一圈从1报数到7的出局,最后谁是猴王。

第一种: package 找猴王;public class Test {public static void main(String[] args) {int n=15;//15只猴子int m=7;//数到7的就出局int count=1;//count为计报数的值,从1开始,7结束int size=n;//size的值从15变到1,到1时就找到了猴王(每数到7的就出局所以会最终剩余1)i

Kimichat使用案例027:有效使用 kimichat 的15个高级技巧

文章目录 一、明确具体:表达清晰、避免使用模糊措辞。二、提供背景信息:提供相关的细节和背景信息。三、每次只问一个问题四、设定明确的标准五、要求解释六、管理期望七、确定问题类型八、调整语言水平九、提供范例十、及时提供反馈十一、明确对话角色十二、 保持对话的连贯性十三、一步步思考十四、提示语结构化:角色+背景+任务十五、控制输出格式 一、明确具体:表达清晰、避免使用模糊措辞。 案例:

linux设备上的Onvif 实现4:成功编译gsoap 2.8.15

前言     本说明示例是gsoap 2.8.15     gsoap工具包中支持的平台是:linux386、macosx、win32,没有提供嵌入式arm平台,本文将指导完成交叉工具编译生成嵌入式平台工具。 工作目录:\\192.168.0.234\work\gaoht\gsoap   \gsoap-2.8\   解压后的目录   \target\      编译后的安装目录 交叉编译工具:T

极客新闻——15、软件测试自动化的最新趋势

本文笔记全部来自《极客新闻》——新鲜的技术资讯、权威的趋势剖析、别样的技术洞察 过去几年,QA行业的一个持续趋势是测试自动化和持续测试。这一趋势也将在2019年继续下去。虽然CI/CD、DevOps和测试框架在未来一年仍然将是突出的主题,但一些新技术正在影响我们测试的内容和测试方法。 1、物联网测试 物联网正在对测试领域产生显著的影响。越来越多的基于Python和C/C++的测试框架执行

【Rust日报】2021-01-15 Nightly的Reference已上线Const Generics的文档

今天开始Rust日报尝试新的方式组织内容,分为如下几个板块: News:当天官方或社区有关Rust的最新新闻Article:当天社区新发布的值得阅读的Rust博客文章Release:当天社区crate或相关工具版本发布或更新Miscellaneous:其他内容 有任何问题或建议欢迎留言反馈,大家一起让Rust日报越来越好! News Nightly的Reference已上线Const Gener

【Rust日报】2021-05-15 你在rust中无法做的事,以及该怎么做

RiteRaft:一个用rust写的raft框架,使用160行代码构建raft服务 ritedb / riteraft是一个基于Raft共识算法的快速开发和验证分布式应用程序的实用框架。 Raft共识算法模块由tikv/raft-rs支持,并使用Tokio + Tonic + Prost提供gRPC服务。您可以在examples文件夹下找到基本的hashstore键值服务,然后尝试一下。 文章链

【Rust 日报】2021-08-01 voila:另类处理文件的方式

voila:另类处理文件的方式 Voila 是一种通过 CLI 工具启动的特定领域语言,用于以快速可靠的方式处理大量文件和目录。 安装需要切换到 nightly 版本: $ rustup default nightly$ cargo install voila 一些使用实例: # 删除创建日期在 2020年1月1日 之后的所有文件$ voila ./backup "@creation=dat

【Rust日报】2021-11-15 SIMD模块 nightly 已可用

std::simd nightly 可用 可以移植的 SIMD 模块. 该模块提供了一个可移植的不绑定于任何硬件架构的 SIMD 操作的抽象。目前 nightly-only. 原文链接: https://doc.rust-lang.org/nightly/std/simd/index.html 静态分析器 Rudra 在 Rust crates 中找到超过 200 个内存安全问题 Rudra是一