openjudge数据结构练习集 字符栈的实现

openjudge 排队游戏(stack) 排队游戏 查看提交统计提问 总时间限制: 1000ms 内存限制: 65536kB 描述 在幼儿园中,老师安排小朋友做一个排队的游戏。首先老师精心的把数目相同的小男孩和小女孩编排在一个队列中,每个小孩按其在队列中的位置发给一个编号(编 号从0开始)。然后老师告诉小朋友们,站在前边的小男孩可以和他后边相邻的小女孩手拉手离开队列,剩余的小朋友重新站拢,再按前 阅读详情

字符栈的实现

总时间限制: 
1000ms
内存限制: 
1024kB
描述

本程序定义了一个有头结点的链栈,栈的数据元素类型是字符型。并实现了它的创建,入栈,出栈,获取栈顶元素,判断栈是否为空,销毁栈等操作。为了测试这些操作,在主函数中读入一些字符,当读入回车符时结束读入。利用栈反向输出这些字符。 学习要求:
1、理解所有代码行的含义和作用,能像我上课在黑板上画的图一样,自己在纸上画出程序的执行过程。

2、能在不看我的代码的情况下,写出createStack,push, pop,top,empty,destroy函数的定义。

/*本程序定义了一个有头结点的链栈,栈的数据元素类型是字符型。
并实现了它的创建,入栈,出栈,获取栈顶元素,判断栈是否为空,销毁栈等操作。
为了测试这些操作,在主函数中读入一些字符,当读入回车符时结束读入。利用栈反向输出这些字符。
 学习要求:
 1、理解所有代码行的含义和作用,能像我上课在黑板上画的图一样,自己在纸上画出程序的执行过程。
 2、能在不看我的代码的情况下,写出createStack,push, pop,top,empty,destroy函数的定义。
*/
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

//数据结点类型
typedef struct node
{
    char data;//结点中存储的数据
    struct node *link;//指向下一个结点的指针
}node;

//栈的头结点类型
typedef struct Stack
{
    int count; //栈中的元素个数,初始值为0
    node *top; //指向栈顶的指针,当栈空时次指针为NULL
}Stack;

//创建栈,返回指向头结点的指针
Stack* createStack();
//入栈,向指针myStack所指向的栈中压入元素x
//入栈成功返回true,否则返回false
bool push(Stack *myStack, char x);
//出栈,把myStack指向的栈的栈顶元素弹栈
//出栈成功返回true,否则返回false
bool pop(Stack *myStack);
//获取指针myStack所指向栈的栈顶元素。
//获取成功返回true,否则返回false。
//当前栈顶的值通过指针p传回给调用者
bool top(Stack *myStack, char *p);
//判断指针myStack指向的栈是否为空。
//栈空返回true,否则返回false。
bool empty(Stack *myStack);
//销毁指针myStack所指向的栈
bool destroy(Stack *myStack);

int main(void)
{
    Stack *head; //定义指向栈结构的指针
    char c;
    head = createStack(); //创建一个空栈
    c = getchar(); //读入第1个字符
    while (c != '\n')
    {//当读入的字符不是换行符时进入循环
        push(head, c); //字符变量C的值入栈
        c = getchar(); //读取下一个c
    }
    while (!empty(head))
    {//当栈不为空时进入循环
        top(head, &c); //获取当前栈顶元素,由变量c得到栈顶元素的值
        printf("%c\n", c); //输出变量c的值到屏幕
        pop(head); //出栈1次
    }
    destroy(head);//销毁栈空间
    return 0;
}

//请写出6个函数的定义
// 在此处补充你的代码
输入
一行字符,以回车符结束。
输出
反向输出每个字符,每个字符占1行。
样例输入
abcd
样例输出
d
c
b
a
Stack * createStack()
{
	Stack *L = (Stack *)malloc(sizeof(Stack));
	L->count = 0;
	L->top = NULL;//栈为空,top为空
	return L;//返回L的地址
}

