算法与数据结构-线性表

2024-08-24 17:38

本文主要是介绍算法与数据结构-线性表,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录


#线性表的定义

由n(n≥0)个数据元素(节点) a 1 , a 2 , . . . a n a_1,a_2,...a_n a1,a2,...an组成的有限序列。该序列中的所有节点具有相同的数据类型。其中数据元素的个数n称为线性表的长度。
当n=0时,称为空表。
当n>0时,将非空的线性表记作: ( a 1 , a 2 , . . . , a n ) , a 1 (a_1,a_2,...,a_n),a_1 a1,a2,...,an,a1称为线性表的第一个(首)节点, a n a_n an称为线性表的最后一个(尾)节点。
$ a_1,a_2,…a_{i-1} 都 是 都是 a_i(2≤i≤n) 的 ‘ 前 驱 ‘ , 其 中 的`前驱`,其中 a_{i-1} 是 是 a_i 的 ‘ 直 接 前 驱 ‘ ; 的`直接前驱`; a_{i+1},a_{i+2},…a_n 都 是 都是 a_i(1≤i≤n-1) 的 ‘ 后 继 ‘ , 其 中 的`后继`,其中 a_{i+1} 是 是 a_iKaTeX parse error: Expected 'EOF', got '#' at position 10: 的`直接后继`。 #̲线性表的抽象数据类型 ADT …D={a_i|a_i∈ElemSet,i=1,…,n,n≥0}$
数据关系: R = { < a i − 1 , a i > ∣ a i − 1 , a i ∈ D , i = 2 , 3 , . . . n } R=\{<a_{i-1},a_i>|a_{i-1},a_i∈D,i=2,3,...n\} R={<ai1,ai>ai1,aiD,i=2,3,...n}
基本操作:
InitList(&L)
操作结果:构造一个空的线性表L;
ListLength(L)
初始条件:线性表L已存在;
操作结果:若L为空表,则返回TRUE,否则返回FALSE;

GetEleme(L,i,&e)
初始条件:线性表L已存在,1≤i≤ListLength(L);
操作结果:用e返回L中第i个数据元素的值;
ListInsert(L,i,&e)
初始条件:线性表L已存在,1≤i≤ListLength(L);
操作结果:在线性表L中的第i个位置插入元素e;

}ADT List
#线性表的顺序存储

  • 存储结构

顺序存储:把线性表的节点按逻辑顺序依次存放在一组地址连续的存储单元里。用这种方法存储的线性表简称顺序表。
顺序存储 的线性表的特点
1)线性表的逻辑顺序与物理顺序一致;
2)数据元素之间的关系是以元素在计算机内“物理位置相邻”来体现。

  • 基本操作
  • 初始化
    这里写图片描述
  • 插入

在线性表 L = ( a 1 , . . . , a i − 1 , a i , a i + 1 , . . . , a n ) L=(a_1,...,a_{i-1},a_i,a_{i+1},...,a_n) L=(a1,...,ai1,ai,ai+1,...,an)中的第i(1≤i≤n)个位置上插入一个新节点e,使其成为线性表:
L = ( a 1 , . . . , a i − 1 , e , a i , a i + 1 , . . . , a n ) L=(a_1,...,a_{i-1},e,a_i,a_{i+1},...,a_n) L=(a1,...,ai1,e,ai,ai+1,...,an)
实现步骤:
(1)将线性表L中的第i个至第n个节点后移一个位置
(2)将节点e插入到节点 a i − 1 a_{i-1} ai1之后
(3)线性表长度加1
这里写图片描述

  • 删除

在线性表 L = ( a 1 , . . . , a i − 1 , a i , a i + 1 , . . . , a n ) L=(a_1,...,a_{i-1},a_i,a_{i+1},...,a_n) L=(a1,...,ai1,ai,ai+1,...,an)中删除节点 a i a_i ai(1≤i≤n),使其成为线性表: L = ( a 1 , . . . , a i − 1 , a i + 1 , . . . , a n ) L=(a_1,...,a_{i-1},a_{i+1},...,a_n) L=(a1,...,ai1,ai+1,...,an)
实现步骤:
(1)将线性表L中的第i+1个至第n个节点依次向前移动一个位置
(2)线性表长度减1
这里写图片描述

#线性表的链式存储

  • 存储结构

用一组任意的存储单元存储线性表中的数据元素。用这种方法存储的线性表简称线性链表
存储链表中节点的一组任意的存储单元可以是连续的,也可以是不连续的,甚至是零散分布在内存中的任意位置上的。
链表中节点的逻辑顺序和物理顺序不一定相同。
链表是通过每个节点的指针域将线性表的n个节点按其逻辑次序链接在一起的。

  • 基本操作

1.建立单链表

头插法
头插法
尾插法
尾插法

