| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 数据结构(二)--- 线性表 -> 正文阅读 |
|
[数据结构与算法]数据结构(二)--- 线性表 |
一、线性表的定义线性表是具有相同数据类型的 n 个元素的有序序列,其中 n 为表长,当 n=0 时线性表是一个空表。 ,是表头元素,是表尾元素,除第一个元素外,每个元素有且仅有一个直接前驱;除最后一个元素外,每个元素有且仅有一个直接后继。 二、线性表的基本操作InitList(&L): 初始化表。构造一个空的线性表L,分配内存空间。 DestroyList(&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中数据元素的个数。 PrintList(L): 输出操作。按前后顺序输出线性表L的所有元素值。 Empty(L):判空操作。若L为空表,则返回true,否则返回false。 三、顺序表顺序表是用顺序存储的方式实现线性表顺序存储。把逻辑上相邻的元素存储在物理位置上也相邻的存储单元中,元素之间的关系由存储单元的邻接关系来体现。 顺序表的实现: (1)静态分配:顺序表的表长刚开始确定后就无法更改,存储空间是静态的。 (2)动态分配:申请一大片连续的存储空间。顺序表存满时,可再用malloc动态拓展顺序表的最大容量;需要将数据元素复制到新的存储区域,并用free函数释放原区域。 顺序表的特点: (1)随机访问:即可以在O(1)时间内找到第i个元素。 (2)存储密度高,每个节点只存储数据元素。 (3)扩展容量不方便,即便采用动态分配的方式实现,拓展长度的时间复杂度也比较高。 (4)插入、删除数据操作不方便,需要移动大量元素。 顺序表插入、删除,顺序表按位查找、按值查找 四、单链表顺序表中每个结点中只存放数据元素,可随机存取,存储密度高,但其要求大片连续空间,改变容量不方便。 单链表中每个结点除了存放数据元素外,还要存储指向下一个结点的指针。 单链表两种实现方式: 不带头结点:空表判断,L == NULL。 带头结点:空表判断,L->next == NULL。 按位序插入(带头结点) ListInsert(&L,i,e): 插入操作。在表L中的第i个位置上插入指定元素e。 ?按位序插入(不带头结点) ListInsert(&L,i,e): 插入操作。在表L中的第i个位置上插入指定元素e。 ?指定结点的后插操作 ??指定结点的前插操作 方法一: ?方法二: ?按位序删除(带头结点) ?指定结点的删除 ?单链表的查找 按位查找:
?单链表的建立 初始化一个单链表,每次取一个数据元素,插入到表尾或表头。 尾插法: 头插法: 注意:遇到链表的逆置问题,考虑用头插法。? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 9:58:08- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |