数据结构-线性结构

一.线性结构

1.顺序线性表

1.1 线性结构是一种基本的数据结构,具有单一前驱后继的数据关系描述。
1.2 线性表的存储结构分为顺序存储和链式存储
1.3 顺序线性表的元素间的逻辑关系无需占用额外的空间来存储。
1.4 一般地,以LOC(a1a_1a1)表示线性表中第一个元素的存储位置,在顺序存储结构中,第i个元素aia_iai的存储位置为
LOC(ai)=LOC(a1)+(i−1)∗LLOC(a_i) = LOC(a_1) + (i-1)*L LOC(ai)=LOC(a1)+(i1)LL表示表中每个元素所占用空间的字节数。

1.5 顺序线性表的优点是可以随机存储表中的元素,缺点是插入和删除元素需要移动元素。

1.6插入删除操作需要移动元素个数的期望值
(1) 在长度为的线性表中插入元素时,共有n+1个插入位置,在位置1处插入元素需要移动n个元素,在n位置处插入元素,需要移动一个元素,则可知在**位置i处插入元素,需要移动的元素个数为n+1 - i,**假设在n+1个位置插入元素的概率相等,则概率为:
1n+1\frac{1}{n+1} n+1则插入元素的期望为
Einsert=∑i=1n+11n+1(n+1−i)=n2E_{insert} = \displaystyle\sum_{i=1}^{n+1} \frac{1}{n+1}(n+1 - i) = \frac{n}{2} Einsert=i=1n+1n+1(n+1i)=2n

(2) 删除元素时,有n个元素可删除的元素,删除第i个元素需要移动的元素个数为n-i,则期望为:
Edelete=∑i=1n1n(n−i)=n−12E_{delete} = \displaystyle\sum_{i=1}^{n} \frac{1}{n}(n - i) = \frac{n-1}{2} Edelete=i=1nn(ni)=2n1

1.7 因此,插入和删除的时间复杂度为O(n)

2.链式线性表

2.1 通过指针域来存储元素之间的逻辑关系,若节点中只有一个指针域,则称为线性链表,具有插入和删除元素不需要移动元素的优点。
2.2 在单链表中,在p所指节点后面插入新节点:

s->next = p->next;
p->next = s

2.3 在单链表中删除p所指节点的后继节点:

q = p->next;//记住需要删除的节点,用于其释放内存
p->next = p->next->next;
free(q);

在这里插入图片描述
插入,删除节点都需要从插入或删除的节点入手,结合图中所示,书写首尾衔接,方便快速写出正确的代码。

2.4 在实际应用中,为了简化对链表状态的判定和处理,特别引入一个不存储数据元素的节点,称之为头节点,将其作为链表的第一个节点并令头指针指向该节点。

2.5 双向链表,具有连个指针域,分别指出当前元素的直接前驱和直接后继。循环链表,在单链表的基础上,令表尾节点的指针指向链表的第一个节点。注意区分两者的区别。

2.6 双向链表的删除和插入操作,front表示前驱,next表示后继。

在p节点之前插入节点s:

s->front = p->front;
p->front->next = s;
s->next = p;
p->front = s;

删除节点p:

p->front->next = p->next;
p->next->front = p->front;
free(p);

在这里插入图片描述

3. 栈和队列

3.1 在栈中进行插入和删除操作的一端称为栈顶
3.2 栈的存储结构:顺序存储和链式存储。采用顺序存储结构的栈称为顺序栈,在这种存储方式下,需要预新申请栈的存储空间。
3.3 栈的典型应用包括表达式求值括号匹配等,其次将递归过程转换成非递归过程,也需要利用栈来实现。

3.4 在对队列中,允许插入元素的一端称为队尾(Rear),允许删除元素的一端称之为队头(Front)。顺序存储的队列,可以通过求余运算来实现环状结构。
元素入队和元素出队列;

Q.rear = (Q.rear +1) % MAXSIZE;// 采用下标加1的方式表示入队和出队
Q.front = (Q.front +1) % MAXSIZE;

3.5 当头指针和为指针相等时,表示队列为空,当尾指针的下一个位置为头指针是表示队列满,或者设置一个队列满的标志是区分队列的空与满。

3.6 链式队列,采用给队列添加一个头节点,并令头指针指向该节点。因此,当头指针与位置的值相等且均指向头结点表示队列空。
3.7 队列主要用于需要排队的场合,以及离散事件的计算机模拟等。

4.串的模式匹配

4.1 朴素的模式匹配算法:基本思想是从主串的第一个字符与模式串的第一个字符比较,若相等,则逐一对字符串进行后续的比较,否则从主串第二个字符与模式串的第一个字符重新比较,直到匹配成功或则失败。

