软件设计师——数据结构与算法基础

数据结构与算法基础设计到的内容

  • 数组与矩阵
  • 线性表(⭐⭐⭐)
  • 广义表
  • 树与二叉树(⭐⭐⭐)
  • 排序与查找(⭐⭐⭐)
  • 算法基础及常见的算法(⭐⭐⭐)
数组

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

例:已知五行五列的二维数组a中的各元素占两个字节,求元素a[2][3]按行优先存储的存储地址?
a+(2*5+3)*2

稀疏矩阵

如果一个矩阵中记录的元素大量为0,则被称之为稀疏矩阵。
在这里插入图片描述
上三角矩阵和下三角矩阵在存储时会将该矩阵按行优先或者时列优先压缩连续存储在一个数组中。

数据结构的定义

1.什么是数据结构?
数据结构就是计算机存储和组织数据的一种方式。不同的数据结构在存储和使用上会存在很大的差异。
2.数据逻辑结构分为线性结构(一条线)和非线性结构(树,图)。
分成不同的结构,主要还是为了进行分类探讨和研究。
从广义上来讲,图可以包含树,树可以包含线性结构。

线性表的定义

1.线性表 (a1 ,a2 ,a3 ,a4 …,an
2.线性表常见的两种存储结构:顺序存储结构(顺序表)和链式存储结构(链表)
(区别:链表不一定是连续的,通过指针指向下一个数据的地址)
在这里插入图片描述
链表的基本操作:

  • 单链表删除节点
  • 单链表插入节点
  • 双向链表删除节点
  • 双向链表插入节点
线性表——顺序存储与链式存储对比

在这里插入图片描述
这里涉及到的查找算法时间复杂度指的是顺序查找,不涉及到二分查找等查找算法。

线性表——队列与栈

在这里插入图片描述
在循环队列中为了清楚的区分队空和队满,选择少存一个元素,即当tail指向空间的下一个空间是head指向的空间时,表示队满。

例:元素按照a,b,c的次序进入栈,请尝试写出其所有可能的出栈序列。(注意:入栈指的并不是一次性全部入栈)

广义表

广义表是n个表元素组成的有序序列,是线性表的推广。
通常用递归的形式进行定义,记作:LS=(a0 ,a1 ,…,an

注:其中LS是表名,ai 是表元素,它可以是表(称作子表),也可以是数据元素(称为原子)。其中n是广义表的长度(也就是最外层包含的元素个数),n=0的广义表为空表;而递归定义的重数就是广义表的深度,直观地说,就是定义中所含括号的重数(原子的深度为0,空表的深度为1)。

基本运算:取表头head(Ls)和取表尾tail(Ls)
若有:LS1=(a,(b,c),(d,e))
表头head表示最外层的第一个元素,表尾tail是除了表头之外的所有元素
head(LS1)=a
tail(LS1)=((b,c),(d,e))

对应的LS1的长度为3 (最外层包含的元素的个数),深度为2 (表示括号的重数)

例如:有广义表LS1=(a,(b,c)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

MelanceXin

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值