数据结构11111

在 C 语言里,你看到的 -> 是**"指针访问结构体成员"的运算符**(不是"一>",是显示或字体的问题),用来通过结构体指针访问结构体内部的成员,和" . "的作用类似,但适用场景不同:

  1. 两种访问结构体成员的方式
  • . 运算符:用于直接访问结构体变量的成员,比如:

c

// 定义结构体变量

SeqList L;

// 访问成员

L.length = 0;

  • -> 运算符:用于通过结构体指针访问成员,比如代码里的 SeqList *L 是"指向 SeqList 结构体的指针",所以用 L->length 访问它的 length 成员。
  1. 结合代码的例子

代码里:

  • L 是 SeqList * 类型(SeqList 结构体的指针);

  • L->length 表示"访问指针 L 指向的结构体里的 length 成员";

  • L->data[L->length] = e; 表示"把元素 e 放到指针 L 指向的结构体里的 data 数组的第 L->length 个位置"。

总结

-> 是 C 语言里"指针访问结构体成员"的专用运算符,和" . "的区别是:

  • 直接用结构体变量 → 用 . ;

  • 用结构体指针 → 用 -> 。

插入底层逻辑

所谓的添加删除其实是覆盖的过程。

动态分配逻辑。

malloc开辟了一种空间。

这段代码里的 typedef struct 是 C语言定义"结构体类型" 的语法,作用是"描述顺序表的 数据结构形状 ",和 Java 有这些对应与区别:

  1. 和 Java "类的成员变量"类似

struct 里的 ElemType *data (指向元素的指针)、 int length (顺序表长度),类似 Java 类里的"成员变量声明"------只定义"这个数据结构有哪些部分",还没真正创建出"可用的对象"。

  1. 和 Java "构造方法"的核心区别

Java 的类可以自带 构造方法(包括默认的"空参构造"),在 new 对象时,构造方法会自动完成"对象初始化"(比如给成员变量赋默认值、分配资源等)。

但 C 的结构体本身没有"构造方法",所以必须手动写函数(比如代码里的 initList )来完成:

  • 给结构体分配内存(对应 Java new 时的内存分配);

  • 初始化成员(比如给 data 分配元素数组的内存、把 length 设为 0)。

换句话说:

  • Java 是"类 + 构造方法"一体,完成"定义结构 + 初始化对象";

  • C 是" typedef struct (定义结构) + 手动初始化函数(比如 initList )"分离,组合起来实现类似效果。

简单类比

  • Java: 类(含空参构造) → 像"自带装修的房子蓝图", new 时自动按蓝图建房子+装修。

  • C: typedef struct (结构蓝图) + initList (初始化函数) → 像"先画房子蓝图,再手动写'建房子+装修'的步骤"。

上面是有别名的结构体,是变量的打包,然后再申请一个返回值是上面结构体的函数,下面就是先声明一个结构体类型的指针变量l,用来先开辟适量空间在记录地址值,并且强转成这个指针地址,

用l直接去date的地址值进到里面去,申请数据,并且Date强转成那个类型,并且开辟空间记录地址时,然后初始化长度返回L(地址)

我把代码拆成每个语法细节+每行含义,用最基础的语言解释(假设你是刚学C语言~):

先补基础:几个核心语法的含义

在看代码前,先搞懂这几个"语法工具":

  1. struct :用来"自定义一种数据类型"(比如你要定义"顺序表"这种新类型,就用struct)。

  2. typedef :给"自定义的类型"起个简称(方便后面用)。

  3. * (指针):变量里存的不是"值",而是"内存地址"(比如 SeqList *L ,表示 L 存的是"SeqList类型数据"的地址)。

  4. malloc(大小) :向电脑"申请一块内存空间",返回这块空间的地址(申请完才能存数据)。

  5. sizeof(类型) :计算"某个类型的变量,在内存里占多少字节"(比如 sizeof(int) 是4字节,因为int占4字节)。

  6. -> :当你用指针访问结构体里的成员时,用 -> (如果是普通变量访问成员,用 . )。

第一部分代码:定义顺序表的类型(结构体+typedef)

c

typedef struct{

ElemType *data;

int length;

}SeqList;