4.2 模式匹配的算法时间复杂度
(1) 假设主串和模式串长度分别为n和m,下表从0开始,假设从主串的第i个位置匹配成功,且在前i趟中都是模式串的第一个字符与主串匹配失败,字符比较次数为i,而第i+1趟成功匹配字符的比较次数为m,总的字符比较次数为i+ m(0<=i<=n-m),若在n-m个位置上匹配成功的概率相同,即
1n−m+1\frac{1}{n-m+1} nm+1
则,匹配成功时字符的平均比较次数为:
1n−m+1∑i=0n−m(i+m)=n+m2\frac{1}{n-m+1} \displaystyle\sum_{i=0}^{n-m} (i+m) = \frac{n+m}{2} nm+1i=0nm(i+m)=2n+m
因此,在最好情况下匹配算法的时间复杂度为O(n+m)

(2)假设最坏情况下,每次匹配不成功都是模式串的最后一个字符不匹配,则前i趟中字符比较了i×m次,第i+1趟也比较了m次,则:
∑i=0n−mm(i+1)n−m+1=12m(n−m+2)\displaystyle\sum_{i=0}^{n-m}\frac{m(i+1)}{n-m+1} = \frac{1}{2}m(n-m+2) i=0nmnm+1m(i+1)=21m(nm+2)
因此,在最坏情况下匹配算法的时间复杂度为O(n×m)

5.矩阵的压缩存储

