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

news2024/11/19 9:33:38

目录

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.coloradmin.cn/o/1338115.html

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

相关文章

同城配送小程序解决方案

前言 同城配送小程序解决方案。 一、用户用车 用户打开小程序后发货地址自动定位到用户当前位置&#xff0c;用户可通过地址后的>号在地图上选择新的发货地址和卸货地址&#xff0c;小程序会自动规划出行线路&#xff0c;计算距离和运费价格。 用户仅用简单操作后就可以…

【网络协议】远程登录安全连接协议SSH(Secure Shell)

文章目录 什么是SSH协议&#xff1f;SSH为何是安全的&#xff1f;SSH由哪些组件构成&#xff1f;SSH可以帮助实现的功能SSH的工作原理SSH的历史版本常用的SSH工具有哪些SSH配置案例参考Windows 安装SSHUbuntu系统SSH配置Cisco Switch SSH配置华为Switch SSH配置 客户端启用SSH连…

uni-app 命令行创建

1. 首先创建项目&#xff0c;命令如下: npx degit dcloudio/uni-preset-vue#vite-ts uni-app-demo如果出现报错&#xff0c;如下图. 大概率就是没有目录C:\Users\Administrator\AppData\Roaming\npm 解决办法&#xff1a; 创建目录 C:\Users\Administrator\AppData\Roaming\n…

cpp_05_类_string类

1 类的定义 1.1 构造函数 定义&#xff1a;函数名必须与类名相同&#xff0c;且没有返回值类型 &#xff0c;连void也没有。 构造函数调用时间&#xff1a; 在定义对象的同时自动被调用&#xff0c;而且仅被调用一次&#xff1a; 1&#xff09;对象定义语句 2&#xff09;n…

20231226在Firefly的AIO-3399J开发板上在Android11下调通后摄像头ov13850

20231226在Firefly的AIO-3399J开发板上在Android11下调通后摄像头ov13850 2023/12/26 8:22 开发板&#xff1a;Firefly的AIO-3399J【RK3399】 SDK&#xff1a;rk3399-android-11-r20211216.tar.xz【Android11】 Android11.0.tar.bz2.aa【ToyBrick】 Android11.0.tar.bz2.ab And…

基于多反应堆的高并发服务器【C/C++/Reactor】(中)EventLoop初始化

这个Dispatcher是一个事件分发模型&#xff0c;通过这个模型,就能够检测对应的文件描述符的事件的时候,可以使用epoll/poll/select,前面说过三选一。另外不管是哪一个底层的检测模型,它们都需要使用一个数据块,这个数据块就叫做DispatcherData。除此之外,还有另外一个部分,因为…

idea导入spring-framework异常:error: cannot find symbol

从github上clone代码spring-framework到本地后导入idea&#xff0c;点击gradle构建后控制台提示异常&#xff1a; 具体异常信息&#xff1a; /Users/ZengJun/Desktop/spring-framework/buildSrc/src/main/java/org/springframework/build/KotlinConventions.java:44: error:…

智能优化算法应用:基于侏儒猫鼬算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于侏儒猫鼬算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于侏儒猫鼬算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.侏儒猫鼬算法4.实验参数设定5.算法结果6.…

【操作系统】探究文件系统奥秘:创建proc文件系统的解密与实战

​&#x1f308;个人主页&#xff1a;Sarapines Programmer&#x1f525; 系列专栏&#xff1a;Linux专栏&#xff1a;《探秘Linux | 操作系统解密》⏰诗赋清音&#xff1a;月悬苍穹泛清辉&#xff0c;梦随星河徜徉辉。情牵天际云千层&#xff0c;志立乘风意自飞。 ​ 目录 &a…

编译原理-----逆波兰表示法,四元式,三元式,间接三元式

目录 逆波兰表达式 四元式 三元式 间接三元式 逆波兰表达式 逆波兰表示法即后缀表达式&#xff0c;而后缀表达式需要注意&#xff1a; ①遵循从外向内进行分析 ②由算数优先符从低到高进行拆分&#xff0c;例如&#xff1a; 我们以“-”号作为分隔进行拆分&#xff0c;…

