在软件水平考试中,数据结构与算法基础的相关内容是考试上午进行的,那么,接下来将对有关数据结构的内容进行整理和归纳,以便于在整个的软考准备阶段能够更加清楚和有效率的进行学习和回忆。
以下均为个人针对于数据结构的相关内容的整理,后期根据深入的程度不断地完善和改进,如果有什么错误或者不足,希望可以提出来,一起进步。
常用的数据结构:
数组(静态数组,动态数组),线性表,链表(单向链表,双向链表,循环链表),队列,栈,树(平衡数,二叉树,查找树,堆,线索树),图等的定义,存储和操作,HASH(存储地址计算,冲突处理)
常用的算法:
- 排序,查找,数值计算方法,字符串处理方法,初级压缩算法,递归,图的相关计算
- 算法与数据结构的关系,算法效率,算法设计,算法描述(流程图,伪代码,决策表),算法的复
那么,我们在明确基本的数据结构和常用算法之后,就得知道在整个的软考中级数据库中,这部分的分值其实所占比例不是很大,而且对于代码掌握的要求也不是很高,但是必须在整个的学习当中,我们还是必须要明白他们之间的关系,这样才有利于我们在后期的学习和考试中,有一个夯实的基础。
我们来看一下,在本阶段中的考点:
1.线性表
2.二叉树
3.图
4.排序算法
5.Hash (散列算法)
6.查找算法
我们在主要的学习当中需要着重注意以上的几点,但在这六种考点中,最需要注意1.线性表,5.Hash和6.查找算法的使用与掌握。那么,在明确相关的考点和需要注意的问题之后,我们来看一下有关数据结构的内容。
数据结构可以分为两大类:
按逻辑分类:
1. 集合(无逻辑关系)
2. 线性结构(线性表):① 一维数组 ②队列 ③栈
3.非线性结构:①树 ②图 ③多维数组
按存储结构分类:
1.顺序存储结构
2. 链式存储结构
3.索引存储结构
4.散列存储结构
接下来将根据以上进行归类学习:
一、线性表 (顺序表,链表)
1.顺序表(连续不间断)
2.链表(离散单独的):又分为 单链表,循环链表,双链表。
单链表(只单一方向的移动,没有后继节点,最后一个指针域为NULL)
循环链表(与单链表相似,但有后继节点,指针域不为空且结点指向头节点)
双链表(可以朝两个方向的移动,有两个指针域):双链表灵活度和开支都大于单链表
那么明确链表的基础知识后,需要明白相关链表的操作:
1.单链表结点的删除 :
2.单链表结点的插入
3.双链表结点的删除
4.双链表结点的插入
注: 在单链表和双链表结点做删除处理的时候,其操作方法一样,均为前一结点的指针域直接指向被删结点的后继/但是在做插入操作的时候,需要注意并不是前驱结点的指针域直接指向后继节点就行,二者的方法有些不同。
已经把顺序表和链表进行了简单说明,那么两者间的优劣又是如何,接下来就要将顺序表和链表进行比较
性能类别 | 具体项目 | 顺序存储 | 链式存储 |
空间性能 | 存储密度 | =1 更优 | <1 |
容量分配 | 事先确定 | 动态改变 更优 | |
时间性能 | 查找运算 | O(n\2) | O(n\2) |
读运算 | O(1) 更优 | O(【n+1】)/2) 最好情况为1 最坏情况为n | |
插入运算 |
O(n/2)最好情况为0 最坏情况为n |
O(1) 更优 | |
删除运算 | P(【n-1】/2) | O(1) 更优 |
这个表可以明显的看出两者在空间性能和时间性能上面的区别,各有各的优点,各也由各的缺点。