本文是个人学习笔记,素材来自青岛大学王卓老师的教学视频。
一方面用于学习记录与分享,另一方面是想让更多的人看到这么好的《数据结构与算法》的学习视频。
如有侵权,请留言作删文处理。
课程视频链接:
数据结构与算法基础–第3周02–2.5线性表的链式表示和实现2–单链表的定义
📚 Week03_02_单链表的定义
知识回顾
📌 线性表的链式存储结构
线性表中数据元素(结点)在存储器中的位置是任意的,即逻辑上相邻的数据元素在物理位置上不一定相邻。
📌 结点
📌 链表
n 个结点由指针链组成一个链表。
➔ ➔ 单链表:每个结点只有一个指针域
➔ ➔ 双链表:每个结点由两个指针域
➔ ➔ 循环链表:链表结点首尾相接,分为单循环链表和双循环链表
📚 Week03.02.01 单链表的定义和表示
带头结点的单链表
非空表
空表
单链表是由表头唯一确定,因此单链表可以用头指针的名字来命名。
若头指针名是 L,则把链表称为表 L。
📚 Week03.02.02 单链表的存储结构
每个结点包含数据域和指针域,用结构体实现,结构体包含两个数据成员。
数据成员 data 存储数据本身,指针成员 next 存储下一个元素的地址。
data 的数据类型根据处理的具体问题来决定,如存储多项式系数,data数据类型就是 float 类型。如果是处理学生表,data 数据类型就是复杂数据类型。统称 ElemType 类型。
指针成员 next 存储下一个结点的地址,next 数据类型是指针型。具体是什么指针类型,取决于结点数据域所存放的数据是什么类型。
如果结点数据域存放的数据是 int 类型,则 next 是 int * 指针类型。通过 p = &a 给指针变量 p 赋值 a 的地址。
// 声明结点的类型和指向结点的指针类型
typedef struct Lnode
{
// 结点的数据域
ElemType data;
// 结点的指针域
struct Lnode* next;
}Lnode,*LinkList;
// LinkList 为指向结构体Lnode的指针类型
定义链表 L
LinkList L;
定义结点指针 p
LNode *p;
// 等价于
LinkList p;
例如,存储学生学号、姓名、成绩的单链表结点类型定义如下:
typedef struct student
{
char num[8]; // 数据域
char name[8]; // 数据域
int score; // 数据域
struct student *next; // 指针域
}Lnode, *LinkList;
LinkList L;
为了统一链表的操作,通常这样定义:
typedef struct
{
char num[8]; // 数据域
char name[8]; // 数据域
int score; // 数据域
}ElemType;
typedef struct Lnode
{
ElemType data; // 数据域
struct Lnode *next; // 指针域
}Lnode, *LinkList;
LinkList L;
学习笔记最后有微信公众号:惟CPP,欢迎关注,一起交流学习进步~