2024-2025-1 20241300《计算机基础与程序设计》第十三周学习总结
作业信息
这个作业属于哪个课程 | <班级的链接>(如2024-2025-1-计算机基础与程序设计) |
---|---|
这个作业要求在哪里 | <作业要求的链接>(如2024-2025-1计算机基础与程序设计第十三周作业) |
这个作业的目标 | 无 |
作业正文 | ... 本博客链接 |
教材学习内容总结
结构体(Struct)
- 概念
结构体是一种用户自定义的数据类型,它允许将不同类型的数据成员组合在一起,用来表示一个逻辑上相关的复合数据对象。例如,要描述一个学生的信息,可能包含学号(整型)、姓名(字符数组)、年龄(整型)、成绩(浮点型)等不同类型的数据,就可以通过定义结构体来将这些信息整合起来。 - 定义形式
一般语法形式如下:
c
struct 结构体名 {
数据类型 成员1;
数据类型 成员2;
//...
数据类型 成员n;
};
例如:
c
struct Student {
int id;
char name[20];
int age;
float score;
}; - 变量声明与初始化
声明:可以在定义结构体后声明结构体变量,有多种方式,比如紧跟结构体定义声明变量,像 struct Student stu1, stu2; ;也可以先定义结构体类型,之后再用该类型声明变量。
初始化:可以在声明变量时进行初始化,例如 struct Student stu = {1001, "Tom", 18, 85.5}; ,按照结构体成员定义的顺序依次给出初始值。 - 成员访问
通过 “.”(点)运算符来访问结构体变量中的成员,比如对于上述的 stu 变量,要访问学号成员可以写成 stu.id ,访问姓名成员写成 stu.name 等,并且可以对成员进行赋值、参与运算等操作。 - 结构体数组
可以定义结构体类型的数组,用于存储多个同类型的结构体变量,比如 struct Student class[30]; 表示能存放 30 个学生信息的结构体数组,通过下标结合成员访问运算符可以操作数组中每个结构体元素的相应成员,如 class[0].id 访问第一个学生的学号。 - 结构体指针
可以定义指向结构体的指针,使用 “->”(箭头)运算符通过指针来访问结构体成员,例如 struct Student *p = &stu; ,那么通过 p->id 就能访问 stu 变量的学号成员,结构体指针在函数传参等场景中可以更高效地处理结构体数据,避免数据的大量复制。
数据结构基础 - 概念
数据结构是指相互之间存在一种或多种特定关系的数据元素的集合,它主要研究数据的逻辑结构、存储结构以及相关的操作算法。好的数据结构选择能让程序在数据处理、存储、检索等方面更高效。 - 逻辑结构分类
线性结构:数据元素之间存在一对一的线性关系,像线性表(顺序表、链表等)、栈、队列都属于线性结构。例如,顺序表中元素在逻辑上是依次排列的,像数组就是一种顺序存储的线性表实现形式;链表则是通过节点之间的指针链接来体现线性关系,每个节点包含数据域和指向下一节点的指针域。
非线性结构:数据元素之间不是简单的一对一关系,比如树结构(二叉树、多叉树等)中节点存在一对多的层次关系,图结构中节点之间可能存在多对多的复杂关系,常用于表示网络、地图等复杂的数据关联场景。 - 存储结构分类
顺序存储:把数据元素按照逻辑顺序依次存放在连续的存储单元中,优点是可以随机访问元素,查找速度快,缺点是插入、删除操作可能需要移动大量元素,比如数组就是典型的顺序存储结构。
链式存储:通过节点来存储数据元素,节点之间通过指针链接表示逻辑关系,在插入、删除操作时相对灵活,不需要大量移动元素,但不能像顺序存储那样随机、快速地访问元素,链表是常见的链式存储结构体现。
索引存储:除了存储数据元素本身外,还建立了索引表,通过索引表可以快速定位到数据元素,常用于数据库等对查找效率要求较高的场景。
散列存储(哈希存储):根据数据元素的关键字通过特定的哈希函数计算出存储地址,能快速查找元素,但可能存在哈希冲突等问题,需要合适的冲突解决办法,像链地址法、开放定址法等。 - 常见数据结构及基本操作
线性表:基本操作包括初始化、插入、删除、查找、遍历等,顺序表实现时插入删除操作要考虑元素移动,链表实现时要处理好指针的修改。
栈:遵循后进先出(LIFO)原则,操作主要有入栈(压栈)、出栈(弹栈)、查看栈顶元素等,常用于函数调用栈、表达式求值等场景。
队列:遵循先进先出(FIFO)原则,有入队、出队、查看队首元素等操作,常用于任务排队、消息缓冲等情况。
树:例如二叉树有遍历(前序、中序、后序、层序遍历等)、插入节点、删除节点、查找节点等操作,不同遍历方式按照特定顺序访问树中的节点,可用于构建搜索树来实现高效查找等功能。
图:基本操作包含顶点和边的添加、删除,图的遍历(深度优先遍历、广度优先遍历等),在解决路径规划、网络拓扑等复杂问题中有着广泛应用。
数据结构的合理运用能提升程序解决复杂问题的能力,在软件开发、算法设计等众多领域都有着至关重要的作用,而结构体作为一种自定义复合数据类型,常被用于构建各种数据结构的节点等,是数据结构实现的基础组成部分之一。
基于AI的学习