结构体数据类型域链表讲解共69页
- 格式:ppt
- 大小:6.88 MB
- 文档页数:69
数据结构--链表⼊门超详细解析(简单易懂纯原篇)个⼈博客:链表的基础概念这⾥就不讲了,随便⼀个搜索引擎就能找到⽆数答案,我这⾥想讲点别⼈不会讲的东西,以及尝试如何让⼀窍不通于链表的同学快速理解和⼊门。
此处我们使⽤C进⾏演⽰⽂章⽬录结点的创建我们知道链表是由⼀个个结点串联⽽成的,⽽每个结点分为两块区域,⼀块是数据域,相当于数组中存储的那个数据;另⼀块是指针域,这⾥存放的是指向下⼀个结点的地址。
在链表遍历的过程中,我们根据前⼀个结点的指针域中的那个地址找到下⼀个结点,就这样⼀个接⼀个往下遍历,进⾏增删改查等⼀系列基础操作。
知道了结点的基础结构就可以来进⾏创建了。
typedef struct lint{// 数据域int score;// 指针域struct lint* next; // 因为next是指向结点的,因此也要是结点的类型}Lint;这⾥使⽤typedef是为了重命名,省的以后创建指针时还要连带着 struct lint*。
之后创建指针就可以直接Lint* p⽽不是struct lint* p链表初始化链表中有⼀个特殊的结点–头结点。
头结点的数据域⼀般不⽤来存放和其他节点同类的数据,它的诞⽣是为了在实际应⽤过程中存放⼀些数据(下⾯会演⽰到)。
我们先来进⾏⽆头结点的初始化。
Lint * initLint(){// 创建头指针Lint* p = NULL;// 创建⼀个临时指针初始化⾸元结点,并且⽤于移动和调整后续结点Lint* temp = (Lint*)malloc(sizeof(Lint));temp->score = 90;temp->next = NULL;// 头指针需要指向⾸元结点,这样才能定位这串链表的位置p = temp;// ⼿动创建10个元素for(int i = 0;i < 10;i++){// 从第⼆个结点开始创建Lint * a = (Lint*) malloc(sizeof(Lint));a->score = i + 91;a->next = NULL;// 将当前temp指向的结点的next指向下⼀个结点temp->next = a;// temp移到下⼀个结点。