数据结构学习笔记(Ⅱ):线性表

news2025/4/26 21:47:17

目录

1 线性表

1.1 线性表的定义

1.2 线性表的基本操作

2 顺序表

2.1 顺序表定义

2.2 顺序表的实现

1.静态分配

2. 动态分配

3.顺序表的特点

2.3 顺序表操作

1.插入

2.删除

3.按位查找

4.按位查找

3 链表

3.1 单链表

1.定义

2. 插入和删除

3. 查找

4.单链表建立

3.2 双链表

1.建立

2.插入

3.删除

4.遍历

3.3 循环链表

1.循环单链表

2.循环双链表

3.循环双链表插入与删除

3.4 静态链表 

3.5 顺序表与链表对比


1 线性表

1.1 线性表的定义

i表示元素在线性表中的位序,a1是表头元素,an是表尾元素

除表头元素外,每个元素有唯一直接前驱,除表尾元素外,每个元素有唯一直接后继

1.2 线性表的基本操作

2 顺序表

2.1 顺序表定义

用顺序存储的方式实现的线性表,将逻辑上相邻的元素存储在物理位置也相邻的存储单元中。

2.2 顺序表的实现

1.静态分配

用静态数组存放数据元素,静态空间大小固定

#define Maxsize 10

typedef struct{
    int data[Maxsize];   // 静态数组存放数据元素
    int length;
}SqList;                 // 顺序表的类型定义

2. 动态分配

动态申请和释放内存空间。在C中使用malloc和free函数开拓并释放空间,C++中则使用new和delete。

#include <stdio.h>
#define Initsize 10    // 顺序表初始长度

typedef struct{       
    ElemType *data;    // 指示动态分配数组的指针
    int Maxsize;       // 顺序表最大容量
    int length;        // 顺序表当前长度
}SqList;               // 顺序表的类型定义

该方法时间消耗大

3.顺序表的特点

·随机访问:在O(1)时间内找到第i个元素

·存储密度高,每个节点只存储数据元素

·拓展容量不便,动态分配时间复杂度高

·插入、删除操作不方便

2.3 顺序表操作

1.插入

ListInsert(&L,i,e):在表L中第i个位置上插入指定元素e。  

计算时间复杂度时,问题规模n = L.length

最好情况:插入表尾,i=n+1,循环0次;最好时间复杂度 = O(1)

最坏情况:插入表头,i=1,循环n次;最坏时间复杂度 = O(n)

平均情况:新元素插入到任何位置上概率相同,p = 1 / (n+1), 平均循环次数n / 2,平均时间复杂度 = O(n / 2) = O(n)

2.删除

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

计算时间复杂度时,问题规模n = L.length

最好情况:删除表尾,i=n,循环0次;最好时间复杂度 = O(1)

最坏情况:插入表头,i=1,循环n-1次;最坏时间复杂度 = O(n)

平均情况:被删除元素在任何位置上概率相同,p = 1 / n , 平均循环次数(n-1) / 2,平均时间复杂度 = O(n)

3.按位查找

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

时间复杂度:O(1)

4.按位查找

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

计算时间复杂度时,问题规模n = L.length

最好情况:目标元素在表头,循环1次;最好时间复杂度 = O(1)

最坏情况:目标元素在表尾,循环n次;最坏时间复杂度 = O(n)

平均情况:目标元素出现在任何位置上概率相同,p = 1 / n , 平均循环次数(n+1) / 2,平均时间复杂度 = O(n)

3 链表

链式存储的线性表

3.1 单链表

1.定义

每个结点中存放数据元素和指向下一节点的指针

定义时需要包含数据域data与指针域*next。

包括带头结点和不太头结点两种实现方式

2. 插入和删除

·按位序插入(带头结点)

ListInsert(&L,i,e):在表L中第i个位置上插入指定元素e

·按位序插入(不带头结点)

ListInsert(&L,i,e):在表L中第i个位置上插入指定元素e

不带头结点需要更改头指针L的指向

·指定结点后插

bool InsertNextNode(L Node *p,Elemtype e)

 ·指定结点的前插

法一:bool InsertPriorNode(LinkList L,LNode *p,Elemtype e):给定头结点,遍历

法二:

·按位序删除(带头结点)

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

·删除指定结点

bool DeleteNode(LNode *p)

3. 查找

·按位查找

 时间复杂度:O(n)

·按值查找 

 时间复杂度:O(n)

·求表长度

 时间复杂度:O(n)

4.单链表建立

·尾插法 

·头插法(可应用于链表的逆置)

3.2 双链表

单链表无法逆向检索,可以使用双链表,增加一个前驱指针域

1.建立

2.插入

3.删除

4.遍历

