青岛大学_王卓老师【数据结构与算法】Week03_02_线性表的链式表示和实现2_学习笔记

本文介绍线性表的链式存储结构中的单链表定义与实现方式,包括单链表的基本概念、存储结构及如何使用结构体进行实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文是个人学习笔记,素材来自青岛大学王卓老师的教学视频。

一方面用于学习记录与分享,另一方面是想让更多的人看到这么好的《数据结构与算法》的学习视频。

如有侵权,请留言作删文处理。

课程视频链接:

数据结构与算法基础–第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,欢迎关注,一起交流学习进步~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值