百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

数据结构串和数组(二)(数据结构串的概念)

myzbx 2025-07-01 22:12 5 浏览

数组的基本概念

数组是一个二元组(idx,value)的集合,对每个idx,都有一个value值与之对应。idx称为下标,可以由一个整数、两个整数或多个整数构成,下标含有d(d≥1)个整数称为维数是d。

数组按维数分为一维、二维和多维数组。

一维数组A是n(n>1)个相同类型元素a0,a1,…,an-1构成的有限序列,其逻辑表示为A=(a0,a1,…,an-1),其中,A是数组名,ai(0≤i≤n-1)是数组A中序号为i的元素。

一个二维数组可以看作是每个数据元素都是相同类型的一维数组的一维数组。

以此类推

数组具有以下特点

(1)数组中各元素都具有统一的数据类型。

(2)d(d≥1)维数组中的非边界元素具有d个前驱元素和d个后继元素。

(3)数组维数确定后,数据元素个数和元素之间的关系不再发生改变,特别适合于顺序存储。

(4)每个有意义的下标都存在一个与其相对应的数组元素值。


d维数组抽象数据类型

数组的主要操作是存取元素值,没有插入和删除操作,所以数组通常采用顺序存储方式来实现。

一维数组

一维数组的所有元素依逻辑次序存放在一片连续的内存存储单元中。

其起始地址为第一个元素a0的地址即LOC(a0)。

假设每个数据元素占用k个存储单元。

则任一数据元素ai的存储地址LOC(ai)就可由以下公式求出

d维数组

mn列的二维数组Am×n=(aij)为例讨论(二维数组也称为矩阵)。

按行优先存储

假设每个元素占k个存储单元,LOC(a0,0)表示a0,0元素的存储地址。对于元素aij

ai,j前面有0~i-1共i行,每行n个元素,共有i×n个元素。

在第i行中前面有a[i,0..j-1],共j个元素。

合起来,ai,j前面有i×n+j个元素。

按列优先存储

假设每个元素占k个存储单元,LOC(a0,0)表示a0,0元素的存储地址。对于元素aij

ai,j前面有0~j-1共j列,每列m个元素,共有j×m个元素。

在第j列中前面有a[0..i-1,j],共i个元素。

合起来,ai,j前面有j×m+i个元素。则:

例子:设有二维数组a[1..50,1..80],其a[1][1]元素的地址为2000,每个元素占2个存储单元,若按行优先存储,则元素a[45][68]的存储地址为多少?若按列优先存储,则元素a[45][68]的存储地址为多少?

按行优先存储

元素a[45][68]前面有1~44行,每行80个元素,计44×80个元素。

在第45行中,元素a[45][68]前面有a[45][1..67]计67个元素,这样元素a[45][68]前面存储的元素个数=44×80+67。

LOC(a[45][68])=2000+(44×80+67)×2=9174。


例子:设有二维数组a[1..50,1..80],其a[1][1]元素的地址为2000,每个元素占2个存储单元,若按行优先存储,则元素a[45][68]的存储地址为多少?若按列优先存储,则元素a[45][68]的存储地址为多少?

按列优先存储

元素a[45][68]前面有1~67列,每列50个元素,计67×50个元素。

在第68列中,元素a[45][68]前面有a[1..44][68]计44个元素,这样元素a[45][68]前面存储的元素个数=67×50+44。

LOC(a[45][68])=2000+(67×50+44)×2=8788。


特殊矩阵的压缩存储

对称矩阵的压缩存储

三角矩阵的压缩存储

对角矩阵的压缩存储

稀疏矩阵


一个阶数较大的矩阵中的非零元素个数s相对于矩阵元素的总个数t十分小时,即s<<t时,称该矩阵为稀疏矩阵。

例如一个100×100的矩阵,若其中只有100个非零元素,就可称其为稀疏矩阵。


稀疏矩阵和特殊矩阵的不同点:

特殊矩阵的特殊元素(相同元素、常量元素)分布有规律。

稀疏矩阵的特殊元素(非0元素)分布没有规律。


稀疏矩阵的三元组表示


三元组表示中每个元素的类定义如下:

设计稀疏矩阵三元组存储结构类TupClass如下:

TupClass类中包含如下基本运算方法:

其中,data列表用于存放稀疏矩阵中所有非零元素,通常按行优先顺序排列。这种有序结构可简化大多数稀疏矩阵运算算法。

稀疏矩阵的十字链表表示

每个非零元素对应一个结点

每行的所有结点链起来构成一个带行头结点的循环单链表。以h[i](0≤i≤m-1)作为第i行的头结点。

每列的所有结点链起来构成一个带列头结点的循环单链表。 以h[i](0≤i≤m-1)作为第i列的头结点。

行、列头结点可以共享