5.1 n阶对称矩阵,aija_{ij}aij=ajia_{ji}aji,可将n2n^2n2个元素压缩存储到n(n+1)2\frac{n(n+1)}{2}2n(n+1)个元素的存储空间。
采用为主序存储下三角包括对角线中的元素在数组A中,则A [k]与矩阵元素aija_{ij}aij之间的一一对应关系为:
k={i(i−1)2+ji >= jj(j−1)2+i,i < jk = \begin{cases} \frac{i(i-1)}{2}+j & \text {i >= j} \\ \frac{j(j-1)}{2}+i , & \text{i < j} \end{cases} k={2i(i1)+j2j(j1)+i,i >= ji < j

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

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

相关文章

脑智前沿科普|虚拟现实如何欺骗你的大脑

来源&#xff1a;公众号&#xff08;脑与心智毕生发展研究中心CLIMB&#xff09;编辑&#xff1a;Yezi审阅&#xff1a;mingzlee7虚拟现实(Virtual reality, VR)就像被神奇地传送到另一个世界。这是一项令人兴奋的技术&#xff0c;但当我们戴上耳机后&#xff0c;我们很少停下来…

Linux下Java连接数据库出现 Access denied for user 'root'@'localhost' (using password: YES)错误

一、问题描述 centos 7 终端键入 mysql -u root -p 输入密码后可成功访问数据库&#xff0c;但使用IDEA编写Java代码实现数据库连接时却出现Access denied for user ‘root’‘localhost’ (using password: YES) 错误。 二、解决方法 在刚安装mysql时&#xff0c;系统会默认…

被骗两次?黄仁勋骗过世界的14秒,英伟达押宝未来的元宇宙……

来源&#xff1a;物联网智库在近期召开的计算机图形顶级会议ACM SIGGRAPH 2021 上&#xff0c;英伟达介绍了自研的3D仿真模拟和协作平台Omniverse&#xff0c;并放出了“合成版老黄”的打造过程。有媒体据此报道称——万万没想到&#xff0c;在3个月前的GTC大会中&#xff0c;厨…

QT清单打印程序

1.主要代码 //customer.h文件 #ifndef CUSTOMER_H #define CUSTOMER_H#include <QObject> #include <string>class Customer : public QObject {Q_OBJECT public:explicit Customer(QObject *parent nullptr);Customer(const Customer& customer);void setCo…

图灵奖得主杨立昆:人工智能比你更聪明吗?

来源&#xff1a;混沌巡洋舰人工智能常常被认为是一项将要颠覆世界的技术&#xff0c;从这一概念诞生至今的65年中&#xff0c;无数电影与小说塑造了各种经典的人工智能角色&#xff0c;AI &#xff08;Artificial Intelligence&#xff09;也很快成为人类未来世界蓝图中的重要…

(转)Windows系统、Linux系统 和 Mac OS操作系统 历史由来 与 区别?

目录 1 UNIX 由来 2 Linux 由来 3 Windows与Linux的主要区别 4 关于Linux的一些疑惑 参考资料 目前常见的三大操作系统&#xff1a;Windows系统、Linux系统 和 Mac OS操作系统。 首先&#xff0c;不管是Windows操作系统、Linux系统还是苹果的Mac OS操作系统&#xff0c;甚…

国务院公布《关键信息基础设施安全保护条例》

来源&#xff1a;中国政府网编辑&#xff1a;蒲蒲据中国政府网8月17日消息&#xff0c;《关键信息基础设施安全保护条例》已经2021年4月27日国务院第133次常务会议通过&#xff0c;现予公布&#xff0c;自2021年9月1日起施行。条例指出&#xff0c;国家对关键信息基础设施实行重…

文章推荐 | 城市规划中城市信息学的研究进展

来源&#xff1a;北京城市实验室BCL随着计算机技术的飞速发展&#xff0c;城市信息学作为城市规划领域的一门新兴学科&#xff0c;逐渐引起学术界的关注。城市信息学的兴起给城市规划带来了新的压力&#xff0c;但它也提供了新的城市分析视角。在此背景下&#xff0c;专家小组概…

Matlab基础

一.入门基础 1.基本知识 1.1 输入命令 以分号结尾不会打印变量的值 x 1 y x;1.2 变量命名规则&#xff1a;以字母开头&#xff0c;并且仅包含字母、数字和下划线。 1.3 使用save命令将工作区中的变量保存到MAT文件的MATLAB特定格式文件中,文件名为datafile.mat。可以指定保…

3年规模翻7倍统治 5G、IoT时代,化合物半导体材料深度报告

来源 华西证券编辑&#xff1a;智东西内参作者&#xff1a;吴吉森 等随着 5G、IoT 物联网时代的来临&#xff0c;以砷化镓&#xff08;GaAs&#xff09;、氮化镓&#xff08;GaN&#xff09;、碳化硅&#xff08;SiC&#xff09;为代表的化合物半导体市场有望快速崛起。其中&am…

SpringBoot笔记整理(二)

SpringBoot笔记整理&#xff08;一&#xff09; SpringBoot笔记整理&#xff08;二&#xff09; SpringBoot笔记整理&#xff08;三&#xff09; SpringBoot笔记整理&#xff08;四&#xff09; Spring Boot与日志&#xff08;日志框架、日志配置&#xff09; 1、市面上的日志…

MATLAB图像处理基础

1.导入数据 1.1 使用readtable("")导入数据&#xff0c;并存储在表格中&#xff0c;使用axis equal可以校正坐标轴纵横比。 letter readtable("M.txt"); plot(letter.X,letter.Y) axis equal1.2 range(x)函数返回x的值的范围&#xff0c;即max(x) - min(…

BBWebImage 设计思路

BBWebImage 设计思路 BBWebImage 是高性能 Swift 图片组件&#xff0c;用于图片下载、缓存、编解码、编辑与展示。 GitHub 地址&#xff1a; https://github.com/Silence-GitHub/BBWebImage 效果图 下载、展示并缓存原图 下载、渐进式解码、编辑图片&#xff0c;缓存编辑后的图…

清华本科、港科大准博士被指论文抄袭,网友:这是有技巧的“洗稿”

来源&#xff1a;整理自新智元、Reddit、知乎等不是吧&#xff1f;清华自动化本科&#xff0c;香港科技大学硕士生发表的顶会论文竟然是抄的&#xff1f;而且抄袭对象还是另一篇顶会论文&#xff1f;近日&#xff0c;眼尖的网友发现两篇分别发表在 ICML 2021 和 ICCV 2021 两大…

MATLAB深度学习入门

1. 加载图像 1.1 使用imread函数加载图像&#xff0c;可以加载GIF、JPEG、PNG等大多数标准文件格式图像。 Import an image img imread("file.jpg")1.2 采用**imshow()**来显示图像。 imshow(img)1.3 采用alexnet函数可以创建预定义的深度网络AlexNet的副本。 de…

SpringBoot笔记整理(三)

SpringBoot笔记整理&#xff08;一&#xff09; SpringBoot笔记整理&#xff08;二&#xff09; SpringBoot笔记整理&#xff08;三&#xff09; SpringBoot笔记整理&#xff08;四&#xff09; Web开发 1、使用SpringBoot&#xff1a; 1&#xff09;创建SpringBoot应用&…

图神经网络,如何变深?

来源&#xff1a;智源社区版式制作&#xff1a;Camel撰文&#xff1a;侯振宇编辑&#xff1a;贾 伟现实世界中很多很多任务可以描述为图(Graph)问题&#xff0c;比如社交网络&#xff0c;蛋白质结构&#xff0c;交通路网数据&#xff0c;图是一个很值得研究的领域。近年来&am…

机器学习分类与性能度量

机器学习分类与性能度量 数据集:训练集(Training Set)、验证集(Validation Set)和测试集(Test Set) 1、 当模型无需人为设定超参数&#xff0c;所用参数都通过学习得到&#xff0c;则不需要验证集。验证集适合多个不同超参数训练多个模型&#xff0c;通过验证集&#xff0c;…

中国人民大学孟小峰教授:“科学数据智能——人工智能在科学发现中的机遇与挑战”...

来源&#xff1a;国家自然科学基金委员会微信公号 孟小峰 博士&#xff0c;中国人民大学教授&#xff0c;博士生导师&#xff0c;CCF会士。主要研究方向为数据库理论与系统、大数据管理系统、大数据隐私保护、大数据融合与智能、大数据实时分析、社会计算等。摘 要随着全球各科…

Java 面向对象语言基础

面向过程 就是分析出解决问题所需要的步骤&#xff0c;然后用函数把这些步骤一步一步实现&#xff0c;使用的时候一个一个依次调用就可以了。 面向对象 是把构成问题事务分解成各个对象&#xff0c;建立对象的目的不是为了完成一个步骤&#xff0c;而是为了描叙某个事物在整个解…