数据结构-线性结构

一.线性结构

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;我们很少停下来…

C++11新特性以及std::thread多线程编程

一 .C11新特性 1. auto 类型推导 1.1 当号右边的表达式是一个引用类型时&#xff0c;auto会把引用抛弃&#xff0c;直接推导出原始类型&#xff1b; 1.2 当号右边的表达式带有const属性时&#xff0c;auto不会使用const属性&#xff1b; 1.3 当const 和引用结合时&#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;系统会默认…

Zookeeper常用命令行及API

一、Zookeeper常用命令行 1.启动zookeeper客户端(在启动zookeeper集群后启动进行调试) zkCli.sh   2.查看帮助、操作历史 help、history 3.查看当前Znode的目录 ls /    ls2 /  (查看当前Znode的详细信息) 4.创建Znode (1)默认&#xff1a;create 路径 内容 create /Wy…

被骗两次?黄仁勋骗过世界的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…

Linux下生成指定大小文件(命令+Java程序)

1、dd命令 of&#xff1a;fileName为文件名称&#xff0c;例如test.txt &#xff1b; bs&#xff1a;设置一次复制的大小&#xff0c;例如1M&#xff1b; count&#xff1a;设置复制次数&#xff0c;例如100&#xff1b; dd if/dev/zero of<fileName> bs<一次复制…

C语言之随机数函数( rand() )的使用方法

文章出自个人博客https://knightyun.github.io/2018/04/25/c-rand-number&#xff0c;转载请申明。 在程序设计中&#xff0c;难免会使用到随机值函数&#xff0c;其原理与语法大多类似&#xff0c;接下来以C语言为例介绍其随机值函数 rand() 用法。 原理 引用百度百科&#xf…

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

来源&#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;国家对关键信息基础设施实行重…

hadoop碰到的 一个问题

在里面添加/usr/local/hadoop/etc/hadoop/log4j.properties log4j.logger.org.apache.hadoop.util.NativeCodeLoaderDEBUG 可以查看debug信息&#xff1a; [rootelk03 hadoop]# hdfs dfs -ls /19/02/26 01:19:37 DEBUG util.NativeCodeLoader: Trying to load the custom-built…

SpringBoot笔记整理(一)

SpringBoot笔记整理&#xff08;一&#xff09; SpringBoot笔记整理&#xff08;二&#xff09; SpringBoot笔记整理&#xff08;三&#xff09; SpringBoot笔记整理&#xff08;四&#xff09; 1、使用Spring Initializer快速创建Springboot项目 默认生成的Spring Boot项目&…

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

来源&#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 两大…