代码随想录算法训练营第四天(1)|线性表 ,链表理论基础

 

文档讲解:代码随想录

课本:数据结构(C语言版 第2版)双色版

严蔚敏李冬梅吴伟民 著

难度:一般嗷~~

线性表 

线性表是具有相同数据类型的n(n≥0)个数据元素的有限序列‌。

当n=0时,线性表是一个空表。

特点

  1. 线性表可以表示为L=(a1, a2, …, an),其中a1是唯一的第一个数据元素,
  2. an是唯一的最后一个数据元素。
  3. 除了第一个元素之外,结构中每个元素都只有一个前驱;
  4. 除了最后一个元素之外,结构中每个元素都只有一个后继。

线性表的逻辑特性

线性表的逻辑特性包括:

  • 元素关系:线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的。
  • 元素顺序‌:线性表中的数据元素按照一定的顺序排列,可以是有序的也可以是无序的。
  • 空表‌:当线性表的长度为0时,称为空表。

线性表的存储结构

线性表的存储结构主要有两种:

  • 顺序存储结构‌:使用一组地址连续的存储单元依次存储线性表的数据元素,以“物理位置相邻”来表示线性表中数据元素间的逻辑关系,可随机存取表中任一元素。
  • 链式存储结构‌:通过指针将数据元素连接起来,形成链表。链表包括单链表、双链表等。

线性表的类型定义

以下为伪代码

ADT list{
数据对象:D={a1|a2属于ElemSet,i=1,2,...,n,n>=0}
数据关系:R={<ai-1,ai>|ai-1,ai属于D,i=1,2,...,n}
基本操作:
    InitList(&L):初始化表.构造一个空的线性表L,分配内存空间。

    DestroyList(&L):销毁操作。销毁线性表,并释放线性表L所占有的内存空间。

    ListInsert(&L,i,e):插入操作。在表L中的第i个位序(位置)上插入制定元素e。

    ListDelete(&L,i,&e):删除操作。删除表L中第i个位序(位置)的元素,并用e返回删除元素的值。

    LocateElem(L,e):按值查找操作。在表L中查找具体给定关键字值的元素。

    GetElem(L,i):按位查找操作。获取表L中第i个位置的元素的值。

}

InitList(&L):初始化表。构造一个空的线性表L,分配内存空间。

DestroyList(&L):销毁操作。销毁线性表,并释放线性表L所占有的内存空间。

ListInsert(&L,i,e):插入操作。在表L中的第i个位序(位置)上插入制定元素e。

ListDelete(&L,i,&e):删除操作。删除表L中第i个位序(位置)的元素,并用e返回删除元素的值。

LocateElem(L,e):按值查找操作。在表L中查找具体给定关键字值的元素。

GetElem(L,i):按位查找操作。获取表L中第i个位置的元素的值。

其他常用操作:

Length(L):求表长操作。返回线性表L的长度,即L中数据元素的个数。

PrinList(L):输出操作。按前后顺序输出线性表L的所有元素值。

Empty(L):判空操作。若L为空表,则返回true,否则返回false。

Tips:

①对数据的操作(记忆思路)——创(Init)销(Destroy)、增(Insert)删(Delete)改(Alter)查(Query)

②C语言函数的定义

③实际开发中,可根据实际需求定义其他的基本操作

④函数名和参数的形式、命令都可改变

⑤什么时候需要传入“&”——对参数的修改结果需要“带回来”

引用作者:Fresh_anyu

原文链接:线性表的定义和基本操作

顺序存储结构

随机存取

初始化,取值,查找,插入,删除

详见;数据结构(C语言版)(第2版) 严蔚敏

链表基础

顺序存取

链表是一种通过指针串联在一起的线性结构,每一个节点由两部分组成,一个是数据域一个是指针域(存放指向下一个节点的指针),最后一个节点的指针域指向null(空指针的意思)。

链表的类型

单链表

单链表中的指针域只能指向节点的下一个节点。

双链表

每一个节点有两个指针域,一个指向下一个节点,一个指向上一个节点。

双链表 既可以向前查询也可以向后查询。

循环链表

最后一个节点指向第一个节点。

链表的存储方式

数组是在内存中是连续分布的,但是链表在内存中可不是连续分布的。

链表是通过指针域的指针链接在内存中各个节点。

所以链表中的节点在内存中不是连续分布的 ,而是散乱分布在内存中的某地址上,分配机制取决于操作系统的内存管理。

剩下的晚上出

欢迎各位大佬纠正。

如果有问题可以在评论区讨论。

引用:

  1. 代码随想录
  2.  数据结构(C语言版 第2版)双色版   严蔚敏李冬梅吴伟民 著
  3.  Fresh_anyu
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值