2.单链表查找

按序号查找
这里写图片描述
按值查找
这里写图片描述

3.单链表插入

这里写图片描述

4.单链表删除

按序号删除
这里写图片描述
按值删除
这里写图片描述

5.单链表合并

这里写图片描述
#双向链表

  • 存储结构

双向链表指的是构成链表的每个节点中设立两个指针域:一个指向其直接前驱的指针域prior,一个指向其直接后继的指针域next。这样形成的链表中有两个方向不同的链,故称为双向链表
这里写图片描述

  • 基本操作

双向链表插入
这里写图片描述
双向链表删除
这里写图片描述

注意:与单链表的插入和删除操作不同的是,在双向链表中插入和删除必须同时修改两个方向上的指针域的指向。

这篇关于算法与数据结构-线性表的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1103152

相关文章

openCV中KNN算法的实现

《openCV中KNN算法的实现》KNN算法是一种简单且常用的分类算法,本文主要介绍了openCV中KNN算法的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录KNN算法流程使用OpenCV实现KNNOpenCV 是一个开源的跨平台计算机视觉库,它提供了各

springboot+dubbo实现时间轮算法

《springboot+dubbo实现时间轮算法》时间轮是一种高效利用线程资源进行批量化调度的算法,本文主要介绍了springboot+dubbo实现时间轮算法,文中通过示例代码介绍的非常详细,对大家... 目录前言一、参数说明二、具体实现1、HashedwheelTimer2、createWheel3、n

C#数据结构之字符串(string)详解

《C#数据结构之字符串(string)详解》:本文主要介绍C#数据结构之字符串(string),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录转义字符序列字符串的创建字符串的声明null字符串与空字符串重复单字符字符串的构造字符串的属性和常用方法属性常用方法总结摘

SpringBoot实现MD5加盐算法的示例代码

《SpringBoot实现MD5加盐算法的示例代码》加盐算法是一种用于增强密码安全性的技术,本文主要介绍了SpringBoot实现MD5加盐算法的示例代码,文中通过示例代码介绍的非常详细,对大家的学习... 目录一、什么是加盐算法二、如何实现加盐算法2.1 加盐算法代码实现2.2 注册页面中进行密码加盐2.

Java时间轮调度算法的代码实现

《Java时间轮调度算法的代码实现》时间轮是一种高效的定时调度算法,主要用于管理延时任务或周期性任务,它通过一个环形数组(时间轮)和指针来实现,将大量定时任务分摊到固定的时间槽中,极大地降低了时间复杂... 目录1、简述2、时间轮的原理3. 时间轮的实现步骤3.1 定义时间槽3.2 定义时间轮3.3 使用时

如何通过Golang的container/list实现LRU缓存算法

《如何通过Golang的container/list实现LRU缓存算法》文章介绍了Go语言中container/list包实现的双向链表,并探讨了如何使用链表实现LRU缓存,LRU缓存通过维护一个双向... 目录力扣:146. LRU 缓存主要结构 List 和 Element常用方法1. 初始化链表2.

golang字符串匹配算法解读

《golang字符串匹配算法解读》文章介绍了字符串匹配算法的原理,特别是Knuth-Morris-Pratt(KMP)算法,该算法通过构建模式串的前缀表来减少匹配时的不必要的字符比较,从而提高效率,在... 目录简介KMP实现代码总结简介字符串匹配算法主要用于在一个较长的文本串中查找一个较短的字符串(称为

通俗易懂的Java常见限流算法具体实现

《通俗易懂的Java常见限流算法具体实现》:本文主要介绍Java常见限流算法具体实现的相关资料,包括漏桶算法、令牌桶算法、Nginx限流和Redis+Lua限流的实现原理和具体步骤,并比较了它们的... 目录一、漏桶算法1.漏桶算法的思想和原理2.具体实现二、令牌桶算法1.令牌桶算法流程:2.具体实现2.1

Go语言中三种容器类型的数据结构详解

《Go语言中三种容器类型的数据结构详解》在Go语言中,有三种主要的容器类型用于存储和操作集合数据:本文主要介绍三者的使用与区别,感兴趣的小伙伴可以跟随小编一起学习一下... 目录基本概念1. 数组(Array)2. 切片(Slice)3. 映射(Map)对比总结注意事项基本概念在 Go 语言中,有三种主要

Python中的随机森林算法与实战

《Python中的随机森林算法与实战》本文详细介绍了随机森林算法,包括其原理、实现步骤、分类和回归案例,并讨论了其优点和缺点,通过面向对象编程实现了一个简单的随机森林模型,并应用于鸢尾花分类和波士顿房... 目录1、随机森林算法概述2、随机森林的原理3、实现步骤4、分类案例:使用随机森林预测鸢尾花品种4.1