数据结构慨念总结1
1.数据结构的基本概念
1.数据结构的定义:带结构的数据元素的集合
2.数据结构的逻辑结构:线性表(一对一),树(一对多),图(多对多)
3.数据元素的存储结构:顺序存储结构(可直接通过下标访问),链式存储结构(通过指针进行访问)
4.思维导图
2.算法
1.算法定义:对特定问题求解步骤的一种描述,它是指令的有限序列,每一条指令表示一个或多个操作
2.算法的特性:有穷性,确定性,可行性,输入,输出
3.算法的描述:自然语言,流程图,程序设计语言,伪代码
4.算法设计目标:正确性,可使用性,可读性,健壮性,时间效率高与存储量低
5.算法的效率分析:时间复杂度(最好,最坏,平均),空间复杂度
6.思维导图
3.线性表
-线性表的基本运算:初始化,销毁,判断,查找,插入,删除
1.顺序表
-优点:可通过下标访问
-缺点:顺序表在非表尾的地方插入,删除时,其他元素也要移动,使时间复杂度更高
2.链表(节点=数据元素+指针)
-优点:链表在任意位置进行插入,删除时,只需改动对应的指针即可,不用移动其他元素
-缺点:访问的时候需要for循环,不停的next,时间复杂度较高
1.单链表(头插法或尾插法)
2.双链表:相对单链表,它有两个指针域,指向前驱节点和后继节点,这样的话,就很方便的查找一个节点的前驱和后继。
3.循环链表:尾指针指向头节点
4.思维导图
3.栈
1.特点:是一种操作受限的线性表,只能在栈顶进行操作,先进后出
2.操作:进栈(push),出栈(pop),判断栈空,取栈顶元素等
3.类型:顺序栈,链栈
4.运用:后缀表达式的转换,求解迷宫问题
递归与栈的关系
1.递归的特点:自我调用,必须有递归出口
2.递归的过程是一个不断压栈的过程,遇到递归出口时再依次退栈。
4.队列
1.特点:是一种操作受限的线性表,只能在队头删除,在队尾插入,先进先出
2.操作:入队,出队,判断队空
循环队列
-用于解决队列的假溢出问题
方法:少用一个元素空间,队空时'q.rear=q.front',队满时'q.front=(q.rear+1)%m'
-栈和队列思维导图
5.字符串
1.定义:由零或多个字符组成的1有限序列。注意点,空串(长度为零)不等于空格串。
2.基本操作:与其他的线性表差别较大,通常以整体作为操作对象。
串的模式匹配
-BF算法
1.特点:匹配失败时,i指针需要不停的回溯
2.最坏时间复杂度为O(n*m)
-KMP算法
1.特点:i指针不需要回溯
2.方法:利用next[j]函数计算出,失配后需要与模式串中的第几位进行比较。或者用nextval[j]进行计算
4.数组和广义表
-这个不太熟悉,就写一些主要的内容。
1.数组时多维结构,而存储空间是一维结构。
二维数组的存储位置公式:行优先:LOC(i,j)=LOC(0,0)+(ni+j)L
5.疑难问题及解决方案
-以下是我对KPM算法中的next和nextval求解的一些理解
s= a b c a b a a
next: 0 1 1 1 2 3 2
nextval:0 1 1 0 1 3 2
过程如下:求next值时,第一位是0,第二位是1,接下来只要判断前后缀串的个数就行,next值就是前缀串或后缀串个数加一。
接下来就是nextval值,第一个nextval值是0,第二个nextval就要和第一个比较,如上图,第二个是b第一个是a,不相同就取1,
相同就取0.我们再看第五位,该位置是b,next值是2,那nextval值要怎么求呢,next值是2,就把b和第二位比较,第二位也是b,
即相同,那么再看第二位b的next值是1,就把b和第一位的a比较,显然不相同,就取第二位b的next值作为第五位b的nextval值。
那如果相同,就把a的next值作为第五位b的nextval值。
6.总结与反思
1.对一些重难点,如KMP算法和循环队列问题,在课后没有及时的巩固和消化。
2.课后的实际操作做的太少,对线性表的一些基本操作还不够熟悉。
3.以后会多做pta上的习题,注意课后知识的巩固。