后向遍历

前向遍历

 双链表不可随机存取,按位查找、按值查找操作只能遍历,时间复杂度O(n)。

3.3 循环链表

1.循环单链表

表尾结点的next指针指向头结点

2.循环双链表

表头结点的prior指向表尾结点

表尾结点的next指向表头节点

3.循环双链表插入与删除

·插入

·删除

 

3.4 静态链表 

单链表在内存中是离散的。静态链表将分配一整片连续的内存空间

初始化:将a[0]对next设为-1,即指向NULL

3.5 顺序表与链表对比

1.逻辑结构

都属于线性表

2.存储结构

顺序表:支持随机存取、存储密度高;但连续空间分配不便,容量改变不易

链表::离散空间分配方便,容量改变较易;但不可随机存取,存储密度低

3.基本操作

顺序表:需要预分配空间,浪费内存;插入和删除需要移动元素,移动所需时间代价高;查找效率高

链表:只需分配头结点,便于拓展;插入和删除需要修改指针;

表上可预估,查找时多使用顺序表;表长难以预估,增删、扩容时多使用链表

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/26436.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

葡萄糖-聚乙二醇-阿奇霉素,Azithromycin-PEG-Glucose

葡萄糖-聚乙二醇-阿奇霉素&#xff0c;Azithromycin-PEG-Glucose 中文名称&#xff1a;葡萄糖-阿奇霉素 英文名称&#xff1a;Glucose-Azithromycin 别称&#xff1a;阿奇霉素修饰葡萄糖&#xff0c;阿奇霉素-葡萄糖 PEG接枝修饰葡萄糖 葡萄糖-聚乙二醇-阿奇霉素 Azithro…

【scala】阶段性练习

快速学习scala语法和数据结构&#xff0c;完成以下作业内容。 作业内容&#xff1a; 以下数据包含了某大学某专业学生的成绩&#xff0c;数据格式如下所示&#xff1a; Tom,DataBase,80 Tom,Algorithm,50 Tom,DataStructure,60 Jim,DataBase,90 Jim,Algorithm,60 Jim,DataStru…

详解容灾架构中的脑裂问题

【摘要】对于容灾架构来讲,脑裂是灾难性的事件,本文详细介绍了优先级解决方案、仲裁解决方案、仲裁冲突问题,对于了解相关场景及解决相关问题大有裨益,欢迎阅读。(文中涉及相关技术产品最新参数请以官网最新发布为准) 1. 什么是容灾中的脑裂问题? 脑裂(split-brain)就…

WinHex使用方法详解

WinHex是由X-Ways软件技术公司&#xff08;官方网站http://www.x-ways.net&#xff09;开发的一款专业的磁盘编辑工具&#xff0c;该工具文如其名&#xff0c;是在Windows下运行的十六进制&#xff08;hex&#xff09;编辑软件&#xff0c;能够支持Windows XP、Windows 2003、W…

简单DIV+CSS学生网页设计——电影请以你的名字呼唤我(4页)带音乐特效

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置&#xff0c;有div的样式格局&#xff0c;这个实例比较全面&#xff0c;有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 文章目录一、网页介绍一…

JavaScript面向对象:面向对象案例

面向对象版 tab 栏切换 功能需求: 1.点击 tab栏,可以切换效果. 2.点击 号, 可以添加 tab 项和内容项. 3.点击 x 号, 可以删除当前的tab项和内容项. 双击tab项文字或者内容项文字,可以修改里面的文字内容 基本结构 抽象对象: Tab 对象 1.该对象具有切换功能 2.该对象具…

3、skywalking-安装(Docker-Compose方式)

1、章节简介 上一章节中&#xff0c;skywalking服务已经在vm1上部署完成此章节内容是将我们自己的服务注册到vm1上的sky中 2、集成步骤小计 2.1、上传sky客户端tar包到vm2 2.2、将项目打成jar包 2.3、编写Dockerfile文件 2.4、build镜像 2.5、查看镜像 2.6、运行镜像 2.7、浏览…

代码随想录62——额外题目【数组】:189轮转数组、724寻找数组的中心下标、922按奇偶排序数组II

文章目录1.189轮转数组1.1.题目1.2.解答2.724寻找数组的中心下标2.1.题目2.2.解答3.922按奇偶排序数组II3.1.题目3.2.解答1.189轮转数组 参考&#xff1a;代码随想录&#xff0c;189轮转数组&#xff1b;力扣题目链接 1.1.题目 1.2.解答 这道题目在字符串里其实很常见&#…

2022债市波动分析