增加一个总头结点,并把所有行、列头结点链起来构成一个循环单链表

为了统一,设计结点类型如下:

相关推荐

每日C语言-快速排序(c语言快速排序怎么排)

定义:快速排序是一种常见的排序算法,基于分治的思想。其基本思想是选择一个基准数,将待排序数组分为两个子数组,一个子数组中的所有数字都比基准数小,另一个子数组中的所有数字都比基准数大。然后对这两个子数组...

【每天学习一个EXCEL函数】SORT 函数(万能排序函数)

=SORT(数组[排序依据],[排序顺序],[按列])其中:排序顺序1是升序,-1是降序,不填时默认为1。按列FALSE为竖向排序,True为横向排序,不填时默认FALSE。第3和第4参数是可以...

C语言排序方法——冒泡排序详解!你学会了吗?

冒泡排序法的基本思路为:每次将相邻的两个数比较,将小的调在前面。举个例子,如果有6个数:9,8,5,4,2,0。第一次先将最前面的两个数9和8对调。第二次将第2个数和第3个数对调(9和5)······...

PHP排序算法:计数、选择、插入、归并、快速、冒泡、希尔、堆

1.冒泡排序算法//冒泡排序算法php//author:Hengda//$arr待排序数组//$modefalse正序,true倒序functionbubbleSort(&$arr,...

灵魂拷问:如何检查 Java 数组中是否包含某个值?

作者|沉默王二责编|Elle在逛programcreek的时候,我发现了一些专注细节但价值连城的主题。比如说:如何检查Java数组中是否包含某个值?像这类灵魂拷问的主题,非常值得深入地研...

Java排序之冒泡排序(java冒泡排序选择排序)

今天来给大家介绍一下排序算法之冒泡排序jwt简介冒泡排序:(BubbleSort)是一种简单的交换排序。之所以叫做冒泡排序,因为我们可以把每个元素当成一个小气泡,根据气泡大小,一步一步移动到队伍的一...

PHP 数组排序:使用心得、示例代码和问题解决笔记

PHP数组排序:使用心得、示例代码和问题解决笔记在PHP开发中,数组排序是一项常见的任务。它可以帮助我们对数组中的元素进行排序,以便更好地管理和处理数据。在本文中,我将分享一些关于PHP数组排序的使...

「PHP」常用四种排序算法以及性能对比

作为一名合格的PHPer怎么能不接触到算法这个高大上的东西了,今天就来针对初学者来说一说最基础的4种排序算法:冒泡排序、选择排序、插入排序、快速排序(分区排序)。冒牌排序核心思想:比较相邻两个元素的大...

在嵌入式用C实现一个数组随机排序

在某些应用场景中,可能需要将一个数组的元素重新随机排列,我们可以称之为洗牌算法。其原理并不复杂,就是需要遍历整个数组,如果数组有n个元素,每当遍历到第i个数组元素时(i为数组元素的索引),再从0...

查询函数Choose、Lookup、Hlookup、Vlookup应用技巧解读

Excel中的查找和引用函数主要用于查找工作表中的所需内容,还可以获得工作表中的单元格位置或表格大小等信息,如果将查找和引用函数配合其他的Excel函数使用,将会发挥更强大的功能。常用的查询表中的数...

等了它N年,SORT函终于来了,可以让Excel表格自动排序

今天我们来学习一个Excel中的新函数,SORT函数,它的作用是对某一个数据区域进行排序,之前是OFFICE365的专属函数,现在WPS也支持这个函数了,我觉得是时候跟大家讲解下它是的使用方法,这个函...

js数组常用方法总结(js数组常用的方法及用法)

首先说明,本文没技术含量,都是js的知识,只是为以后查阅方便。另外我们开了一个免费的讲解web前端课程,有兴趣的朋友可以去看,详情地址:http://fe.qietu.com/forum.php1、创...

Excel新公式,好用的SORT排序公式,1分钟学会!

最新版本的Excel,里面有一个SORT函数公式,是用来排序的,特别好用,1分钟学会1、Sort诞生背景在排序的时候,我们有一个痛点,举个例子,当我们统计数据时,会下表的任务完成率排序,降序排列其中的...

[西门子PLC] SCL编程实例:1200/1500PLC不定长数组选择排序运用

前景介绍:01选择排序原理;选择排序算法首先从第1个位置开始对全部元素进行选择,选出全部元素中最小的给该位置,再对第2个位置进行选择,在剩余元素中选择最小的给该位置即可;以此类推,重复进行“最小元素”...

图解简单选择排序,超详细非常好理解

1.基本概念简单选择排序(SelectSort)真的是人如其名,一是它真的非常简单,二是它主要依靠选择和交换操作来进行排序。可以将简单选择排序实现为稳定的排序算法,也可以实现为不稳定的排序算法。我...