王道数据结构课代表 - 考研数据结构 第二章 线性表 究极精华总结笔记(C版本)

news/2024/5/20 9:50:42 标签: 数据结构, c语言, 线性表, 顺序表, 链表

本篇博客是考研期间学习王道课程传送门的笔记,以及一整年里对数据结构知识点的理解的总结。希望对新一届的计算机考研人提供帮助!!!
关于对 “线性表” 章节知识点总结的十分全面,涵括了《王道数据结构》课程里的全部要点本人来来回回过了三遍视频),其中还陆陆续续补充了许多内容,所以读者可以相信本篇博客对于考研数据结构线性表”章节知识点的正确性与全面性;但如果还有自主命题的学校,还需额外读者自行再观看对应学校的自主命题材料

精准控时:
如果不实际操作代码,只是粗略过一下知识点,需花费 40 分钟左右过一遍
这个40分钟是我在后期冲刺复习多次尝试的时间,可以让我很好的在后期时间紧张的阶段下,合理分配复习时间;
但是刚开始看这份博客的读者也许会因为知识点陌生、笔记结构不太了解,花费许多时间,这都是正常的。
重点!!!学习一定要多总结多复习!重复、重复、再重复!!!

食用说明书:
第一遍学习王道课程时,我的笔记只有标题和截图,后来复习发现看只看图片,并不能很快的了解截图中要重点表达的知识点。
所以再第二遍复习中,我给每一张截图中标记了重点,以及每张图片上方总结了该图片对应的知识点以及自己的思考
最后第三遍,查漏补缺。
所以 ,我把目录放在博客的前面,就是希望读者可以结合目录结构去更好的学习知识点,之后冲刺复习阶段脑海里可以浮现出该知识结构,做到对每一个知识点熟稔于心!
请读者放心!目录展示的知识点结构是十分合理的,可以放心使用该结构去记忆学习!
注意(⊙o⊙)!,每张图片上面的文字,都是该图对应的知识点总结,方便读者更快理解图片内容。


第2章 线性表

文章目录

  • 第2章 线性表
    • 2.1 线性表的定义和基本操作
      • 1.定义
      • 2.基本操作
      • 3.小结
    • 2.2 线性表顺序表示和实现
      • 1.顺序表
        • 1)存储结构
        • 2)静态分配
        • 3)动态分配
        • 4)小结
      • 2.基本操作实现
        • 1)插入
        • 2)删除
        • 3)查找
        • 4)小结
    • 2.3 线性表的链式表示和实现
      • 1.链式表示
        • 1)存储结构
        • 2)代码定义
        • 3)不带头结点
        • 4)带头结点
        • 5)小结
      • 2.基本操作
        • 1)插入
        • 2)删除
        • 3)查找
        • 4)单链表的建立
      • 3.双链表
        • 1)初始化
        • 2)插入
        • 3)删除
        • 4)遍历
        • 5)小结
      • 4.循环链表
      • 5.静态链表
        • 1)概念
        • 2)定义
        • 3)实现
        • 4)小结
    • 2.4 顺序表链表的比较
      • 1.逻辑结构
      • 2.存储结构
      • 3.基本操作
      • 4.小结
    • 2.5 线性表的应用

2.1 线性表的定义和基本操作

在这里插入图片描述

1.定义

线性表的定义(2-1):线性表是具有相同数据类型的n(n>=0)个数据元素的有限序列

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MUwhL5wg-在这里插入图片描述

  • 注意,线性表是一种逻辑结构,它只有(2-1)这句定义,表示元素之间一对一的相邻关系
  • 之后我们学习的顺序表链表才指存储结构,所以线性表只考虑逻辑方面的关系

2.基本操作

在这里插入图片描述


3.小结

在这里插入图片描述


2.2 线性表顺序表示和实现

在这里插入图片描述

1.顺序表

1)存储结构

  • 顺序表就是用一组地址连续的存储单元依次存储线性表中的数据元素
  • 线性表 + 顺序存储 = 顺序表
    • 数据元素现在不仅是逻辑上 按序前后相邻,而且物理上也是 按序 且 前后相邻,顺序表用一块连续的存储空间顺序****实现线性表
  • 线性表的顺序存储 + 元素类型相同 = 随机存取