STM32逆变器方案

输入电压&#xff1a; 额定输入电压&#xff1a;DC110V 输入电压范围&#xff1a;DC77-137.5V 额定输出参数 电压&#xff1a;200V5%&#xff08;200VAC~240VAC 可调&#xff09; 频率&#xff1a; 42Hz0.5Hz&#xff08;35-50 可调&#xff09; 额定输出容量&#xff1a;1…

LNPMariadb数据库分离|web服务器集群

LNP&Mariadb数据库分离&#xff5c;web服务器集群 网站架构演变单机版LNMP独立数据库服务器web服务器集群与Session保持 LNP与数据库分离1. 准备一台独立的服务器&#xff0c;安装数据库软件包2. 将之前的LNMP网站中的数据库迁移到新的数据库服务器3. 修改wordpress网站配置…

【SpringBoot篇】解决缓存击穿问题② — 基于逻辑过期方式

&#x1f38a;专栏【SpringBoot】 &#x1f354;喜欢的诗句&#xff1a;天行健&#xff0c;君子以自强不息。 &#x1f386;音乐分享【如愿】 &#x1f384;欢迎并且感谢大家指出小吉的问题&#x1f970; 文章目录 &#x1f38d;什么是逻辑过期方式⭐思路&#x1f339;代码 &am…

Spring实战系列(三)了解容器的基本实现

我们可以通过GitHub或者码云下载spring-framework源码&#xff0c;这边是基于5.X版本进行下载学习的。 地址&#xff1a;https://github.com/spring-projects/spring-framework 分析Spring源码是非常一件的难的事情&#xff0c;只能一步步学习&#xff0c;一步步记录。 前面在…

人工智能的弱点有哪些?

尽管人工智能&#xff08;Artificial Intelligence&#xff0c;AI&#xff09;在许多领域取得了巨大的进展和成就&#xff0c;但它仍然存在一些弱点和挑战。以下是人工智能的一些常见弱点&#xff1a; 1. 数据依赖性&#xff1a;人工智能算法通常需要大量的高质量数据进行训练…

每日一题(LeetCode)----二叉树-- 二叉树的右视图

每日一题(LeetCode)----二叉树-- 二叉树的右视图 1.题目&#xff08;199. 二叉树的右视图&#xff09; 给定一个二叉树的 根节点 root&#xff0c;想象自己站在它的右侧&#xff0c;按照从顶部到底部的顺序&#xff0c;返回从右侧所能看到的节点值。 示例 1: 输入: [1,2,3,nu…

flex--伸缩性

1.flex-basis flex-basis 设置的是主轴方向的基准长度&#xff0c;会让宽度或高度失效。 备注&#xff1a;主轴横向&#xff1a;宽度失效&#xff1b;主轴纵向&#xff1a;高度失效 作用&#xff1a;浏览器根据这个属性设置的值&#xff0c;计算主轴上是否有多余空间&#x…

微信小程序picker组件扩展选择时间到秒插件

创建插件seldatetime // 插件JS部分 Component({// 一些选项options: {// 样式隔离&#xff1a;apply-shared 父影响子&#xff0c;shared父子相互影响&#xff0c; isolated相互隔离styleIsolation:"isolated",// 允许多个插槽multipleSlots: true},// 组件的对外属…

k8s的二进制部署(一)

k8s的二进制部署&#xff1a;源码包部署 环境&#xff1a; k8smaster01: 20.0.0.71 kube-apiserver kube-controller-manager kube-schedule ETCD k8smaster02: 20.0.0.72 kube-apiserver kube-controller-manager kube-schedule Node节点01: 20.0.0.73 kubelet kube-pr…

2008年AMC8数学竞赛中英文真题典型考题、考点分析和答案解析

今天我们来看看2008年AMC8竞赛的五道典型考题。欢迎您查看历史文章了解之前各年的真题解析&#xff0c;本系列会持续更新&#xff0c;直到大家参加完2024年的比赛。您有任何关于AMC8比赛的任何问题都可以问我&#xff0c;关于题目的解析也可以交流。 【推荐】为帮助孩子们更便…