bool push(Stack * S, char x)	//头插法
{
	node *pnew = (node *)malloc(sizeof(node));
	pnew->data = x; //把输入的值带入结构体内储存
	pnew->link = S->top;	//后继为空
	S->top = pnew;	//新的节点为头
	S->count++;// 元素加一
	return true;
}

bool pop(Stack * S)
{
	node *p = S->top;
	S->top = S->top->link;
	free(p);
	S->count--;
	return true;
}

bool top(Stack * S, char * p)
{
	if(S->top != NULL)
	*p = S->top->data;
	return true;
}

bool empty(Stack * S)
{
	if (S->top != NULL)
		return false;
	else
		return true;
}

bool destroy(Stack * S)
{
	free(S);
	return false;
}


信息学奥赛刷题神器:手把手教你用OpenJudge高效练习‘谁拿了最多奖学金’ 本文详细介绍了如何利用OpenJudge和洛谷高效备战信息学奥赛,以经典题目‘谁拿了最多奖学金’为例,涵盖平台选择、代码检查、评测解读、优化路径等关键环节。通过科学的训练方法和错题整理,帮助选手提升算法思维和实战能力,特别适合NOIP和NOI参赛者。 阅读详情

相关推荐

ksz9031 mmd读取不了_ZYNQ. LwIP.PHY.KSZ9031RNX

新一块板子米尔科技的z-turn 使用的PHY芯片是Micrel的 KSZ9031RNX 而不是zedboard上的Marvell的。直接使用lwip的echo server demo时会报错 , 无法启动。在网上找了很久终于找到几篇关于这个问题的文章。修改PHY的驱动xemacpsif_physpeed.c文件该芯片的PHY Identifier 是 0x0022bsp设置中修改参数以提速MEM...

weixin_39626298的博客 924

队列基本操作

描述 输入若干个整数(小于50个),整数共有四种类型,不同类型的整数代表不同操作。说明如下: 1、[10,99]之间的整数:将该整数入队。 2、-1:队首整数出队。 3、-2:显示队列所有整数。 4、-3:输入结束。 说明:采用链队列实现,必须有队列初始化函数、入队函数、出队函数。 输入 第一行若干整数(必须满足上述四种类型要求),以-3结束。 输出 输出队列中所有整数。 样例输入 13 25 90 -1 12 -2 -1 45 78 30 -2 -3 样例输出...

m0_65604564的博客 446

图像修复黑科技:对比BM3D/DnCNN等5种去噪器在PNP框架中的实战效果

本文深度评测了BM3D、DnCNN等五款主流去噪器在即插即用(PnP)优化框架中的实战表现。通过量化指标、视觉对比及超分等泛化任务测试,揭示了深度学习模型在性能与收敛速度上的优势,并为不同应用场景提供了选型指南与工程化建议。

weixin_29065959的博客 369

第五关

代码

m0_65251785的博客 372

手把手教你用CubeMX给GD32F103点灯、调串口(附完整工程)

本文详细介绍了如何使用CubeMX为GD32F103开发板配置GPIO点灯和串口通信,包含完整的工程创建、代码构建和测试流程。特别强调了GD32与STM32的差异点及常见避坑技巧,帮助开发者快速上手GD32开发。

weixin_42566424的博客 313

Multisim新手必看:从零搭建数字时钟仿真电路(附完整原理图)

本文详细介绍了如何使用Multisim从零开始搭建数字时钟仿真电路,涵盖晶振电路设计、计数电路实现、校时功能配置等关键步骤。通过完整的原理图和实用技巧,帮助新手快速掌握Multisim仿真设计,实现精准的数字时钟功能。

ios99的博客 328

利用C语言,从键盘输入若干个整数(数据个数应少于50),其值在0到4的范围内,用-1,作为输入结束的标志。统计每个整数的个数。

利用C语言,从键盘输入若干个整数(数据个数应少于50),其值在0到4的范围内,用-1,作为输入结束的标志。统计每个整数的个数。

