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

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

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

数组的基本概念

数组是一个二元组(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列的头结点。

行、列头结点可以共享

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

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

相关推荐

如何设计一个优秀的电子商务产品详情页

加入人人都是产品经理【起点学院】产品经理实战训练营,BAT产品总监手把手带你学产品电子商务网站的产品详情页面无疑是设计师和开发人员关注的最重要的网页之一。产品详情页面是客户作出“加入购物车”决定的页面...

怎么在JS中使用Ajax进行异步请求?

大家好,今天我来分享一项JavaScript的实战技巧,即如何在JS中使用Ajax进行异步请求,让你的网页速度瞬间提升。Ajax是一种在不刷新整个网页的情况下与服务器进行数据交互的技术,可以实现异步加...

中小企业如何组建,管理团队_中小企业应当如何开展组织结构设计变革

前言写了太多关于产品的东西觉得应该换换口味.从码农到架构师,从前端到平面再到UI、UE,最后走向了产品这条不归路,其实以前一直再给你们讲.产品经理跟项目经理区别没有特别大,两个岗位之间有很...

前端监控 SDK 开发分享_前端监控系统 开源

一、前言随着前端的发展和被重视,慢慢的行业内对于前端监控系统的重视程度也在增加。这里不对为什么需要监控再做解释。那我们先直接说说需求。对于中小型公司来说,可以直接使用三方的监控,比如自己搭建一套免费的...

Ajax 会被 fetch 取代吗?Axios 怎么办?

大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发!今天给大家带来的主题是ajax、fetch...

前端面试题《AJAX》_前端面试ajax考点汇总

1.什么是ajax?ajax作用是什么?AJAX=异步JavaScript和XML。AJAX是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换,AJAX可以使网页实...

Ajax 详细介绍_ajax

1、ajax是什么?asynchronousjavascriptandxml:异步的javascript和xml。ajax是用来改善用户体验的一种技术,其本质是利用浏览器内置的一个特殊的...

6款可替代dreamweaver的工具_替代powerdesigner的工具

dreamweaver对一个web前端工作者来说,再熟悉不过了,像我07年接触web前端开发就是用的dreamweaver,一直用到现在,身边的朋友有跟我推荐过各种更好用的可替代dreamweaver...

我敢保证,全网没有再比这更详细的Java知识点总结了,送你啊

接下来你看到的将是全网最详细的Java知识点总结,全文分为三大部分:Java基础、Java框架、Java+云数据小编将为大家仔细讲解每大部分里面的详细知识点,别眨眼,从小白到大佬、零基础到精通,你绝...

福斯《死侍》发布新剧照 &quot;小贱贱&quot;韦德被改造前造型曝光

时光网讯福斯出品的科幻片《死侍》今天发布新剧照,其中一张是较为罕见的死侍在被改造之前的剧照,其余两张剧照都是死侍在执行任务中的状态。据外媒推测,片方此时发布剧照,预计是为了给不久之后影片发布首款正式预...

2021年超详细的java学习路线总结—纯干货分享

本文整理了java开发的学习路线和相关的学习资源,非常适合零基础入门java的同学,希望大家在学习的时候,能够节省时间。纯干货,良心推荐!第一阶段:Java基础重点知识点:数据类型、核心语法、面向对象...

不用海淘,真黑五来到你身边:亚马逊15件热卖爆款推荐!

Fujifilm富士instaxMini8小黄人拍立得相机(黄色/蓝色)扫二维码进入购物页面黑五是入手一个轻巧可爱的拍立得相机的好时机,此款是mini8的小黄人特别版,除了颜色涂装成小黄人...

2025 年 Python 爬虫四大前沿技术:从异步到 AI

作为互联网大厂的后端Python爬虫开发,你是否也曾遇到过这些痛点:面对海量目标URL,单线程爬虫爬取一周还没完成任务;动态渲染的SPA页面,requests库返回的全是空白代码;好不容易...

最贱超级英雄《死侍》来了!_死侍超燃

死侍Deadpool(2016)导演:蒂姆·米勒编剧:略特·里斯/保罗·沃尼克主演:瑞恩·雷诺兹/莫蕾娜·巴卡林/吉娜·卡拉诺/艾德·斯克林/T·J·米勒类型:动作/...

停止javascript的ajax请求,取消axios请求,取消reactfetch请求

一、Ajax原生里可以通过XMLHttpRequest对象上的abort方法来中断ajax。注意abort方法不能阻止向服务器发送请求,只能停止当前ajax请求。停止javascript的ajax请求...