• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
vincent2077
博客园    首页    新随笔    联系   管理    订阅  订阅

学期(2024-2025-1) 学号(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. 内存管理:

    • 使用 malloc 和 free 管理动态分配的内存。
  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小时

posted @ 2024-12-21 12:24  任与生  阅读(17)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3