# 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小时
-
改进情况:
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)
参考资料
- 《计算机科学概论(第七版)》
- ...