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

本文是学习笔记,分享青岛大学王卓老师关于《数据结构与算法》的视频内容,特别是讲解单链表的链式表示和实现,包括取第i个元素值的操作。提供了相关代码和算法步骤。

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

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

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

课程视频链接:

数据结构与算法基础–第3周07–2.5线性表的链式表示和实现7–单链表基本操作5–取第i个元素值

📚 📌 📝 🔍 ⚠️ 😊 ⭐ 🔗 👋 ❓ 💬 🔹 🔸 🔖 ❗️ 💟 ➔

📚 【Week03】07_线性表的链式表示和实现7

【单链表的基本操作】取第 i 个元素值

【知识回顾】
带头结点的单链表

在这里插入图片描述

类型定义
typedef struct LNode{
    ElemType data;
    struct LNode *next;
}LNode, *LinkList;
变量定义
LinkList L;
LNode *p, *s;
重要操作
// p 指向头结点
p = L; 

// s 指向首元结点
s = L->next;

// p 指向下一结点
p = p->next;
单链表的基本操作

(1) 单链表的销毁

(2) 清空单链表

(3) 求单链表的表长

(4) 判断单链表是否为空

(5) 取值:取单链表中第 i 个元素的内容

(6) 查找

按值查找:根据指定数据获取数据所在的位置(地址)

按值查找:根据指定数据获取数据所在的位置序号

(7) 插入:在第 i 个结点前插入新结点

(8) 删除:删除第 i 个结点

(9) 单链表的建立:头插法和尾插法

【算法】取值:取单链表中第 i 个元素的内容

❓ 顺序表中如何找到第 i 个元素 ?

顺序表中的元素是按照逻辑顺序存储,第 i 个元素就存储在下标第 i - 1 的位置上。

L->elem[i-1]
【算法思路】

(1) 取出表中第 3 个元素
在这里插入图片描述

从链表的头指针出发,顺着链域 next 逐个结点往下搜索,直至搜索到第 i 个结点为止。

因此,链表不是随机存取结构。

(2) 取出表中第 15 个元素

当输入的 i 的值超过了元素个数,指针 p 最后指向空指针,就没有必要往下找了。

(3) 当 i < 1,返回 False。

【算法步骤】

(1) 从第 1 个结点(L->next)顺链扫描,用指针 p 指向当前扫描到的结点,p 初值 为

p = L->next;

(2) j 做计数器,累计当前扫描过的结点数,j 初值为 1。

(3) 当 p 指向扫描到的下一个结点时,计数器 j 加 1。

(4) 当 j == i 时,p 所指的结点就是要找的第 i 个结点。

【算法描述】
// 获取线性表 L 中的某个数据元素的内容,通过变量 e 返回
Status GetElem_L(LinkList L, int i, ElemType &e){
	// 初始化
    p = L->next;
    j = 1;
    // 向后扫描,直到 p 指向第 i 个元素或 p 为空
    while(p && j<i){
        p = p->next;
        ++j;
    }
    if(!p || j>i){
        // 第 i 个元素不存在
        return ERROR;
    }
    e = p->data;
    
    return OK;
}// GetElem_L
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值