双向循环链表实现C语言关键字中英翻译机 ฅ( ̳• · • ̳ฅ)

目录

1.双向循环链表的声明与定义:

2. 创建链表并对节点中的数据赋初值

3. 插入节点并链接

4.中英翻译

5. 小游戏的实现

 6.菜单的实现

7. 释放内存

8.在主函数中用刚才定义的函数实现各种代码 

输入样例: 


实现方法:双向循环链表来实现,各个函数来实现各种功能,如game函数是实现程序小游戏的代码,translate是实现翻译的代码,将各个函数的功能在主函数中实现 。

OK,让我们开始实现吧~

1.双向循环链表的声明与定义:

//双向链表的声明
typedef struct Node
{char data[20];char chinese[20];char english[20];struct Node* prev;struct Node* next;
} Node;

其中chinese存储中文信息,english存储英文信息,而data存储字节信息 

2. 创建链表并对节点中的数据赋初值

//创建链表并对节点中的数据初始值
Node* createNode(char* chinese, char* english,char* data)
{Node* newNode = (Node*)malloc(sizeof(Node));strcpy(newNode->data, data);strcpy(newNode->chinese, chinese);strcpy(newNode->english, english);newNode->prev = NULL;newNode->next = NULL;return newNode;
}

3. 插入节点并链接

//插入节点并链接
void insertNode(Node** head, char* chinese, char* english,char* data)
{Node* newNode = createNode(chinese, english,data);if (*head == NULL)//如果节点为空,就将新创建的节点赋值给*head{*head = newNode;(*head)->prev = *head;(*head)->next = *head;}else//否则就执行插入链接操作{Node* lastNode = (*head)->prev; newNode->next = *head;newNode->prev = lastNode;(*head)->prev = newNode;lastNode->next = newNode;}
}

4.中英翻译