2301_76375498的博客 4251

【AI智能体】Dify 基于知识库搭建智能客服问答应用详解

Dify 基于知识库搭建智能客服问答应用详解

congge 6929

C语言、定义一个字符型链栈(使用Visual C++6.0编写)

定义一个字符型链栈。 编写以下操作函数 初始化栈:函数名InitLinkStack(); 判别栈空:函数名IsEmptyStack(); 进栈:函数名Push(); 出栈:函数名Pop; 显示栈顶元素值:函数名DispStackTop(); 编写主函数:显示菜单,并可根据菜单命令调用相应操作函数。 要求: 不允许使用typedef char Data...

m0_62659797的博客 1688

QT如何使用CTK插件搭建应用程序框架?

CTK框架,QT框架,插件系统

cs821984831的博客 735

[ vulhub漏洞复现篇 ] ActiveMQ反序列化漏洞复现(CVE-2015-5254)

Apache ActiveMQ是美国阿帕奇(Apache)软件基金会所研发的一套开源的消息中间件,它支持Java消息服务、集群、Spring Framework等。由于ActiveMQ是一个纯Java程序,因此只需要操作系统支持Java虚拟机,ActiveMQ便可执行。Apache ActiveMQ 5.13.0之前5.x版本中存在安全漏洞,该漏洞源于程序没有限制可在代理中序列化的类。......

qq_51577576的博客 4444

【数据结构】栈的顺序存储(整型栈、字符栈)

一、栈的结构定义 二、字符栈的初始化、入栈、出栈、判断是否栈为空、获取栈顶元素、获取栈的当前元素个数等操作 三、整型栈的初始化、入栈、出栈、判断是否栈为空、获取栈顶元素、获取栈的当前元素个数等操作

kokunka的博客 349

智能能效管家:基于 ESP32 的智能插座设计与精细化功耗管理实现

针对传统插座无法远程控制、功耗监测缺失、能源浪费严重等问题,本文设计一款基于 ESP32 主控芯片的智能插座。该系统集成 WiFi 无线通信、交流功耗采集、继电器通断控制模块,实现四大核心功能。硬件采用模块化选型与安全接线设计,软件基于 Arduino-ESP32 框架开发,搭载 Mqtt 通信协议与功耗算法,可通过手机 / 云端实时管控设备,有效提升用电安全性与能源利用率。:ESP32;智能插座;功耗管理;远程控制;能耗监测。

weixin_42300449的博客 101

【数据结构】栈和队列

1.栈 栈的概念及结构 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。 压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。 出栈:栈的删除操作叫做出栈。出数据也在栈顶。 栈的实现 栈的实现一般可以使用数组或者链表实现,相对而言数组的结构实现更优一些。 因为数组在尾上插入数据的代价比较小。 ...

weixin_47132900的博客 1038

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

数据结构与算法MOOC-第四章字符串练习题解析汇总

数据结构与算法MOOC-第四章字符串练习题解析汇总 1:合格的字符串 OpenJudge-合格的字符串 2:去除C程序中的注释 OpenJudge-去除C程序中的注释 3:全在其中 POJ 938/UVA 10340-All in All(全在其中) 4:字符串乘方 KMP-(POJ 2406)Power Strings[字符串乘方] 5:英语数...

[SZU_Crayon] 2286

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

NOI openjudge题库(2024.11.19)

NOI openjudge题库(2024.11.19)

青少年趣味编程 2200

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

openjudge物质分解记录