在这里插入图片描述

  • ③ 存储空间分配方式
  • 顺序表在高级语言中是使用数组来实现的,根据对顺序表存储空间分配方式的不同,分成静态分配和动态分配
  • 静态分配时,数组的大小在一开始是固定的,空间满了数据就会溢出;
  • 动态分配时,存储数组的空间是在程序执行过程中通过动态存储分配语句分配的,不够在扩充。
  • 这里就有一处很重要的地方需要注意,当动态分配的数组空间不够用的时候,想再扩充L个存储空间(数组N个存储空间),这时候程序是在内存开辟一个N+L大小的空间,而不是L大小。因为顺序表就得占用着一块连续的内存空间

2)静态分配

在这里插入图片描述

#include <bits/stdc++.h>

using namespace std;

#define MAXSIZE 100
typedef int ElemType;

typedef struct
{
    ElemType data[MAXSIZE];
    int length;
} SqList;

void InitList(SqList &list)
{
    for (int i = 0; i < MAXSIZE; i++)
    {
        list.data[i] = 0;
    }
    list.length = 0;
}

int main()
{
    SqList l;
    InitList(l);
    int val, i = 0;
    while (cin >> val)
    {
        l.data[i] = val;
        l.length++;
        i++;
    }
    for (i = 0; i < l.length; i++)
    {
        cout << "data[" << i << "] = " << l.data[i] << endl;
    }
}

3)动态分配

在这里插入图片描述

在这里插入图片描述

#include <bits/stdc++.h>

using namespace std;

#define INITSIZE 10
typedef struct
{
    int val;
} ElemType;

typedef struct
{
    ElemType *data;
    int length;
    int maxSize;
} SqList;

void InitList(SqList &list)
{
    list.data = (ElemType *)malloc(INITSIZE * sizeof(ElemType));
    list.length = 0;
    list.maxSize = INITSIZE;
}

int main()
{
    SqList l;
    InitList(l);
    int elem, i = 0;
    while (cin >> elem)
    {
        l.data[i].val = elem;
        l.length++;
        i++;
    }
    for (i = 0; i < l.length; i++)
    {
        cout << "data[" << i << "] = " << l.data[i].val << endl;
    }
}

4)小结

在这里插入图片描述

在这里插入图片描述


2.基本操作实现

1)插入

在这里插入图片描述


2)删除

在这里插入图片描述


3)查找

  • ① 按位查找

在这里插入图片描述

  • ② 按值查找

在这里插入图片描述


4)小结

在这里插入图片描述

在这里插入图片描述


2.3 线性表的链式表示和实现

在这里插入图片描述

1.链式表示

1)存储结构

在这里插入图片描述


2)代码定义

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


3)不带头结点

在这里插入图片描述


4)带头结点

在这里插入图片描述


5)小结

在这里插入图片描述

在这里插入图片描述


2.基本操作

  • 对于不带头结点的情况,虽然考查较少,当也有可能考
  • 除了插入操作有带头、不带头情况,其它操作默认带头结点

在这里插入图片描述

1)插入

在这里插入图片描述

  • ① 带头结点

在这里插入图片描述

在这里插入图片描述

  • ② 不带头结点

在这里插入图片描述

在这里插入图片描述

  • ③ 指定后插

在这里插入图片描述

在这里插入图片描述

  • ④ 指定前插

在这里插入图片描述

  • 该方法虽然间接实现了指定结点的前插操作,但是无法获得前驱结点的指针

在这里插入图片描述


2)删除

在这里插入图片描述

  • ① 带头结点

在这里插入图片描述

  • ② 指定删除
  • 无法删除最后一个结点

在这里插入图片描述

在这里插入图片描述


3)查找

在这里插入图片描述

  • ① 按位查找

在这里插入图片描述

  • ② 优化插入操作代码

在这里插入图片描述

  • ③ 按值查找

在这里插入图片描述

  • ④ 求表长度

在这里插入图片描述

  • ⑤ 小结

在这里插入图片描述


4)单链表的建立

  • ① 尾插法
  • 下面时间复杂度是O(n),但是如果题目说明每次都重头开始遍历进行尾插,就是O(n^2)

在这里插入图片描述

  • ② 头插法

在这里插入图片描述


3.双链表

1)初始化

在这里插入图片描述

  • 带头结点情况

在这里插入图片描述


2)插入

