软考软件设计师常考知识点:(三)数据结构

一、线性结构

考点1:线性表

顺序表:数据在内存中紧邻。

(1)顺序存储方式:数组的内存是连续分配的,并且是静态分配的,即在使用数组之前需要确定空间的大小,灵活性差。读数据快,其他操作效率慢。

|----|----|----|----|----|----|----|----|
| a0 | a1 | a2 | a3 | a4 | a5 | a6 | a7 |

(2)链表(linked-list)存储方式:链表的内存是不连续的。前一个元素紧邻的地址不一定是下一个元素。链表通过当前元素存储下个元素地址的方式把所有元素串起来。不需要连续空间,对内存友好。但是存储下个元素的地址,耗费更多空间。

特点:

①n个结点离散分布,彼此通过指针相联系。

②除头结点和尾结点外,每个结点只有一个前趋结点和一个后继结点。头结点没有前趋结点,尾结点没有后继结点。

③头结点并不存放有效数据,只存放链表首地址。其头结点的数据类型和首结点类型一样。

④加头结点的目的是方便对链表的操作,比如在链表头部进行结点的删除、插入。

【链表的分类】

单链表、循环链表、双向链表。

考点2:栈与队列

队列:先进先出

栈:先进后出

循环队列(通过整数取余运算实现)

队空条件:head=tail

队满条件:(tail+1)%size=head

队列长度:(tail-head+size)%size

循环队列的优点:

相比普通队列,此时入队和出队操作都不需要移动队列中的其他元素。

考点3:串

串的定义:串是仅由字符构成的有限序列,是一种线性表。一般记为S='a1a2a3...an',其中,S是串名,单引号括起来的字符序列是串值。

串的存储

顺序存储;链式存储。

串的几个基本概念

(1)空串与空格串

**空串:**长度为零,不包含任何字符。

**空格串:**由一个或多个空格组成的串。虽然空格是一个空白字符,但它也是一个字符,在计算串长度时要将其计算在内。

(2)子串与子序列

**子串:**由串中任意长度的连续字符构成的序列称为子串。含有子串的串称为主串。子串在主串中的位置是指子串首次出现时,该子串的第一个字符在主串中的位置。空串是任意串的子串。

**子序列:**一个串的"子序列"(subsequence)是将这个串中的一些字符提取出来得到一个新串,并且不改变它们的相对位置关系。

(3)串比较与串相等

串比较:两个串比较大小时以字符的ASCII码值(或其他字符编码集合)作为依据。实质上,比较操作是从两个字符串的第一个字符开始进行,字符的码值大者所在的串为大;若其中一个串先结束,则以串长较大者为大。

串相等: 指两个串长度相等且对应序号的字符也相同。

串的基本操作:

(1)赋值操作StrAssign(s,t):将串s的值赋给串t。

(2)连接操作Concat(s,t):将串t接续在串s的尾部,形成一个新的串。

(3)求串长StrLength(s):返回串s的长度。

(4)串比较StrCompare(s,t):比较两个串的大小。返回值-1、0和1分别表示s<t、s=t和s>t三种情况。

(5)求子串SubString(s,start,len):返回串S中从start开始的、长度为len的字符序列。

二、数组与矩阵

数组

|-----------------|---------------------------------------------------------------------------------|
| 数组类型 | 存储地址计算 |
| 一维数组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 |

注:下标一般从0开始。

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

间隔元素数量的计算口诀:

行标准,行标*总列数+列标,简称行列列。

列标准,列标*总行数+行标,简称列行行。

矩阵

|----------|------------------------------------------------------------------------------------------|---------------------------------------------------|
| 稀疏矩阵 | 示意图 | 要点 |
| 上三角矩阵 | 上三角矩阵示意图 | 在矩阵中下标分别为i和j的元素,对应的一维数组的下标计算公式为: (2n-i+1) ´ i/2+j |
| 下三角矩阵 | 下三角矩阵示意图 | 在矩阵中下标分别为i和j的元素,对应的一维数组的下标计算公式为: (i+1) ´ |

|------|-----------------------------------------------------------------------------------------|-------------------------------|
| 特殊矩阵 | 示意图 | 要点 |
| 对角矩阵 | 对角矩阵示意图 | 矩阵中的非零元素都集中在以主对角线为中心的对称带状区域中。 |

稀疏矩阵的表示形式:三元组表(行号,列号,元素值),例:(1,1,5),(1,2,10)等。

三、树

考点1:二叉树的存储与特性

1.树与二叉树的概念

结点(圆形)

分支(结点下面的线)

结点的度:该结点的子树数目

树的度:各结点度的最大值

叶子结点:度为0的结点-无分支

分支结点(非终端结点):度不为0的结点-有分支

内部结点:除根以外的分支结点

层次:根为第1层,以此类推

树的高度:一棵树的最大层次数-总层数

父结点、子结点、兄弟结点

2.二叉树的定义

二叉树是n(n≥0)个结点的有限集合,它或者是空树(n=0),或者是由1个根结点及两棵不相交的且分别称为左、右子树的二叉树所构成。可见,二叉树同样具有递归性质

空树:没有结点的树。

单结点树:就只有一个顶点结点。

二叉树:所有结点的度不大于2的树。

满二叉树:任意结点,度为0或2(除最后一层以外,所有结点的度都为2)

软考更多备考学习资料

2025软考考试资料下载PDF版_软考历年真题打包下载版_免费视频课程下载_软考教材下载推荐_思维导图下载_考前冲刺备考资料_历年真题电子版网盘下载-希赛网https://wangxiao.xisaiwang.com/rk/xxzl/n101.html?fcode=h1000118_e3072

相关推荐
少许极端7 小时前
算法奇妙屋(五)-链表
数据结构·算法·链表
木子.李3478 小时前
数据结构-算法C++(额外问题汇总)
数据结构·c++·算法
程序员莫小特9 小时前
老题新解|计算2的N次方
开发语言·数据结构·算法·青少年编程·信息学奥赛一本通
十重幻想11 小时前
PTA6-1 使用函数求最大公约数(C)
c语言·数据结构·算法
Ccc聪啊11 小时前
软件设计师-计算机网络-IP地址
软件设计师
青岛少儿编程-王老师11 小时前
CCF编程能力等级认证GESP—C++5级—20250927
java·数据结构·c++
于小汐在咯13 小时前
【软件设计师中级】计算机组成与结构(五):指令系统与计算机体系结构 - CPU的“思维语言“与架构蓝图
软件设计师
胖咕噜的稞达鸭14 小时前
C++中的父继子承:继承方式实现栈及同名隐藏和函数重载的本质区别, 派生类的4个默认成员函数
java·c语言·开发语言·数据结构·c++·redis·算法
笑口常开xpr14 小时前
【C++】模板 - - - 泛型编程的魔法模具,一键生成各类代码
开发语言·数据结构·c++·算法