题目很长: 6:物质分解记录 查看提交统计提问 总时间限制: 60000ms 内存限制: 131064kB 描述 对 物质分解记录 的结构进行统计分析。 例如: 给出一份 物质分解记录。 Material_1 { Material_2 { Material_3                 Material_4 Materi

null 2243

括号匹配openjudge c语言,OpenJudge计算概论-扩号匹配问题【这个用到了栈的思想】...

/*======================================================================扩号匹配问题总时间限制: 1000ms 内存限制: 65536kB描述在某个字符串(长度不超过100)中有左括号、右括号和大小写字母;规定(与常见的算数式子一样)任何一个左括号都从内到外与在它右边且距离最近的右括号匹配。写一个程序,找到无法匹配的左括号和右...

weixin_39554170的博客 288

OpenJudge解题方法论:如何用‘石头剪刀布‘案例掌握字符串处理的核心技巧

本文通过OpenJudge平台上的'石头剪刀布'案例,深入解析信息学竞赛中字符串处理的核心技巧。从基础实现到高级优化,涵盖字符串比较、条件判断和算法优化等多个方面,帮助竞赛选手掌握高效编程方法,提升解题能力。特别适合信息学奥赛和NOI参赛者学习参考。

f0g1h2的博客 604

数据结构C++语言版 -- 栈和队列

大二学生的 C++数据结构有部分Openjudge提交的代码没有删除 邮箱:liu_772021@yeah.net 欢迎交流讨论~ 有用的话,点赞留言 ``` // // main.cpp // Stack and Queue // // Created by Liu_77 on 2021/12/15. // #include <iostream> #include <cstring> using namespace std; #define MAXSIZ.

catlv77的博客 673

Python入门习题(84)——OpenJudge百练习题:出现两次的字符

OpenJudge百练第4106号习题:出现两次的字符题目描述解题思路参考答案测试用例小结 题目描述 来源 OpenJudge网站 —— 百练习题集-第4106号习题 要求 总时间限制: 3000ms 单个测试点时间限制: 1000ms 内存限制: 65536kB 描述 给定一个字符串,求字符串中恰好出现2次的第一个字符。 输入 第一行是一个正整数n(int范围),表示共有n个字符串。 下面n行,...

yedouble的专栏 617

OpenJudge | 字符串乘方

总时间限制: 3000ms 内存限制: 65536kB。

Mryan2005的博客 952

【OpenJudge题集目录】MOOC课程程序设计与算法完整版

本课程专为初学者设计,按照教材的章节结构进行知识点分类,确保每个知识点和章节都配有相应的练习题。从基础的输入输出操作开始,逐步深入到变量、常量、条件选择、循环控制、函数以及数组等概念,通过实践练习来巩固和提升你的编程基础。

优快云 精品推荐 2495

从‘统计字符数’到理解哈希表:用OpenJudge一道题讲透散列的核心思想

本文通过OpenJudge上的'统计字符数'题目,深入浅出地讲解了哈希表的核心思想与应用。从ASCII直接映射到字母偏移映射,逐步揭示散列函数的设计原理与优化策略,帮助读者理解信息学奥赛中数据结构的关键技术。

weixin_28723171的博客 341

建立二叉树A【openjudge】

总时间限制: 1000ms 内存限制:65535kB 描述 给出一颗二叉树根节点到各叶子节点的路径,建立这颗二叉树,输出中序遍历的结果。 输入第一行输入一个整数t,代表测试数据的组数。 对于每组测试数据,第一行输入一个整数n,代表二叉树根节点到各叶子节点的路径数目。 随后输入n行,每行包含一个字符串S, 代表从根节点走向对应叶子节点的路径。 路径中每个节点用

果冻虾仁 1559

OPENJUDGE 1696:逆波兰表达式

OPENJUDGE 1696:逆波兰表达式 题目 描述描述 逆波兰表达式是一种把运算符前置的算术表达式,例如普通的表达式2 + 3的逆波兰表示法为+ 2 3。逆波兰表达式的优点是运算符之间不必有优先级关系,也不必用括号改变运算次序,例如(2 + 3) * 4的逆波兰表示法为* + 2 3 4。本题求解逆波兰表达式的值,其中运算符包括+ - * /四个。 输入 输入为一行,其中运算符和运算数...

cosvae的博客 804
上一篇: openjudge数据结构练习集 反向输出整数序列
下一篇: openjudge数据结构练习集 队列基本操作
beforeevery
博客等级 码龄9年 9粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值