前言
总觉得这次的自考才是真正准备自考的样子,你付出了多少一定会有多少的回报,最终的感觉还是回归课本,做多少题最终还是要以课本为主啊,不管多细,反正是课本上的内容,还有课后题,非常重要了
在组长的带领下,我们把书看的已经很熟悉了,但是对于我来说逻辑上的东西好理解,但是代码题真的是一大硬伤啊,真的是不会写,很扎心了!
概述
逻辑结构(数学模型):集合,线性,树形,图结构
存储结构(物理结构):索引,顺序,散列,链式
数据,数据元素,数据项
算法分析:正确性,易读性,健壮性,时空性
线性表
线性表是线性结构,结点一对一的关系,如果结点不为零,则除起始节点没有直接前驱外,其他每个结点有且仅有一个直接前驱,除终端结点没有直接后继外,其他每个结点有且仅有一个直接后继
基本运算:初始化,求表长,读表元素,定位,插入,删除
线性表的顺序存储:最简单的存储方式
特点:依次存放,连续的存储单元,逻辑结构中相邻的结点存储位置也相邻
(也就是你放哪我放哪,依次往后放,而且整体的顺序存储是有固定大小的,所以会有存满的情况)
线性表中最频繁的是数据元素的比较和移动
(我觉得我最失误的地方是在最初看书的时候没有看插入,删除,定位这些书中给的基本运算的代码,这样没有一个印象,最后的时候导致没有印象而不会写)
插入:顺序存储时插入是在后面插入,最好的情况是在最后一个地方插入,时间复杂度为O(1) 最坏的情况是在头结点后面插入,时间复杂度为O(n)
查找第i位上的元素:不成功的情况下比较次数为 n+1(因为有岗哨的存在)
成功情况下比较次数为n-i+1
线性表的链接存储
一个数据元素和一个指针组成单链表的一个结点(像火车一样的一截连着一截,前一个结点存放下一个结点的地址,如果访问需要从头访问定位到需要访问的结点)
头指针
链接存储是动态分配空间的所以轻易不会存满
单链表:如上图所示
循环链表:将单链表中尾结点的指针指向头结点即为循环链表
双向循环链表:如下图
基本实现:初始化,求表长,读表元素,定位,插入,删除
以单链表的插入为例子:就像一排小朋友排好队拉着手,又来了一个小朋友来要插入进去,总要有两个小朋友打开让她进来,于是就是两个正在拉着手的小朋友松开手,让这个小朋友进来,她认识的那个小朋友告诉她另一个小伙伴是谁,然后她先去拉不认识的那个小伙伴再来拉认识的那个小伙伴,这样插入操作就完成了
(仔细看书,多看几遍,其实插入和删除的指针移动很简单)
顺序和链式的比较
查找:顺序表是随机存取 时间复杂度为O(1)
单链表需要从头遍历时间复杂度为O(n)
定位:基本操作为比较,所以时间复杂度都为O(n)
插入、删除:顺序表中需要查找比较,并且移动所以时间复杂度为O(n)
单链表中需要定位,所以时间复杂度为O(n)
暂时先写这些,后续可能会有更新接下来的章节!