在这里插入图片描述


3)删除

在这里插入图片描述


4)遍历

在这里插入图片描述


5)小结

在这里插入图片描述


4.循环链表

1)循环单链表

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


2)循环双链表

在这里插入图片描述

  • ① 初始化

在这里插入图片描述

  • ② 插入

在这里插入图片描述

  • ③ 删除

在这里插入图片描述


3)小结

在这里插入图片描述


5.静态链表

1)概念

在这里插入图片描述


2)定义

在这里插入图片描述


3)实现

在这里插入图片描述

在这里插入图片描述


4)小结

在这里插入图片描述


2.4 顺序表链表的比较

1.逻辑结构

在这里插入图片描述


2.存储结构

在这里插入图片描述


3.基本操作

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


4.小结

在这里插入图片描述


2.5 线性表的应用

必定不考,放在这里主要是为了知识结构的完整性


加油考验人!!!


http://www.niftyadmin.cn/n/1260605.html

相关文章

windows与linux上传下载工具-----lrzsz

lrzsz lrzsz是一款可以在windows与linux之间上传和下载工具。 在Centos7中&#xff0c;建立离线yum源或者使用网络yum源&#xff0c;直接yum install -y lrzsz安装即可。 [rootlinus ~]# yum install -y lrzsz下载完成后&#xff0c;即可使用. 上传 上传案例&#xff1a; 1…

王道数据结构课代表 - 考研数据结构 第四章 串-KMP(看毛片算法) 究极精华总结笔记(C版本)

本篇博客是考研期间学习王道课程传送门的笔记&#xff0c;以及一整年里对数据结构知识点的理解的总结。希望对新一届的计算机考研人提供帮助&#xff01;&#xff01;&#xff01; 关于对 “串” 章节知识点总结的十分全面&#xff0c;涵括了《王道数据结构》课程里的全部要点&…

linux查看进程状态命令-----ps

ps ps命令是“process status”的缩写&#xff0c;ps命令用于显示当前系统的进程状态。可以搭配kill指令随时中断、删除不必要的程序。 ps命令是最基本同时也是非常强大的进程查看命令&#xff0c;使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没…

linux显示cpu架构命令-----lscpu

lscpu 此命令用来显示cpu的相关信息。 lscpu命令从sysfs和/proc/cpuinfo收集cpu体系结构信息&#xff0c;命令的输出比较易读&#xff0c;命令输出的信息包含cpu数量&#xff0c;线程&#xff0c;核数&#xff0c;套接字等。 语法 lscpu 【选项】 【参数】 选项 -a&#x…

偷偷学习Java,然后惊艳所有人 JavaSE总结 - thread多线程

零基础学Java&#xff0c;肝了bilibili的6百多集JavaSE教程传送门的学习笔记&#xff01;&#xff01;&#xff01; 下面博客分为三部分&#xff1a; ① thread多线程的要点&#xff08;想快速了解thread多线程的小伙伴选择&#xff0c;内容较多&#xff0c;快也快不了&#x…

JMeter学习笔记--JMeter执行顺序规则

JMeter执行顺序规则&#xff1a; 配置元件前置处理器定时器采样器后置处理器&#xff08;除非服务器响应为空&#xff09;断言监听器只有当作用域内存在采样器时&#xff0c;定时器、断言、前置/后置处理器才会被执行&#xff0c;逻辑控制器和采样器按照在测试树种出现的顺序执…

linux查看文件或目录磁盘空间使用命令-----du

du du命令的英文全称是“Disk Usage”&#xff0c;即用于查看磁盘占用空间的意思。但是与df命令不同的是du命令是对文件和目录磁盘使用的空间的查看&#xff0c;而不是某个分区。 语法 du 【选项】 【参数】 选项 -a或-all&#xff1a;显示目录中个别文件的大小。 -b或-by…

王道数据结构课代表 - 考研数据结构 第七章 查找(B树、散列表) 究极精华总结笔记(C版本)

本篇博客是考研期间学习王道课程传送门的笔记&#xff0c;以及一整年里对数据结构知识点的理解的总结。希望对新一届的计算机考研人提供帮助&#xff01;&#xff01;&#xff01; 关于对 “查找” 章节知识点总结的十分全面&#xff0c;涵括了《王道数据结构》课程里的全部要点…