当前位置: 首页 > news >正文

C语言题目:链表数据求和操作

题目描述

读入10个复数,建立对应链表,然后求所有复数的和。

输入格式

输出格式

样例输入

1 2
1 3
4 5
2 3
3 1
2 1
4 2
2 2
3 3
1 1

样例输出

23+23i

代码功能概述

  1. createNode 函数

    • 创建一个包含 10 个复数节点的链表。

    • 每个节点存储复数的实部 (real) 和虚部 (image)。

  2. sumNode 函数

    • 遍历链表,计算链表中所有复数的和。

    • 释放链表中的节点内存,并输出最终的求和结果。

  3. main 函数

    • 调用 createNode 创建链表。

    • 调用 sumNode 对链表中的复数进行求和。

代码解析

1. 头文件和结构体定义
#include <stdio.h>
#include <stdlib.h>

typedef struct Node
{
    int real;
    int image;
    struct Node *next;
} Node;
  • #include <stdio.h>:包含标准输入输出函数(如 scanfprintf)。

  • #include <stdlib.h>:包含内存管理函数(如 mallocfree)。

  • typedef struct Node:定义了一个链表节点结构体 Node,包含:

    • real:存储复数的实部。

    • image:存储复数的虚部。

    • next:指向下一个节点的指针。

2. 创建链表函数 (createNode)
Node *createNode()
{
    Node *head, *p, *q;
    head = (Node*)malloc(sizeof(Node)); // 创建头节点
    p = head;

    for (int i = 0; i < 10; i++)
    {
        q = (Node*)malloc(sizeof(Node)); // 创建新节点
        scanf("%d%d", &q->real, &q->image); // 输入实部和虚部
        q->next = NULL; // 新节点的下一节点初始化为 NULL

        p->next = q; // 将新节点链接到链表
        p = q; // 移动指针到新节点
    }

    return head; // 返回链表头指针
}
  • head:链表的头节点。

  • pq:指针变量,用于遍历链表和创建新节点。

  • 循环 10 次:创建 10 个复数节点,每次输入一个复数的实部和虚部。

  • 链表链接:每个新节点的 next 指向新分配的节点,形成链表。

3. 链表求和函数 (sumNode)
void sumNode(Node *head)
{
    Node *newNode = (Node*)malloc(sizeof(Node));
    Node *p = head->next; // 从第一个数据节点开始
    Node *q;

    newNode->real = 0; // 初始化求和的实部和虚部
    newNode->image = 0;
    newNode->next = NULL;

    while (p != NULL) // 遍历链表
    {
        newNode->real += p->real; // 累加实部
        newNode->image += p->image; // 累加虚部

        q = p; // 保存当前节点指针
        p = p->next; // 移动到下一个节点
        free(q); // 释放当前节点内存
    }

    printf("%d+%di\n", newNode->real, newNode->image); // 输出求和结果
    return newNode; // 返回求和节点指针(注意:返回类型不正确,应该是 void)
}
  • newNode:用于存储求和结果的新节点。

  • p:遍历链表的指针,从头节点的下一个节点开始。

  • while 循环:遍历链表中的每个节点,累加实部和虚部。

  • 释放内存:每次遍历一个节点时,释放该节点的内存。

  • 输出结果:以 实部+虚部i 的格式输出求和结果。

4. 主函数 (main
int main(void)
{
    Node *head;
    head = createNode(); // 创建链表
    sumNode(head); // 求和并输出结果
    return 0;
}
  • 调用 createNode 创建链表。

  • 调用 sumNode 对链表中的复数进行求和并输出结果。

注意事项

  1. 内存泄漏

    • sumNode 函数中释放了链表中的所有节点,但没有释放头节点 head

    • 如果需要完整的内存管理,应在 sumNode 函数中添加对 head 的释放。

  2. sumNode 的返回值

    • 函数声明的返回类型是 void,但代码中返回了 newNode,这会导致编译错误。应移除或注释掉 return newNode;

  3. 用户输入

    • 如果输入的复数个数少于 10 个,程序会崩溃。建议添加输入验证。

示例运行

假设输入以下 10 个复数:

1 2
3 4
5 6
7 8
9 10
11 12
13 14
15 16
17 18
19 20

输出将是:

100+110i

总结

这段代码实现了一个简单的链表复数求和功能,适合初学者学习链表的基本操作。

源代码

#include <stdio.h>
#include <stdlib.h>

typedef struct Node
{
    int real;
    int image;
    struct Node *next;
}Node;

Node *createNode()
{
    Node *head,*p,*q;
    head = (Node*)malloc (sizeof(Node));
    p = head;
    for(int i = 0; i<10; i++)
    {
        q = (Node*)malloc(sizeof(Node));
        scanf("%d%d",&q->real,&q->image);
        q->next = NULL;
        p->next = q;
        p = q;
    }
    return head;
}

void sumNode(Node *head)
{
    Node *newNode = (Node*)malloc(sizeof(Node));
    Node *p = head->next;
    Node *q;
    newNode->real = 0;
    newNode->image = 0;
    newNode->next = NULL;
    while (p != NULL)
    {
        newNode->real += p->real;
        newNode->image += p->image;
        q = p;
        p = p->next;
        free(q);
    }
    printf("%d+%di\n",newNode->real,newNode->image);
    return newNode;
}

int main(void)
{
    Node *head;
    head = createNode();
    sumNode(head);
    return 0;
}

相关文章:

  • 【系列教程】Python第三课:用前两课知识解决实际问题
  • “mysqld --initialize --console ”执行不成功情况总结和解决措施
  • vue3-04vue3中ref函数( 定义一个响应式的数据)
  • 设计模式14:职责链模式
  • 普通报表入门
  • 使用html css js 开发一个 教育机构前端静态网站模板
  • Show 『Picture Add + Crosee Line ROI
  • 【ISO 14229-1:2023 UDS诊断(ECU复位0x11服务)测试用例CAPL代码全解析④】
  • 《StyleID:一种无训练的方法将大规模扩散模型适配于风格迁移》
  • Mistral Saba:为中东和南亚量身打造的AI模型
  • npu 瑞芯微rk系列,rknn模型转换以及npu使用
  • ES8字符串填充用法总结:padStart(),padEnd(),rest剩余参数的用法{name,...obj},扩展运算符的用法,正则表达式命名捕获组
  • 聚焦地灾防治,助力城市地质安全风险防控
  • 基于STM32的智能交通信号控制系统
  • Windows环境打印文档的同时自动生成PDF副本的方法
  • SpringBoot中自动装配机制的原理
  • Pytorch实现论文之一种基于扰动卷积层和梯度归一化的生成对抗网络
  • 2024年GESP09月认证Scratch一级试卷
  • 问题定位总结
  • WebSocket在分布式环境中的局限性及解决方案
  • 前四个月社会融资规模增量累计为16.34万亿元,比上年同期多3.61万亿元
  • 冷冰川谈黑白
  • 国内大模型人才大战打响!大厂各出奇招
  • 习近平结束对俄罗斯国事访问并出席纪念苏联伟大卫国战争胜利80周年庆典回到北京
  • 构筑高地共伴成长,第六届上海创新创业青年50人论坛在沪举行
  • 被取消总统候选人资格,金文洙:将采取政治法律措施讨回公道