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参赛者。 阅读详情

相关推荐

VSAN数据救援实战:当26个虚拟机突然不可访问时我们做了什么?

本文深度复盘了一次由运维操作失误引发的VMware vSAN存储危机,导致26个虚拟机数据不可访问的实战救援过程。文章详细剖析了vSAN脑裂状态的诊断方法,分享了在官方支持受限时,如何结合社区智慧与自主分析,通过精准的底层命令干预和状态推理,最终成功恢复全部数据的破局思路与操作细节,为vSAN数据救援提供了宝贵经验。

weixin_35749786的博客 237

队列基本操作

描述 输入若干个整数(小于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

OpenEuler内核编译及替换

一、内核源码下载 在gitee上下载OpenEuler内核源码 下载地址 选择需要的内核版本源码压缩包进行下载 二、内核编译 1.解压缩 将下载好的源码进行解压 tar xvf openeuler-kernel-4.19.90-2107.1.0.tar.gz 2.清理源代码树 解压后得到一个名为kernel的内核源码文件夹,进入后执行命令 make mrproper 清理过去内核编译产生的config,第一次编译时可不执行此命令 3.生成内核配置文件.config 先将将系统原配置文件拷贝过来,原

m0_56602092的博客 2万+

第五关

代码

m0_65251785的博客 372

数学建模国赛C题实战:从数据预处理到模型优化的完整流程(附Python代码)

本文系统讲解了数学建模国赛C题的完整实战流程,涵盖从数据预处理、模型选择与构建到优化与结果可视化的关键步骤。文章重点分享了如何利用Python进行高效的数据清洗、特征工程,并提供了多种机器学习模型的实现代码与对比验证方法,旨在帮助参赛者构建逻辑清晰、结果可靠的解决方案。

weixin_29079643的博客 293

【NLP】语言模型的发展历程 (1)

N-gram模型是一种基于统计语言模型的文本分析算法,它用于预测文本中下一个词出现的概率,基于前面出现的n-1个词的序列。这里的n代表序列中元素的数量,因此称为N-gram。Unigram:N=1,每个单词的出现概率独立计算,不考虑上下文。Bigram:N=2,基于前一个单词预测当前单词的联合概率模型。Trigram:N=3,考虑前两个单词来预测当前单词的联合概率模型,更复杂但可能更准确。

酒酿小圆子呀~ 1668

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

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

2301_76375498的博客 4251

深入理解「二进制掩码」:从原理到实践

二进制掩码本质上是一个二进制数,用于通过位操作(如与、或、非、异或等)选择性地操作目标数据的某些位。掩码的每一位(bit)可以看作一个“开关”,决定是否对目标数据的对应位进行操作。二进制掩码是位操作的灵魂,掌握它不仅能提升代码效率,还能解锁许多高级编程技巧。从基础的位提取到复杂的子集枚举,掩码的应用无处不在。希望本文的讲解和代码示例能帮助你快速上手,并在实际项目中灵活运用。如果你有更多关于掩码的疑问或应用场景,欢迎在评论区留言交流!

m0_73494933的博客 2432

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

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

m0_62659797的博客 1687

lp–mspm0g3507开发板进入低功耗模式怎么退出?烧程序烧着烧着就进来了,跳线帽没动过,且报错:Texas Instruments Debugger Error: DAP Co...如何解决?

🏆本文收录于 《全栈Bug调优(实战版)》 专栏,该专栏专注于分享我在真实项目开发中遇到的各类疑难Bug及其深层成因,并系统提供高效、可复现的解决思路和实操方案。无论你是刚入行的新手开发者,还是拥有多年项目经验的资深工程师,本专栏都将为你提供一条系统化、高质量的问题排查与优化路径,助力你加速成长,攻克技术壁垒,迈向技术价值最大化与职业发展的更高峰🚀!

**My Coding Family** 1570

【雷达通信】雷达信号处理仿真【含Matlab源码 2509期】

雷达信号处理仿真 完整的代码,方可运行;可提供运行操作视频!适合小白!

订阅付费专栏Matlab(奶茶价版),可赠送奶茶价版付费专栏指定代码1份; 904

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

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

kokunka的博客 349

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

【数据结构】栈和队列

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

weixin_47132900的博客 1038

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

数据结构与算法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

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

NOI openjudge题库(2024.11.19)

NOI openjudge题库(2024.11.19)

青少年趣味编程 2200

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、付费专栏及课程。

余额充值