//中英翻译
void translate(Node* head, char* keyword) 
{Node* current = head;do {if (strcmp(current->chinese, keyword) == 0)//运用strcmp进行比较,如果相同就打印对应的翻译{printf("%s\n", current->english);return;}if (strcmp(current->english, keyword) == 0){printf("%s\n", current->chinese);return;}current = current->next;//如果没找到就持续寻找下一个} while (current != head);//注意结束标志不是NULLprintf("Translation not found.\n");
}

5. 小游戏的实现

//小游戏的实现
void game(Node* head)
{char data[20];char string[20];Node* current = head;srand(time(NULL));int k = rand() % 11;//设置一个随机数for (int i = 0; i < k; i++){current = current->next;//通过随机数来随机指定当前链表的位置}printf("请输入当前英文关键字的翻译:%s->:", current->english);scanf("%s", string);//通过随机数所指定链表的值与当前输入的值进行匹配if (strcmp(current->chinese,string) == 0){printf("你能输出它的字节大小吗(没有就写没有)->:");scanf("%s", data);//当上一个匹配没问题,就进行字节的匹配if (strcmp(current->data, data) == 0){printf("你真是太厉害了!\n");printf("恭喜你,挑战成功!\n");exit(0);}else if (strcmp(current->data, data) != 0){int count = 2;//挑战失败那再给挑战者两次机会printf("很遗憾,挑战失败!看你表现优异,再给你两次机会吧!\n");while (count){printf("你能输出它的字节大小吗(没有就写没有)->:");scanf("%s", data);if (strcmp(current->data, data) == 0){printf("你真是太厉害了!\n");printf("恭喜你,挑战成功!\n");exit(0);}else printf("挑战失败!\n");count--;}printf("小菜鸡,再练练再来挑战吧!\n");exit(0);}}
}

 6.菜单的实现

void menu1()
{printf("---------------------------------------------------\n");printf("-------------<c语言关键字翻译机>-------------------\n");printf("-------------<输入bye退出程序>---------------------\n");printf("-------------<强化训练输入play>--------------------\n");printf("---------------------------------------------------\n");
}

7. 释放内存

void freeList(Node* head) 
{if (head == NULL) {return;}Node* current = head;Node* next;do {next = current->next;free(current);current = next;} while (current != head);
}

8.在主函数中用刚才定义的函数实现各种代码 

int main() 
{Node* head = NULL;insertNode(&head, "浮点型", "float","4");//要匹配的数据的插入insertNode(&head, "基本整型", "int","4");insertNode(&head, "长整型","longlong","8");insertNode(&head, "结构体类型", "struct","没有");insertNode(&head, "联合体类型", "union","没有");insertNode(&head, "否则", "else","没有");insertNode(&head, "双精度浮点型", "double","8");insertNode(&head, "如果", "if","没有");insertNode(&head, "开关", "switch","没有");insertNode(&head, "循环", "while","没有");char keyword[20];menu1();while (1) {printf("请输入中文的名词或英文的单词(输入 bye 退出)->:");scanf("%s", keyword);if (strcmp(keyword, "bye") == 0) {printf("退出程序!\n");break; }if (strcmp(keyword, "play") == 0){game(head);}translate(head, keyword);}freeList(head);return 0;
}

输入样例: 

样例1: 

样例2:

 

博客到这里也是结束了,喜欢的小伙伴可以点赞加关注支持下博主,这对我真的很重要~~ 

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

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

相关文章

UDP协议工作原理及实战(二)UDP客户端代码实现

这个是一个测试我们写的函数是否正确。 启动服务&#xff1a;这里边的udpsocket->bind(port)就是对端口号进行连接。

开发知识点-Weblogic

Weblogic 介绍CVE_2018_2628poc-yaml-weblogic-ssrfpoc-yaml-weblogic-cve-2017-10271poc-yaml-weblogic-cve-2019-2725poc-yaml-weblogic-cve-2019-2729-1poc-yaml-weblogic-cve-2019-2729-2poc-yaml-weblogic-cve-2020-14750poc-yaml-weblogic-local-cve-2022-21371-file-inc…

链路层、网络层、传输层、应用层长度

参考&#xff1a;链路层、网络层、传输层、应用层长度 链接&#xff1a;https://blog.csdn.net/qq_41658597/article/details/120683870 目录 1、概述2、TCP、UDP数据包最大值的确定3、TCP、UDP数据包最小值的确定4、实际应用IP层 1、概述 首先要看TCP/IP协议&#xff0c;涉及到…

Feature Prediction Diffusion Model for Video Anomaly Detection 论文阅读

Feature Prediction Diffusion Model for Video Anomaly Detection论文阅读 Abstract1. Introduction2. Related work3. Method3.1. Problem Formulation3.2. Feature prediction diffusion module 3.3. Feature refinement diffusion module4. Experiments and discussions4.1…

数据探查系列:如何进行有意义的探索性数据分析(EDA)

如何进行有意义的探索性数据分析&#xff08;EDA&#xff09; 目录 1. 设置 1.1 导入库1.2 导入数据1.3 数据集特征1.4 数据集属性 2. 探索训练集和测试集 2.1 训练集 - 快速概览2.2 训练集 - 基本统计2.3 测试集 - 快速概览2.4 测试集 - 基本统计 3. 特征分布4. 数据不平衡检查…

什么是迁移学习(Transfer Learning)?定义,优势,方法

迄今为止&#xff0c;大多数人工智能&#xff08;AI&#xff09;项目都是通过监督学习技术构建的。监督学习是一种从无到有构建机器学习&#xff08;ML&#xff09;模型的方法&#xff0c;它对推动AI发展起到了关键作用。然而&#xff0c;由于需要大量的数据集和强大的计算能力…

openmediavault(OMV) (19)云相册(3)mt-photos

简介 MT Photos是一款为Nas用户量身打造的照片管理系统。通过AI技术,自动将您的照片整理、分类,包括但不限于时间、地点、人物、照片类型。可以在任何支持Docker的系统中运行它。详情可查看mtmt.tech官网,mt-photos是付费订阅使用的,也可以一次性付费永久使用,具体使用mt…

机器学习系列--R语言随机森林进行生存分析(1)

随机森林&#xff08;Breiman 2001a&#xff09;&#xff08;RF&#xff09;是一种非参数统计方法&#xff0c;需要没有关于响应的协变关系的分布假设。RF是一种强大的、非线性的技术&#xff0c;通过拟合一组树来稳定预测精度模型估计。随机生存森林&#xff08;RSF&#xff0…

观察者模式概述

观察者模式,它用于建立一种对象与对象之间的依赖关系&#xff0c; 一个对象发生改变将自动通知其他对象&#xff0c; 其他对象将相应做出反应。在观察者模式种&#xff0c;发生改变的对象称为观察目标&#xff0c; 而被通知的对象称为观察者&#xff0c;一个观察目标可以对应多…

docker学习(二十、network使用示例host、none)

文章目录 一、host应用示例总结 二、none应用示例总结 network相关内容&#xff1a; docker学习&#xff08;十八、network介绍&#xff09; docker学习&#xff08;十九、network使用示例bridge&#xff09; docker学习&#xff08;二十、network使用示例host、none&#xff0…

Unity 代码控制Text自适应文本高度

在使用代码给Text赋值时&#xff0c;且文本有多段&#xff0c;并需要根据实际文本高度适配Text组件的高度时&#xff0c;可以使用以下方法&#xff1a; //Text文本 public TextMeshProUGUI text;void Start() {//代码赋值文本text.text "好!\n很好!\n非常好!";//获…

postman入门使用

前言 对于postman的基础其实很容易上手实现&#xff0c;也有很多教程。 对于小编我来说&#xff0c;也基本可以实现开发任务。 但是今年我们的高级测试&#xff0c;搞了一下postman&#xff0c;省去很多工作&#xff0c;让我感觉很有必要学一下 这篇文章是在 高级测试工程师ht…

爬虫工作量由小到大的思维转变---<第三十章 Scrapy Redis 第一步(配置同步redis)>

前言: 要迈向scrapy-redis进行编写了;首要的一步是,如何让他们互通?也就是让多台电脑连一个任务(这后面会讲); 现在来做一个准备工作,配置好redis的同步!! 针对的是windows版本的redis同步,实现主服务和从服务共享一个redis库; 正文: 正常的redis for windows 的安装这里就…

docker +gitee+ jenkins +maven项目 (一)

jenkins环境和插件配置 文章目录 jenkins环境和插件配置前言一、环境版本二、jenkins插件三、环境安装总结 前言 现在基本都是走自动化运维&#xff0c;想到用docker 来部署jenkins &#xff0c;然后jenkins来部署java代码&#xff0c;做到了开箱即用&#xff0c;自动发布代码…

Docker (compose、安装、常用命令整理、compose编排) -day06

一、概念 Docker-Compose就是容器编排&#xff0c;负责实现对Docker容器集群的快速编排 Compose允许用户通过一个单独的docker-compose.yml模板文件&#xff08;YAML 格式&#xff09;来定义一组相关联的应用容器为一个项目&#xff08;project&#xff09;。 可以很容易地用一…

Spring系列学习三、Spring的基础组件

Spring的基础组件 一、 什么是Bean及Bean的生命周期二、 什么是依赖注入(DI)与控制反转(IOC)三、 Spring的作用域与生命周期四、 Spring的配置方式(XML与基于注解的配置)五、HelloWorld示例六、结语 欢迎回来各位亲爱的小伙伴&#xff01;我们已经滑过Spring的门槛&#xff0c;…

laravel api资源的问题记录

resource 转换层 可以帮助我们转换一些字段的结果&#xff0c;类似前端的filter。 可以使用比如对象或者模型的形式来处理&#xff0c;但使用sql查询会导致n1的问题。如图&#xff1a; 层次嵌套很多&#xff0c;而且很深&#xff0c;这样虽然开发方便了&#xff0c;但是维护就…

大华NVR和IPC通过主动注册协议方式接入AS-V1000视频监控平台的步骤

最近有人经常用到有的型号的大华网路摄像机&#xff0c;不支持国标GB28181标准&#xff0c;问我们能否接入到在公网的AS-V1000平台 &#xff1f; 我们早期就开发了大华的主动注册协议SDK&#xff0c;能够支持大华的NVR和IPC接入到AS-V1000平台。 今天就直接讲解如何一步步的把局…

【ES6】Class继承-super关键字

目录 一、前言二、ES6与ES5继承机制区别三、super作为函数1、构造函数this1&#xff09;、首先要明确this指向①、普通函数②、箭头函数③、注意事项 2&#xff09;、其次要明确new操作符做了哪些事情 2、super()的用法及注意点1&#xff09;、用法2&#xff09;、注意点 四、s…

【Docker-Dev】Mac M2 搭建docker mysql

Mac M2 搭建Mysql 1、前言2、前置说明-Docker的代理访问3、前置说明-Mysql的镜像访问3.1、提取信息3.1.1、开启Mysql的实例3.1.2、Dokcer连接Mysql3.1.3、官方简易版的docker-compose3.1.4、如何登录mysql bash3.1.5、自定义my.cnf文件3.1.6、如何知道其他自定义配置项 4、M2安…