软考笔记(一)

来源:互联网 发布:sigma.js 示例 编辑:程序博客网 时间:2024/04/28 18:46

   软考视频这一部分讲的数据结构与算法,对应自考《数据结构与导论》,所以看视频时非常轻松,虽然考过但还想做个总结做为笔记。

一、整体结构


二、线性结构

2.1 队列(queue)

   队列是“先进先出”的线性表,就像去食堂打饭排队,排队在前的先打到饭,不允许“插队”,新来的只能排在队尾。

   包含顺序队列和循环队列,在循环队列(CQ)中,设头为front,尾是rear,则

      判断队列满的条件为:(CQ.rear+ 1)% maxsize = CQ.front

      判断队列为空的条件为: CQ.rear = CQ.front

2.2 栈(stack)

   栈是“先进后出”的线性表,对表的操作只能在栈顶完成。就像一摞洗好的盘子,洗一个摞一个,用的时候总是从最上面取走。

2.3 线性表

2.3.1 顺序表

  顺序表是表中的结点依次存放在一组连续的存储单元

2.3.2 链表

a)单链表

 一个数据元素和一个指针组成单链表的一个结点,就像火车的每节车厢和车钩。各个结点在内存中的存储位置不一定连续,可存放于不同的位置。

插入:

解析:插入s结点后,s指向a2的指针式p的next指针,p又指向s。所以:s->next=p->next,p->next = s

删除

解析:删除q结点,原本p指向a2的指针指向了a3,所以:p->next= q->next

b)循环链表

 最后一个结点的指针指向第一个结点,构成一个环

c)双链表

  在单链表的每个结点中再设置一个指向其前驱结点的指针域,这样每个结点有2个指针

插入:

解析:插入结点x后,q指向a2的指针是a1指向a2的指针,a2的前驱指针指向x,所以有:

q->prior = p;

q->next = q->next;

p->next = q;

q->next->prior = q;

删除:

解析:删除a2结点,它的前驱结点的后继结点指向a3,a2的后继结点的前驱结点指向a1,所以有:

p->next->prior= p->prior;

p->prior->next= p->next;


三、非线性结构

3.1 图

a)图分外无向图和有向图,由顶点和边组成。无向图顶点的表示(a,b),有向图顶点的表示<a,b>

b)顶点的度:无向图顶点V的度为与该顶点相关联的边的数目,有向图为入度(以顶点V为终点的弧)+ 出度(以顶点V为起点的弧)

c)存储结构:邻接矩阵和邻接表

无向图的邻接矩阵:

有向图的邻接矩阵:

带权值有向图的邻接表:

d)图的遍历:从某个顶点出发系统的访问图的每个顶点,并且每个顶点只被访问一次


3.2 树

a)相关术语

结点的度:树上任意结点所拥有的子树的数目

叶子:度为0的结点

树的度:一棵树中所有结点的度的最大值

b)二叉树的遍历

前序遍历:先访问根结点,再访问叶子结点

中序遍历:先访问左子树,再访问根,最后访问右子树

后序遍历:先访问左右子树最后访问根

例:
 

前序遍历:ABDECF

中序遍历:DBEAFC

后序遍历:DEBFCA

c)树和二叉树的转换:前序遍历不变,树的中序和二叉树的后序相同,树的孩子结点转为左子树结点,兄弟结点转为右子结点

四、查找

4.1顺序查找:从表的一端开始,按顺序对比当前结点与关键字是否相等。ASL(平均查找长度):(n+1)/2

4.2二分查找:每次用给定的值与处在表中间位置的数据元素进行比较。ASL=log2(n+1) -1

4.3 分块查找:根据索引找到相应的块,再在块中查找。ASL== log2(n/s + 1) + s/2

五、排序




0 0