数据结构与算法(一)-软件设计(十七)

设计模式(十五)-面向对象概念icon-default.png?t=N176https://blog.csdn.net/ke1ying/article/details/129171047

  • 数组

存储地址的计算

一维数组a[n],当a[2]的存储地址为:a+2*len,如果每一个数组元素只占用一个字节,那么

a[2]的位置就是a+2。

二维数组a[n][m]分为两种,a[2][3]数组计算如下:

按行存:a+(2*m+3)*len

按列存:a+(3*n+2)*len

题目:已知五行五列的二维数组各占两个字节,那么a[2][3]按行优先存储的存储地址是多少?

按行所以是:a+(2*5+3)*2 = a+26

  • 稀疏矩阵

上三角矩阵:在矩阵中下标分别为i和j的元素,对应的一维数组的下标计算公式为

(2n-i+1)*i/2+j。

下三角矩阵:在矩阵中下标分别为i和j的元素,对应的一维数组下标计算公式为

(i+1)*i/2+j

三、数据结构

数据结构就是计算机存储数据的方式。

数据逻辑结构有,线性结构 和 非线性结构

非线性结构 又可以分为 树形结构和图。树形结构没有环路,图则由环路。

线性表的概念(a1,a2...aN)

有两种常见存储方式:1、顺序存储结构(顺序表)2、链式存储结构(链表

顺序表就是一维数组方式存信息。

链表 又分为 单链表、循环链表、双向链表

循环链表好处,头和尾是相联的,当在最后的时候,可以继续next找。

双向链表指针可以前后移动。

他们头节点都不存信息的,为了后续处理数据一致。

单链表的删除,a1,a2,a3,当删除a2时候,就是把a1的next指针指向a3。(aPoint的

Next指向a2。bPoint的next指向a3。所以删除a2的操作就是aPoint的next=bPoint的next)

单链表的插入,a1和a3之前插入a2,就是把a1Point的next指向a2,a2Point的next指向a3。

顺序存储与链式存储

空间性能

顺序存储的【存储密度】=1(100%),更优,链式存储的【存储密度】<1。

(意味着顺序存储的空间密度没有空间上的浪费)

顺序存储的【容量分配】事先确定(因为他需要连续的空间事先分配),链式存储的【容量分配】动态改变,更优。

时间性能

【查找运算】:顺序存储的O(n/2),链式的O(n/2)。

(当有序的话,顺序存储可以二分查找,性能就更优)

【读运算】:顺序存储O(1)更优,链式O([n+1]/2)最好情况为1,最坏情况为n。

(指定某个信息读取出来,顺序存储只需要把a直接读出来。而链式表则需要一直通过next指针来找到a)

【插入运算】:顺序存储O(n/2),最好情况是0,最坏情况是n。链式O(1),更优。

【删除运算】:顺序存储是O([N-1]/2),链式O(1)更优。

        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

后端从入门到精通

你的鼓励是我最大的动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值