逐行/逐部分解释:

  • 第1行 typedef struct{ :

  • struct{...} :定义一个"结构体"(可以理解成"把几个不同类型的变量打包成一个新类型")。

  • typedef :给这个结构体起个简称,后面用 SeqList 就能代表这个结构体(不用每次都写 struct{...} )。

  • 第2行 ElemType *data; :

  • ElemType :是"元素类型"的通用写法(比如你要存整数,就把 ElemType 改成 int ;存字符就改成 char ,方便后续换类型)。

  • *data : data 是一个指针变量------它的作用是"指向一块内存空间",这块空间用来存顺序表的具体数据(比如存1、2、3这些数)。

  • 第3行 int length; :

  • 这是一个普通的int变量,用来记录"当前顺序表里已经存了多少个元素"(比如存了5个数, length 就是5)。

  • 第4行 }SeqList; :

  • 把前面定义的结构体,简称定为 SeqList (以后写 SeqList ,就等于写这个结构体)。

第二部分代码:初始化顺序表的函数(initList)

c

SeqList* initList ()

{

SeqList *L = (SeqList*)malloc(sizeof(SeqList));

L->data = (ElemType*)malloc(sizeof(ElemType) * MAXSIZE);

L->length = 0;

return L;

}

逐行解释:

  • 第1行 SeqList* initList () :

  • 这是定义一个函数,名字叫 initList 。

  • SeqList* :表示这个函数的返回值类型------返回一个"SeqList类型数据"的地址(因为是指针,所以加 * )。

  • () :括号里是空的,表示这个函数不需要传参数。

  • 第3行 SeqList *L = (SeqList*)malloc(sizeof(SeqList)); :

  • SeqList *L :定义一个指针变量 L ,它指向"SeqList类型的结构体"。

  • malloc(sizeof(SeqList)) :

  • sizeof(SeqList) :计算"SeqList结构体"在内存里占多少字节(比如 data 指针占8字节, length 占4字节,总共12字节)。

  • malloc(12) :向电脑申请12字节的内存空间,返回这块空间的地址。

  • (SeqList*) :强制类型转换------因为 malloc 返回的是"通用指针",要转成"SeqList类型的指针",才能赋值给 L 。

  • 整行意思:申请一块存"SeqList结构体"的内存,用 L 指向这块内存。

  • 第4行 L->data = (ElemType*)malloc(sizeof(ElemType) * MAXSIZE); :

  • L->data :因为 L 是指针,所以用 -> 访问结构体里的 data 成员。

  • sizeof(ElemType) * MAXSIZE :

  • MAXSIZE 是你预先定义的"顺序表最多能存多少个元素"(比如 #define MAXSIZE 100 ,表示最多存100个)。

  • 比如 ElemType 是 int (占4字节), MAXSIZE=100 ,那就是 4*100=400字节 ------申请400字节存数据。

  • (ElemType*) :同样是强制类型转换,把 malloc 返回的地址转成"ElemType类型的指针",赋值给 data 。

  • 整行意思:给"存数据的空间"申请内存,让 data 指向这块空间。

  • 第5行 L->length = 0; :

  • 给结构体里的 length 成员赋值为0------表示"刚初始化的顺序表是空的,还没存任何元素"。

  • 第6行 return L; :

  • 把指针 L 返回出去------ L 指向的是"初始化好的顺序表",后面用这个返回值就能操作这个顺序表了。

这样拆完,每个语法和每行代码的作用应该就清楚啦~ 要不要我帮你写一个带具体类型(比如存int)的完整示例代码(把 ElemType 换成 int ,更直观)?

这个就是链,链条断了就不发好找回了,后面的已经被覆盖了。

这个表还是有点不懂。

相关推荐
Ayanami_Reii1 小时前
进阶数据结构应用-一个简单的整数问题2(线段树解法)
数据结构·算法·线段树·延迟标记
CoderYanger4 小时前
C.滑动窗口-越短越合法/求最长/最大——2958. 最多 K 个重复元素的最长子数组
java·数据结构·算法·leetcode·哈希算法·1024程序员节
不会c嘎嘎5 小时前
【数据结构】AVL树详解:从原理到C++实现
数据结构·c++
却话巴山夜雨时i5 小时前
394. 字符串解码【中等】
java·数据结构·算法·leetcode
惊鸿.Jh5 小时前
503. 下一个更大元素 II
数据结构·算法·leetcode
客梦5 小时前
数据结构-栈与队列
数据结构·笔记
TL滕6 小时前
从0开始学算法——第四天(题目参考答案)
数据结构·笔记·python·学习·算法
Liangwei Lin6 小时前
洛谷 P1443 马的遍历
数据结构·算法
老鱼说AI6 小时前
算法基础教学第二步:数组(超级详细原理级别讲解)
数据结构·神经网络·算法·链表