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

2023-11-09

字符栈的实现

总时间限制: 
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;
}


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

openjudge数据结构练习集 字符栈的实现 的相关文章

  • 使用Django完成一个系统(上)

    文章目录 可重用注册登录系统 1 思考 2 搭建项目环境 3 设计数据库模型 4 路由 视图函数及模板的框架搭建 5 前端界面设计与优化 6 完善登录的视图函数 7 session会话与登录的视图函数 可重用注册登录系统 1 思考 需求分析
  • UE 4.19 安卓平台配置和测试

    以前使用UE4打包一个很简单的场景都要几百兆 最近据说这几个版本UE4对移动平台的大小进行了较大的优化 测试一下 附按照环境打包 解压后直接在项目中指定即可 链接 https pan baidu com s 1tAfMjY s56ehjud
  • c语言中两种常见代码编写错误,“写入位置 0x00000000 时发生访问冲突”和“语法错误 : 缺少“;”(在“{”的前面)”

    编程工作者在编程的时候 由于编程不够细心经常出现这样或那样的错误 今天 我在这里说下我所遇到的错误 如下面这个代码就出现了文章标题中的俩个错误 define CRT SECURE NO DEPRECATE include
  • Linux Capabilities

    Linux Capabilities是一种细粒度的权限管理机制 用于将root用户的特权划分为具体的功能集 它允许将部分root特权授予非root进程 可以在shell中运行 man capabilities 将显示capability m
  • 格式化数据库字段驼峰式

    public static String format String name if name contains String split name split name split 0 for int m 1 m lt split len
  • pyautogui问题解决方案记录(因为使用了:pyautogui.locateCenterOnScreen(img, confidence=0.9))

    本人环境 win10 1909 Python 3 9 13 不想多余看 只想直接解决 直接安装下面的库 pip install pyautogui pip install pillow pip install opencv python 我
  • 服务器如何发挥最好的性能,一篇文章告诉你怎么发挥固态硬盘最大性能

    对于使用固态硬盘相信大多数玩家对于其性能是否良好没有一个客观上的认知 今天就给大家详细介绍下如何让自己的固态硬盘保持良好的性能状态 从东芝TR200看固态硬盘满盘性能与读取延迟 固态硬盘的性能与很多因素有关 其中空间使用情况也会给固态硬盘的
  • Windows 下设置自定义域名解析到指定 IP

    Windows 下设置自定义域名解析到指定 IP 一 操作步骤 1 定位到 host文件 2 编辑 host文件属性 3 添加解析文件 域名 4 重启电脑 5 在命令行中测试域名即可 导言 记录一下 Windows下设置域名解析到指定 IP
  • 二次封装一个比较通用的elementUI表单

    一下代码仅添加input和select 如有需要还可以加入单选多选日期等
  • cocos2dx linux eclipse,win7下在eclipse中搭建cocos2d-x开发环境

    1 eclipse下载 进入eclipse官网下载 Eclipse standard 4 4 下载页面 3 Android SDK下载 http developer android com sdk index html 也可以下捆绑的 ec
  • Android快速编译调试framework.jar等系统包的步骤

    引言 前段时间在调试android9的系统源码 修改完了framework service等路径下的源码后 编译生成system img 但这种方式需要把system img从服务器上Down下来 再让设备进入fastboot模式 线刷 调
  • Selenium+Pytest自动化测试框架实战

    前言 selenium自动化 pytest测试框架 本章你需要 一定的python基础 至少明白类与对象 封装继承 一定的selenium基础 本篇不讲selenium 不会的可以自己去看selenium中文翻译网 一 测试框架简介 测试框
  • vue2实现百度地图定位

    用的是vue2的地图定位插件 https dafrok github io vue baidu map zh control city list 1 首先肯定是先下载了 npm i vue baidu map S 2 下载完记得全局引入 在
  • Qt 插入Label到指定位置

    QLabel label new QLabel this label gt setFrameStyle QFrame Panel QFrame Sunken label gt setText first line nsecond line
  • [C++]中介者模式

    中介者模式 Mediator Pattern 是用来降低多个对象和类之间的通信复杂性 这种模式提供了一个中介类 该类通常处理不同类之间的通信 并支持松耦合 使代码易于维护 中介者模式属于行为型模式 github源码路径 https gith
  • VSCode配置C语言环境(完整版)

    基本步骤 要在VSCode中配置C语言环境 我们首先可能要一个VSCode 废话 所以先下载安装一个VSCode 然后肯定需要相关插件 因为VSCode不能直接拿来写C 然后任何语言的程序在运行前都需要编译 那还需要一个编译器 很可惜VSC
  • (Python)蚁群算法解决旅行商问题(ACO-TSP)

    蚁群算法又称蚂蚁算法 容易与其他算法相结合 但也存在收敛速度慢 容易陷入局部最优等缺点 coding utf 8 import random import copy import time import sys import math im
  • 【刷题】华为笔试面试机考 [HJ29] - 字符串加解密

    题目地址 点击跳转 题目描述 1 对输入的字符串进行加解密 并输出 2 加密方法为 当内容是英文字母时则用该英文字母的后一个字母替换 同时字母变换大小写 如字母a时则替换为B 字母Z时则替换为a 当内容是数字时则把该数字加1 如0替换1 1
  • 【性能测试】第五篇

    JMeter环境安装 安装JDK 1 JDK下载 官网下载 http www oracle com 提示 下载时注意电脑系统是32位还是64位 桌面 计算机 右击 属性 查看 系统类型 2 安装JDK 双击安装包进行安装 所有步骤选择默认选

随机推荐

  • AVL树的插入操作(四种情况)

    目录 前言 一 AVL树简介 平衡因子bf 二 AVL树的插入操作 不包含重复值 1 找到要插入的位置 和普通的二叉搜索树一样 2 平衡化 情况1 右旋 Single Right Rotation 情况2 左旋 Single Left Ro
  • ubuntu shell实现加减乘除

    bin sh a 8 b 4 c expr a b 乘法 c expr a b 加法 c expr a b 减法 c expr a b 除法
  • 【Windows】 谷歌翻译停服后,chrome无法自动翻译?解决办法来了~

    早前蓝点网提到谷歌翻译中国版和谷歌地图中国版同时停服 此次停服也影响到谷歌浏览器翻译功能的使用 谷歌给出的官方回应是谷歌翻译和谷歌地图的中国版使用率都太低 既然使用率太低那直接停服也情有可原 笑笑 只是谷歌浏览器内置的翻译功能也需要调用谷歌
  • LeetCode每日一题:1462. 课程表 IV(2023.9.12 C++)

    目录 1462 课程表 IV 题目描述 实现代码与解析 拓扑排序 原理思路 1462 课程表 IV 题目描述 你总共需要上 numCourses 门课 课程编号依次为 0 到 numCourses 1 你会得到一个数组 prerequisi
  • KVM-6、virsh 命令及功能详解

    1 虚拟机管理操作 attach device 从XML文件附加设备 attach disk 附加磁盘设备 attach interface 连接网络接口 autostart 自动启动一个域 blkdeviotune 设置或查询块设备I O
  • IDEA报错Project lease-web: there is circular dependency between tests of ‘service-util‘ module, tests

    项目场景 当我创建多个模块时 为了模块化管理利于模块复用 我一层包一层 问题描述 例如 当我要运行的时候发现报错 Project lease web there is circular dependency between tests of
  • Linux 音视频开发杂记之二-使用FFmpeg

    FFmpeg简介 FFmpeg是一套可以用来记录 转换数字音频 视频 并能将其转化为流的开源计算机程序 采用LGPL或GPL许可证 它提供了录制 转换以及流化音视频的完整解决方案 ubuntu下FFmpeg下载 编译并安装 1 基础依赖库安
  • 动态规划基础之挖金矿问题

    问题 有一个国家发现了5座金矿 每座金矿的黄金储量不同 需要参与挖掘的工人数也不同 情况如下图 金矿编号 黄金储量 需要人数 1 500 5 2 200 3 3 300 4 4 350 3 5 400 5 参与挖矿工人的总数是10人 每座金
  • 点云目标检测 国内外现状 2000字

    国内外现状近年来 点云目标检测技术受到了越来越多的关注 其中包括传统的统计学习方法和深度学习方法 由于深度学习方法的出现 点云目标检测研究取得了长足的进步 首先 深度学习方法大大提高了点云目标检测的准确率 其次 深度学习方法也大大简化了点云
  • C++:防止int32溢出--以反转数字为例

    int32溢出 在C 等语言中int类型的整数占4个字节 一般而言 而一个字节是8bit 所以int型可表示32位的整数 又因为int可以表示负数 所以int的范围是 2 31 2 31 231
  • Unity3D之UI按键绑定事件(六)

    六 通过unity系统自带接口和观察者模式绑定按键事件 UI UGUI 如何判断UI元素被点击时是鼠标哪个按键 五 中我们可以根据eventData pointerId来监听是我们按下的是鼠标左键还是右键 通过前面几部分学习我们已经实现对U
  • 字符设备驱动之异步通知

    一 应用程序主动的去查询或 read 1 查询方式 很占资源 2 中断机制 虽然有休眠 但在没有按键按下时 read 3 poll 机制 指定超时时间 以上都是 应用程序 主动去读或查询 二 异步通知 有按键按下了 驱动程序来提醒 触发 应
  • 18.函数subplot2grid():让子区跨越固定的网格布局

    文章目录 1 subplot2grid 的使用方法 2 模块gridspec中的类GridSpec的使用方法 subplot2grid 函数的rowspan和colspan参数可以让子区跨越固定的网格布局的多个行和列 实现不同的子区布局 比
  • 韩顺平 2021零基础学Java 学习笔记(1)(自用)

    目录 第 2 章 Java 概述 第 3 章 变量 第 4 章 运算符 第 5 章 程序控制结构 第 6 章 数组 排序和查找 第 7 章 面向对象编程 基础部分 第 8 章 面向对象编程 中级部分 第 2 章 Java 概述 2 1 Ja
  • Vue3 如何实现一个全局搜索框

    前言 自从学习 vue 以来 就对 vue 官网全局的 command K 调出全局关键词搜索这个功能心心念念 恰好最近项目也是需要实现一个全局搜索的功能 也正好可以正大光明的带薪学习这个功能的思路 网上的教程水平参差不齐 而恰好之前的项目
  • C++数组【修订】

    C 数组 修订 C 数组 array 是一种顺序容器sequence container 是由单一数据类型元素组成的一个有序集合 数组是用来存储一系列数据 但它往往被认为是一系列相同类型的变量 对数组元素的访问是通过下标 subscript
  • 高精度24bit 模数转化 AD7767芯片 使用总结

    转载请标明是引用于 http blog csdn net chenyujing1234 欢迎大家提出意见 一起讨论 PDF资料请大家网上搜索 环境 上位机 MIPS WCE6 0 1 芯片功能介绍 它是一个高精度的24bit采样SAR模数转
  • 读取pytorch.bin权重文件解读

    读取pytorch bin的权重文件实现的函数在modeling utils py之中 print load Pytorch model if state dict is None try state dict torch load res
  • 【Python】‘builtin_function_or_method‘ object is not subscriptable 错误

    Python数组初始化报错 括号问题 错误方式 inArr array ffMiles percentTags iceCream 正确方式 inArr array ffMiles percentTags iceCream
  • openjudge数据结构练习集 字符栈的实现

    字符栈的实现 查看 提交 统计 提问 总时间限制 1000ms 内存限制 1024kB 描述 本程序定义了一个有头结点的链栈 栈的数据元素类型是字符型 并实现了它的创建 入栈 出栈 获取栈顶元素 判断栈是否为空 销毁栈等操作 为了测试这些操