目录
前言
这篇博客主要是介绍绪论部分,介绍下数据结构的一些基本概念和术语,以及一些必要的知识。
1.基本概念和术语
1.数据
数据(data)指的是能够输入到计算机中并被计算机程序处理的符号的集合。
2.数据元素
数据元素(data element)是组成数据的基本单位,是数据的不可分割的最小单位。
3.数据对象
数据对象(data object)是性质相同的数据元素的集合,是数据的一个子集。
4.数据结构
数据结构(data structure)是相互之间存在一种或者多种特定关系的数据元素的集合。
数据元素之间的相互关系称为结构。根据数据元素之间关系的不同特征,通常有4类基本结构:
- 集合 :结构中的数据结构除了同属于一个集合之外,没有其它关系。
- 线性结构:结构中的数据元素之间存在一对一的关系。
- 树形结构:结构中的数据元素之间存在一对多的关系。
- 图状结构或网状结构:结构中的数据元素之间存在着多对多的关系。
上述用来描述数据元素之间的关系称为逻辑结构。数据结构在计算机中的表示称为数据的物理结构或者存储结构。
计算机中表示信息的最小单位是二进制数的一位,叫做位(bit)。
使用一个或者若干个位组合成的数据元素也被称作元素或者节点。
当数据元素由若干个数据项组成的时候,位串中对应于各个数据项的子位串称为数据域。
数据元素之间的关系在计算中有两种表示方法顺序映像和非顺序映像,由此得到两种不同的存储结构:顺序存储结构和链式存储结构。
5.数据类型
数据类型(data type)是一个值的集合和定义在这个集合上的一组操作的总称。
6.抽象数据类型
抽象数据类型(Abstract Data Type)是指一个数学模型以及定义在该模型上的一组操作。
2.抽象数据类型的表示和实现
因为有很多种语言可以表示数据结构,这里主要介绍下使用C语言中表示抽象数据类型需要掌握的知识。
1.预定义常量和类型
#define TRUE 1
typedef int Status;
2.结构体
在C语言中,结构体(struct)是一种用户自定义的数据类型,允许将不同类型的数据组合在一起,形成一个新的数据类型。结构体在C语言中用于表示复杂的数据结构,比如表示一个人的信息(姓名、年龄、性别等)、表示一个图形的属性(长、宽、颜色等)等。
1.定义
结构体的定义通常在函数外部进行,语法如下:
struct 结构体名 {
数据类型1 成员名1;
数据类型2 成员名2;
// 更多成员
};
例如,定义一个表示矩形的结构体:
struct Rectangle {
int width;
int height;
};
2.声明结构体变量
结构体定义后,可以声明结构体变量,用于存储具体的数据。声明语法为:
struct 结构体名 变量名;
例如:
struct Rectangle rect;
3.访问结构体成员
使用成员运算符`.`来访问结构体变量中的成员。语法为:
结构体变量名.成员名
例如,给矩形的宽和高赋值:
rect.width = 10;
rect.height = 20;
4.初始化结构体变量
可以在声明结构体变量时进行初始化,也可以使用赋值语句对结构体变量进行初始化。
// 声明并初始化
struct Rectangle rect = {10, 20};
// 赋值初始化
rect.width = 10;
rect.height = 20;
5.结构体作为函数参数和返回值
结构体可以作为函数的参数和返回值。作为参数时,通常按值传递或按引用传递结构体。作为返回值时,可以通过返回结构体变量或指针来实现。
// 函数参数为结构体
void printRectangle(struct Rectangle rect) {
printf("Width: %d, Height: %d\n", rect.width, rect.height);
}
// 函数返回结构体
struct Rectangle createRectangle(int width, int height) {
struct Rectangle rect;
rect.width = width;
rect.height = height;
return rect;
}
6.结构体指针
结构体指针用于指向结构体变量的地址,可以通过指针来访问结构体的成员。语法为:
struct 结构体名 *指针变量;
例如:
struct Rectangle *ptrRect;
ptrRect = ▭
printf("Width: %d, Height: %d\n", ptrRect->width, ptrRect->height);
结构体是C语言中非常重要的一种数据类型,它允许组织和管理复杂的数据结构,使得程序更加灵活和易于理解。
7.结构体起别名
C语言中使用typedef关键字给结构体起别名。
1.给结构体起一个别名
例如在下面的例子中为结构体Node定义了一个别名SeqList。以后写SeqList seqList;就等价于写struct SeqList seqList
typedef struct Node{
...}SeqList;
2.给结构体指针起一个别名
例如在下面的例子中为结构体指针LNode * 定义了一个别名LinkList。以后写LinkList pt ; 就等价于写struct LNode *pt 。
typedef struct LNode{
...
}* LinkList;
3.动态分配存储空间
C语言中我们使用内存分配函数malloc在程序执行期间给数据分配内存空间。
使用remalloc函数修改动态分配的内存。
使用free函数释放内存。