# 2024-2025-1 20241310 《计算机基础与程序设计》第十三周学习总结

2024-2025-1 20241310 《计算机基础与程序设计》第十三周学习总结

作业信息

这个作业属于哪个课程 2024-2025-1-计算机基础与程序设计
这个作业要求在哪里 2024-2025-1计算机基础与程序设计第一周作业
这个作业的目标 自学教材《C语言程序设计》第12章并完成云班课测试
作业正文 作业

教材学习内容总结

1. 结构体 (struct)

结构体的定义

结构体是 C 语言中定义复合数据类型的方式,可以将不同类型的数据组合在一起。

struct Point {
    int x;    // 整数类型的x坐标
    int y;    // 整数类型的y坐标
};

typedef

typedef 可以为已有类型创建别名,包括结构体。

typedef struct {
    int x;
    int y;
} Point;  // 创建别名 Point

结构体变量初始化

可以在定义结构体时直接初始化。

struct Point p1 = {10, 20}; // 使用标准定义
Point p2 = {30, 40}; // 使用typedef后的结构体

嵌套结构体

结构体可以包含其他结构体作为成员。

struct Rectangle {
    Point topLeft;
    Point bottomRight;
};

// 初始化嵌套结构体
struct Rectangle rect = {{0, 10}, {10, 0}}; 

结构体变量的引用

通过 . 操作符访问结构体成员,通过指针访问成员时使用 -> 操作符。

printf("X coordinate: %d\n", p1.x); // 使用变量名
struct Point *ptr = &p1;
printf("X coordinate through pointer: %d\n", ptr->x); // 使用指针

结构体数组的定义和初始化

可以定义结构体数组来存储多个相同类型的结构体。

struct Point points[3] = {{1, 2}, {3, 4}, {5, 6}};

结构体指针的定义和初始化

结构体指针用于指向结构体。

struct Point *pPtr = &p1;  // pPtr 指向 p1
pPtr->x = 15;  // 通过指针修改结构体成员

向函数传递结构体

可以通过值传递或引用传递(指针)传递结构体。

void movePoint(struct Point *p) {
    p->x += 1;
    p->y += 1;
}

movePoint(&p1); // 传递结构体的地址

2. 共用体 (union)

共用体允许在相同的内存位置存储不同的数据类型。

union Data {
    int intValue;
    float floatValue;
    char charValue;
};

// 使用共用体
union Data data;
data.intValue = 10;
printf("%d\n", data.intValue);
data.floatValue = 5.5; // 这里会覆盖 intValue 的值

3. 枚举数据类型 (enum)

枚举提供了一种为一组相关的常量命名的机制,增强代码可读性。

enum Day { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday };
enum Day today;

today = Wednesday; // today 的值为 3

4. 单向链表

单向链表由节点组成,每个节点包含数据和指向下一个节点的指针。

struct Node {
    int data;
    struct Node *next;
};

// 创建链表节点
struct Node *head = malloc(sizeof(struct Node));
head->data = 1;
head->next = NULL;

5. 栈 (Stack)

栈是一种后进先出(LIFO)的数据结构。

#define MAX 100

struct Stack {
    int top;
    int items[MAX];
};

void push(struct Stack *s, int item) {
    if (s->top < MAX - 1) {
        s->items[++(s->top)] = item;
    }
}

int pop(struct Stack *s) {
    return s->items[(s->top)--]; // 返回栈顶元素
}

6. 队列 (Queue)

队列是一种先进先出(FIFO)的数据结构。

#define MAX 100

struct Queue {
    int front, rear;
    int items[MAX];
};

void enqueue(struct Queue *q, int item) {
    if (q->rear < MAX - 1) {
        q->items[++(q->rear)] = item;
    }
}

int dequeue(struct Queue *q) {
    return q->items[(q->front)++]; // 返回队头元素
}

7. 树 (Tree)

树是一种非线性数据结构,由节点组成,常用于表示具有层次关系的数据。

struct TreeNode {
    int data;
    struct TreeNode *left;
    struct TreeNode *right;
};

// 创建树节点
struct TreeNode *newNode(int data) {
    struct TreeNode *node = malloc(sizeof(struct TreeNode));
    node->data = data;
    node->left = node->right = NULL;
    return node;
}

8. 图 (Graph)

图是由节点和边组成的数据结构,常用于表示网络关系。

#define MAX_VERTICES 100

struct Graph {
    int vertices;
    int adjMatrix[MAX_VERTICES][MAX_VERTICES]; // 邻接矩阵
};

// 初始化图
void initGraph(struct Graph *g, int vertices) {
    g->vertices = vertices;
    for (int i = 0; i < vertices; i++) {
        for (int j = 0; j < vertices; j++) {
            g->adjMatrix[i][j] = 0; // 初始化为 0
        }
    }
}

9. 数据的逻辑结构和存储结构

  • 逻辑结构:是指数据间的相互关系。如线性结构(链表、数组)、非线性结构(树、图)。
  • 存储结构:实际存储数据的方式,可以是顺序存储(如数组)或链式存储(如链表)。

通过上述知识点的总结,您可以对 C 语言中结构体、共用体、枚举、链表、栈、队列、树、图等数据结构有一个整体的理解。如需更深入的内容或具体示例,请随时告诉我!

基于AI的学习

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 50/50 2/2 4/4
第二周 200/200 1/3 12/12
第三周 200/1000 1/4 10/10
第四周 400/400 1/5 12/12
第五周 200/1300 1/6 10/10
第六周 600/1000 1/7 10/10
第七周 400/500 1/8 9/9
第八周 600/600 1/9 10/10
第九周 800/800 1/10 12/12
第十周 800/800 1/11 10/10
第十一周 800/800 1/12 10/10
第十二周 800/800 1/13 10/10
第十三周 800/800 1/14 10/10

尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

参考:软件工程软件的估计为什么这么难软件工程 估计方法

  • 计划学习时间:XX小时

  • 实际学习时间:XX小时

  • 改进情况:

(有空多看看现代软件工程 课件
软件工程师能力自我评价表
)

参考资料

posted on 2024-12-20 22:43  诺奇布卡  阅读(2)  评论(0编辑  收藏  举报

导航