2022债市波动分析 – 潘登同学的宏观经济分析框架 文章目录2022债市波动分析 -- 潘登同学的宏观经济分析框架波动事实波动原因人民币贬值压力811汇改前后经济稳中向好债市去杠杆债券市场的未来总结波动事实 2022年11月14日&#xff0c;反映债券价格的“中债总净价指数”单日下…

振弦采集模块使用流程

振弦采集模块使用流程 本章主要内容为 VM 模块基本工作原理以及工作参数、实时数据解释说明。 模块出厂时的默认参数值能够满足大部分振弦传感器的数据读取&#xff0c; 无特殊情况不需要修改参数。若需要修改某些参数时&#xff0c; 务必详细阅读本章内容以便参数含义。 错误…

改进粒子群算法求解电力系统经济调度问题(Matlab实现)

目录 1 相关知识点 2 Matlab完整代码实现 3 结果及可视化 1 相关知识点 这里总结一位博主的目录&#xff1a;梳理如下&#xff1a; 粒子群算法&#xff08;带约束处理&#xff09;——Python&Matlab实现 智能优化算法——粒子群算法&#xff08;Matlab实现&#xff09…

Docker概述及CentOS安装Docker

目录 一、Docker概述 Docker与虚拟机的差异 镜像和容器 Docker和DockerHub Docker架构 二、CentOS安装Docker 安装docker 卸载docker 启动docker 配置镜像加速 一、Docker概述 Docker 是一个用于开发、交付和运行应用程序的开放平台。 Docker 使您能够将应用程序与基…

国产软件厂商如何获得持久的竞争力和可持续增长?

近年来&#xff0c;美国对中国信息技术产业的制裁力度不断加大&#xff0c;华为等数百家中国高科技企业受波及而影响业务。加大自主研发力度&#xff0c;在芯片、操作系统、数据库、软件等卡脖子的关键技术领域&#xff0c;实现自主安全可控&#xff0c;成为中国信息科技产业发…

SpringMVC:拦截器+文件上传下载, 拦截器

一。比较常用&#xff08;理解思路&#xff09; 过滤器 和 拦截器 均体现了AOP的编程思想&#xff0c;都可以实现诸如日志记录、登录鉴权等功能&#xff0c;但二者的不同点也是比较多的&#xff0c;接下来一一说明。 拦截器&#xff1a;看做是多个Controller中公用的功能&…

【Linux】文件描述符

目录&#x1f308;前言&#x1f337;1、文件的概念&#x1f339;2、文件操作&#xff08;C语言&#xff09;&#x1f361;2.1、概念基本打开关闭操作&#x1f362;2.2、文件的打开方式&#x1f363;2.3、文件的读写操作&#x1f364;2.4、对系统调用的封装&#x1f338;3、系统…

python 另一种将内容写入记事本的方式

目录 问题描述&#xff1a; 方案一 &#xff08;常见的写法&#xff09;&#xff1a; 方案二&#xff1a; 问题描述&#xff1a; 如下图所示&#xff0c;欲将下图内容写入一个.txt 方案一 &#xff08;常见的写法&#xff09;&#xff1a; 使用f.write()函数&#xff0c; 如…

如何使用CompletableFuture

目录 一、CompletableFuture是什么 二、CompletableFuture用法 2.1、创建CompletableFuture 2.1.1、直接创建 2.1.2、创建一个使用指定数据作为结果的已结束的CompletableFuture 2.1.3、通过执行异步任务获取CompletableFuture 2.2、获取任务结果 2.3、消费结果 2.3.1、…

云原生技术中台 CNStack2.0 正式发布

作者&#xff1a;奥陌 11 月 5 日&#xff0c;在 2022 杭州 云栖大会上&#xff0c;云原生技术中台 CNStack2.0 正式发布。 阿里巴巴资深技术专家 谢吉宝介绍 CNStack2.0 企业在数字化转型的过程中&#xff0c;一部分问题得到了解决&#xff0c;但随着 IT 水平的不断提升&am…

【Milvus的人脸检索】

0. 介绍 在上一篇文章中&#xff0c;介绍了milvus提供的以图搜图的样例&#xff0c;这篇文章就在以图搜图样例的基础上进行修改&#xff0c;实现人脸检索。 常见的人脸任务&#xff0c;分为人脸检测、人脸识别、人脸对比和人脸检索&#xff0c;其中人脸检索的含义是&#xff…

点成分享 | 蛋白质浓度测定之考马斯亮蓝(Bradford)法

蛋白质是组成生物细胞、组织的重要成分&#xff0c;生物的所有生命活动都离不开蛋白质的参与。蛋白质是生命的物质基础&#xff0c;是构成细胞的基本有机物&#xff0c;是生命活动的主要承担者。生物材料中蛋白质含量的测定是生物学研究中最重要也是最基本的实验操作之一&#…