首页 > 编程语言 >学期(2024-2025-1) 学号(20241420) 《计算机基础与程序设计》第十三周学习总结

学期(2024-2025-1) 学号(20241420) 《计算机基础与程序设计》第十三周学习总结

时间:2024-12-21 12:31:11浏览次数:4  
标签:Node 链表 head temp next 2024 2025 20241420 节点

学期(2024-2025-1) 学号(20241420) 《计算机基础与程序设计》第十三周学习总结

作业信息

这个作业属于哪个课程 <班级的链接>(如2024-2025-1-计算机基础与程序设计
这个作业要求在哪里 <作业要求的链接>(2024-2025-1计算机基础与程序设计第十三周作业)
这个作业的目标 <《C语言程序设计》第12章并完成云班课测试>
作业正文 ... 本博客链接https://home.cnblogs.com/u/vincent2077

教材学习内容总结

C语言中的链表是一种动态数据结构,它由节点组成,每个节点包含数据部分和指向下一个节点的指针。

  1. 链表节点的定义

    • 定义一个结构体来表示链表的节点,通常包含数据和指向下一个节点的指针。
    typedef struct Node {
        int data;
        struct Node* next;
    } Node;
    
  2. 创建节点

    • 使用 malloc 或者在栈上声明来创建新的节点。
    Node* createNode(int data) {
        Node* newNode = (Node*)malloc(sizeof(Node));
        if (newNode != NULL) {
            newNode->data = data;
            newNode->next = NULL;
        }
        return newNode;
    }
    
  3. 插入节点

    • 在链表的头部、尾部或中间插入节点。
    • 头部插入:
    void insertAtHead(Node** head, int data) {
        Node* newNode = createNode(data);
        newNode->next = *head;
        *head = newNode;
    }
    
    • 尾部插入:
    void insertAtTail(Node** head, int data) {
        Node* newNode = createNode(data);
        if (*head == NULL) {
            *head = newNode;
        } else {
            Node* temp = *head;
            while (temp->next != NULL) {
                temp = temp->next;
            }
            temp->next = newNode;
        }
    }
    
  4. 删除节点

    • 删除指定位置的节点或删除值为特定数据的节点。
    void deleteNode(Node** head, int key) {
        Node* temp = *head, *prev = NULL;
        if (temp != NULL && temp->data == key) {
            *head = temp->next;
            free(temp);
            return;
        }
        while (temp != NULL && temp->data != key) {
            prev = temp;
            temp = temp->next;
        }
        if (temp == NULL) return;
        prev->next = temp->next;
        free(temp);
    }
    
  5. 搜索节点

    • 在链表中搜索特定值的节点。
    Node* search(Node* head, int key) {
        Node* temp = head;
        while (temp != NULL) {
            if (temp->data == key) return temp;
            temp = temp->next;
        }
        return NULL;
    }
    
  6. 打印链表

    • 遍历链表并打印每个节点的数据。
    void printList(Node* node) {
        while (node != NULL) {
            printf("%d -> ", node->data);
            node = node->next;
        }
        printf("NULL\n");
    }
    
  7. 链表反转

    • 反转链表的方向。
    Node* reverseList(Node* head) {
        Node* prev = NULL, * current = head, * next = NULL;
        while (current != NULL) {
            next = current->next;
            current->next = prev;
            prev = current;
            current = next;
        }
        head = prev;
        return head;
    }
    
  8. 内存管理

    • 使用 mallocfree 管理动态分配的内存。
  9. 循环链表

    • 链表的最后一个节点的 next 指针指向头节点,形成一个闭环。
  10. 双向链表

    • 每个节点有两个指针,一个指向前一个节点,一个指向后一个节点。
  11. 排序链表

    • 使用排序算法(如归并排序、快速排序)对链表进行排序。
  12. 链表与数组的转换

    • 将链表转换为数组以利用数组的索引特性,或者将数组转换为链表以利用链表的动态特性。

基于AI的学习







代码调试中的问题和解决过程

OJ

  • 问题1:输出字符串的最后一个字母时部分正确
  • 问题1解决方案:字符长度限定过小,对于部分动态测试已经超过了数组容量,宏定义N值增大即可
  • 问题2:输出时未注意换行
  • 问题2解决方案:以后注意换行,避免出现数据错误
    实验
    1.问题:查找函数中的“No Found”一开始输出语句放至循环内部,导致其多次出现
    解决方法:将语句放至循环外部;

2.问题:计算总分时出现问题,总分显示为随机数
解决方法:记得在循环开始处将sum初始化为0!

3.问题:成绩表排版混乱
解决方法:学习输出时位移指令,或者灵活运用\t;

4.问题:排序出现问题
解决方法:在冒泡排序中需要先遍历一次找出最值再实行交换,否则不仅会多次交换增加运算并且还会出现顺序问题;

5.问题:对于strcmp运用不够熟练,记住结果有三种:>0,<0,==0
解决方法:记住字符串函数的调用方式和输出格式;

6.问题:n的输入应该在何处没有处理好
解决方法:在此代码中n的输入应该放在前面,以便于在文件读取的时候加入限制,从而读入超过数组容量的数据;

7.问题:fread()函数中sizeof括号里的涉及的应该是指针,填入stu一般指向stu[0],读取时会超过容量出现问题
解决方法:可以使用stu[0]*n以确保容量足够。

  • 计划学习时间:4小时

  • 实际学习时间:6小时

标签:Node,链表,head,temp,next,2024,2025,20241420,节点
From: https://www.cnblogs.com/vincent2077/p/18620636

相关文章

  • 【2025最新计算机毕业设计】新型吃住玩一体化旅游管理系统【提供源码+答辩PPT+文档+项
      作者简介:✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流。✌ 主要内容:......
  • 【2025最新计算机毕业设计】基于SpringBoot+Vue的旅游特产销售系统【提供源码+答辩PPT
     作者简介:✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流。✌ 主要内容:......
  • 【每日一题】20241221
    【每日一题】一位国王的铸币大臣在每箱\(100\)枚的硬币中各参入了一枚劣币,国王怀疑大臣作弊,他用两种方法来检测.方法一:在\(10\)箱中各任意抽查一枚;方法二:在\(5\)箱中各任意抽查两枚.国王用方法一、二能发现至少一枚劣币的概率分别记为\(p_1\)和\(p_2\),则A.\(p_1>p_2\)......
  • 华为OD2024机试最新E卷题库-(A+B+C+D+E)
    在这个精心策划的专栏中,我们聚焦于华为OD2024机试的最新E卷题库,帮助大家练习和理解数据结构,提升编程技巧。感兴趣的可以加算法交流咨询QQ群:952039211以下是每个卷宗的详细,可以通过直接点击试卷链接查看练习试卷编号备注OD-E卷原题+个人代码+思路解析,95%以上的通过率,方便大......
  • 钉钉机器人 自动化发版202406
    钉钉机器人自动化发版#1简介开发机器人接收消息并调用构建接口,实现自动化发版发送指令->机器人接收指令->调用jenkins-job远程构建与部署jenkins配置,勾选job配置的触发远程构建并设置身份验证令牌 #测试触发远程构建 curl-ks-uuser:user_token-XP......
  • 【2024最新】基于Python+Mysql+django的公务员考试信息管理系统Lw+PPT
    作者:计算机搬砖家开发技术:SpringBoot、php、Python、小程序、SSM、Vue、MySQL、JSP、ElementUI等,“文末源码”。专栏推荐:SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码精品专栏:Java精选实战项目源码、Python精选实战项目源码、大数据精选实战项目源码......
  • 【2024最新】基于Python+Mysql+django的宾馆管理系统Lw+PPT
    作者:计算机搬砖家开发技术:SpringBoot、php、Python、小程序、SSM、Vue、MySQL、JSP、ElementUI等,“文末源码”。专栏推荐:SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码精品专栏:Java精选实战项目源码、Python精选实战项目源码、大数据精选实战项目源码......
  • 【2024最新】基于Python+Mysql+django的高校教室管理系统Lw+PPT
    作者:计算机搬砖家开发技术:SpringBoot、php、Python、小程序、SSM、Vue、MySQL、JSP、ElementUI等,“文末源码”。专栏推荐:SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码精品专栏:Java精选实战项目源码、Python精选实战项目源码、大数据精选实战项目源码......
  • 复现MSG:Multiview Scene Graph (NeurIPS 2024)需要的工程知识
    复现项目需要的步骤指南涵盖了环境搭建、数据集准备、模型推理和训练的流程:1.克隆项目代码首先从官方仓库克隆代码:gitclonehttps://github.com/ai4ce/MSG.gitcdMSG2.配置运行环境项目提供了两种方式来设置运行环境,推荐使用environment.yml方法,以确保完整的环境依......
  • 【智慧化工方案资料】智慧化工园区总体规划设计方案,2024智慧园区项目建设方案,智慧化工
    1、工程概况及建设目标2、项目建设内容3、项目建设各系统方案4、项目建设工期排布软件全套资料部分文档清单:工作安排任务书,可行性分析报告,立项申请审批表,产品需求规格说明书,需求调研计划,用户需求调查单,用户需求说明书,概要设计说明书,技术解决方案,数据库设计说明书,详细设......