双向循环链表实现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);//注意结束标志不是NULL
    printf("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.mfbz.cn/a/273307.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

7.7、kali linux环境下搭建DVWA

目录 一、资料下载准备工作 1.1、DVWA源代码下载 二、开启Apache、mysql服务 2.1、下载Apache2文件 2.2、开启Apache2服务 方法一&#xff1a;开启Apache2服务&#xff08;手动&#xff09; 方法二&#xff1a;开启Apache2服务&#xff08;系统自启动&#xff09; 2.3、…

基于springboot超市进销存系统

**&#x1f345;点赞收藏关注 → 私信领取本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345;**摘要 随着信息化时代的到来&…

【数字孪生】数字工厂三维可视化大屏,智慧养殖三维可视化大屏,智慧农田三维可视化大屏,智慧运维三维可视化大屏,三维在线展示

个人主页&#xff1a; 左本Web3D&#xff0c;更多案例预览请点击》 在线案例 个人简介&#xff1a;专注Web3D使用ThreeJS实现3D效果技巧和学习案例 &#x1f495; &#x1f495;积跬步以至千里&#xff0c;致敬每个爱学习的你。喜欢的话请三连&#xff0c;有问题请私信或者加微…

通过MobaXterm远程连接Anolis

目录 前言&#xff1a; 一.设置ip 二.远程连接 前言&#xff1a; 小编已经阐述了如何安装Anolis系统&#xff0c;如果有不了解的小伙伴可以查看这一篇博客Anolis安装 这篇博客将会讲述如何远程连接Anolis系统。各位看官拿好板凳&#xff01; 一.设置ip 打开网卡所在位…

logstash收集华为、H3C、Cisco交换机日志

网络设备配置 将 syslog-ip 替换成服务器的IP地址。 Huawei info-center loghost source interface info-center loghost syslog-ip local-time facility local6 H3C info-center loghost source interface info-center loghost syslog-ip facility local5 Aruba logging arm …

Xcode 编译速度慢是什么原因?如何提高编译速度?

作为一个开发者&#xff0c;我们都希望能够高效地开发应用程序&#xff0c;而编译速度是影响开发效率的重要因素之一。然而&#xff0c;有时候我们会发现在使用 Xcode 进行开发时&#xff0c;译速度非常慢&#xff0c;这给我们带来了不少困扰。那么&#xff0c;为什么 Xcode 的…

用Ai制作一个镭射图标

下面来展示画一个镭射图标 1、首先画一个星型形状&#xff0c;然后去除描边&#xff0c;并施加渐变中的色谱 注意按住ctrl键拖动角点就可以改变尖角为圆角 按住ctrl键单击某一个角可得到某个角的圆角 选择渐变格式 径向渐变编辑渐变 把每个渐变颜色的饱和度S减半&#xff0c;…

Qt 中使用 MySQL 数据库保姆级教程(上)

作者&#xff1a;billy 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 前言 在 Qt 中默认只搭载了 QSqlLite 数据库驱动&#xff0c;若要使用其他数据库需要自己下载数据库&#xff0c;并将数据库驱动加载到…

MySql 中的聚簇索引、非聚簇索引、唯一索引和联合索引

目录 一. 前言 二. 聚簇索引和非聚簇索引 三. 覆盖索引 四. 联合索引 4.1. 原理讲解 4.2. 最左前缀匹配原则 4.3. 索引下推 五. 唯一索引 一. 前言 索引根据底层实现可分为 B-Tree 索引和哈希索引&#xff0c;大部分时候我们使用的都是 B-Tree 索引&#xff0c;因为它良…

【MySQL】InnoDB和MyISAM区别

文章目录 一、索引不同1 InnoDB聚簇索引&#xff0c;MyISAM非聚簇索引1 InnoDB聚簇索引2 MyISAM非聚簇索引 2 InnoDB必须要有主键&#xff0c;MyISAM允许没有主键3 InnoDB支持外键4 InnoDB不支持全文索引5 索引保存位置不同 二、对事物的支持三、存储结构不同四、存储空间不同五…

中国林业和草原统计年鉴数据,2001-2019年,可看示例数据

基本信息 数据名称: 中国林业和草原统计年鉴 数据格式: 其他 数据时间: 2001-2019年 数据坐标系: WGS84 数据来源&#xff1a;网络公开数据 原名为《中国林业统计年鉴》2020年后更名为《中国林业和草原统计年鉴》&#xff1b;数据中可能包含Excel表格、PDF文档之中的一…

Socks5代理IP在跨境电商与游戏中的应用

随着互联网的迅猛发展&#xff0c;网络已经成为人们日常生活不可或缺的一部分。在这个数字化时代&#xff0c;跨境电商和网络游戏产业蓬勃发展&#xff0c;但伴随而来的是网络安全的威胁与挑战。本文将介绍Socks5代理IP技术&#xff0c;探讨它在网络安全、跨境电商以及游戏中的…

【Linux学习笔记】Linux下nginx环境搭建

1、下载nginx 安装rpm命令: rpm ivh nginx-release.rpm。(直接使用linux命令下载wget http://nginx.org/packages/rhel/6/noarch/RPMS/nginx-release-rhel-6-0.el6.ngx.noarch.rpm 2、设置nginx开机启动 chkconfig nginx on 3、开启nginx服务 方法一&#xff1a;service nginx…

SpringSecurity6 | 退出登录后的JSON处理

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏: 循序渐进学SpringSecurity6 ✨特色专栏: MySQL学习 🥭本文内容:SpringSecurity6 | 退出登录后的JSON处理 📚个人知识库: Leo知识库,欢…

中间件系列 - Redis入门到实战(实战篇)

前言 学习视频&#xff1a; 黑马程序员Redis入门到实战教程&#xff0c;深度透析redis底层原理redis分布式锁企业解决方案黑马点评实战项目 中间件系列 - Redis入门到实战 本内容仅用于个人学习笔记&#xff0c;如有侵扰&#xff0c;联系删除 本章学习目标&#xff1a; 短…

关于Java并发、JVM面试题

前言 之前为了准备面试&#xff0c;收集整理了一些面试题。 本篇文章更新时间2023年12月27日。 最新的内容可以看我的原文&#xff1a;https://www.yuque.com/wfzx/ninzck/cbf0cxkrr6s1kniv 并发 进程与线程的区别 线程属于进程&#xff0c;进程可以拥有多个线程。进程独享…

闲来无事,使用C++和代理IP采集天气预报信息

目录 一、引言 二、代理IP原理 三、选择合适的代理IP服务 四、C程序实现 五、测试与优化 六、结论 一、引言 在当今的互联网时代&#xff0c;网络信息的获取变得日益重要。天气预报信息作为日常生活的重要参考&#xff0c;其获取方式也随着技术的发展而不断变化。在本文…

Gateway API 2

目录 文章目录 目录原文链接本节实战配置请求路由路由到指定版本基于用户身份路由基于权重的路由使用 TLS 暴露服务TCP 路由其他使用关于我最后 原文链接 https://onedayxyy.cn/docs/GatewayAPI/ 本节实战 实战名称&#x1f6a9; 实战&#xff1a;配置请求路由-2023.12.27&am…

Nginx快速入门:return、rewrite重定向、重写详解(六)

0. 引言 我们在日常的生产过程中&#xff0c;常常有需要重定向转发的需求&#xff0c;比如企业更换了域名&#xff0c;但又要保证之前的域名能访问&#xff0c;这就需要做重定向的跳转。 我们在之前的章节中学习了Nginx的负载均衡、各类转发代理配置&#xff0c;今天继续来补…

【编译原理】词法分析器

【编译原理】词法分析器 实验要求&#xff1a; 设置一个名字表NameL和常数表ConstL&#xff0c;当遇到标识符时&#xff0c;将其字符串送入名字表NameL&#xff0c;并把其名字表地址作为标识符的语义Seman值。常数情形也一样&#xff0c;不要求翻译成二进制数。要求在NameL和…