数据结构与算法基础

数组与矩阵

数组类型存储地址的计算
一维数组 a[n]a[i]的存储地址为:a+i*len
二维数组 a[m][n]a[i][j]的存储地址为(按行存储):a+(i*n+j)*len
a[i][j]的存储地址为(按列存储):a+(j*m+i)*len

一维数组:

a[i]是数组a的第i个元素,整个数组的首地址是a,偏移量是i*len。也就是每一个数组元素占用的字节数,i通常等于0。a[0]的存储地址未a,a[1]的存储地址(若每个数组i元素只占用一个字节len)是a+1。

二维数组:

在系统当中,并不是真正的开辟一个二位空间,而是按顺次
如图
按行存:
a+(i*n+j)*len ,i是位置在第几行-1,j是第几列-1

1234
567
按列存:
14710
258
369

在操作系统中,页面置换算法在进行置换时,缺页的问题。有时就要结合按行存储、按列存储来综合讨论
题:已知5行5列的二位数组a中各元素占用两个字节,求元素a[2][3]按行优先存储的存储地址?
答:a[2][3]的意思是第a[2]这一行的a[3]列,如图

a[0]012345
a[1]012345
a[2]0123

地址=a+(2*5+3)*2

稀疏矩阵:

一个矩阵中所记录的元素中大量的元素等于零 就是稀疏矩阵

一般存储为上三角或者下三角

代入法求解

线性表

常见两种存储方式

顺序存储结构:顺序表
开辟了连续空间,顺次把这个表存进来,采用的是一维数组的方式存储信息。

链式存储结构:链表
1.分为:单链表、循环链表、双向链表
2.链表的操作:
单链表删除节点:

| head |—>| a1 | —>|a2 | —>|a3 |
|-|-|–|–|–|–|–|–|
删除a2,a1就直接将指针指向a3。 p.next = q.next

单链表插入节点:
s.next=p.next ,p.next=s

双向链表删除节点:

双向链表插入节点:

顺序存储与链式存储对比

1.空间密度 顺序更优 (因链式要存储指针)
2.容量分配 链式更优 (链式动态、顺序事先确定)
3.查找运算 一样(O(n/2))
4.读运算 顺序更优
5.插入运算 链式更优(顺序全部向后移动一格)
6.删除元素 链式更优

广义表

树与二叉树

排序与查找

算法基础及常见算法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值