数据结构第四章小结

数据结构第章小结

一、第四章主要学习了:串、数组和广义表

 

(1)串限定了表内的元素为字符。串有两种基本存储结构:顺序存储和链式存储,但多采用顺序存储结构。

 

2)串常用的算法是模式匹配,主要有BF算法和KMP算法。BF算法实现简单但存在回溯,效率低,时复杂度为O(m*n)。 KMP算法消除回溯,提高了效率,时间复杂度为O(m+n)

 

3)数组一般采用顺序存储结构,存储多维数组时可将其确定转换为一维数组(可按行或者列转换)。

 

(4)特殊矩阵(对称矩阵、三角矩阵、对角矩阵)的压缩储存,即为多个值相同的元只分配一个存储空间,对零元不分配空间。

 

5)广义表(递归的表):可以兼容线性表、数组、树和有向图等各种常用的数据结构。常用操作有取表头和取表尾。通常采用链式存储结构:头尾链表的存储结构和扩展线性链表的存储结构。

 

二、完成作业或实践时的心得体会

 

1、在完成作业模式匹配时,一直用的都是BF算法。基本上其他测试点都过了,后来就剩下最后一个测试点超时,本来想尝试用KPM算法来写的,但是那是还不是很理解KPM算法,琢磨了好久都还没看懂,就先在原来的代码上尝试优化一下,刚好上次分组讨论时学到可以从字符串两头一起比较,就用了这个方法,然后就可以过测试点了。后来写完代码看了些同学对KPM算法的小结还是有很多收获的,现在大概能弄明白些了。

 

2、在完成实践1-还是求交集时,我用了两种方法来写,一种是排序然后找他们的交集(先用),另一种就是读入的集合元素作为数组下标的方法(后用)。第一种在最后一个测试点出现了超时,然后我改用了第二种方法,但是还是在最后一个测试点出现段错误,我看了同学的小结说要申请长度更大的数组空间,但用了后发现没有解决,反而其他测试点也出现了段错误,我没弄明白所以还是用回第一种方法去优化了。优化方法:先对两个集合排升序,然后找交集时就不用双重循环,用一个循环分三种情况就比较,这样可以节省时间。

 

3、讨论:这次讨论主要是stringchar*的问题以及一些特殊情况处理的问题(有时想问题要深思,考虑更多方面的问题)。

1)若有:string s; //string 类的默认构造函数会生成一个空串,长度为 0 这种情况下对 s 的任何下标访问都是错误的

2)不能把‘\0’看做string对象的结尾符。

3)stringchar[]互相赋值时,可采用c_str()data()copy(string,len,pos)的方法。

 

三、上一阶段的目标完成情况,接下来的目标

 

1、这一阶段的话没有用KPM来写代码,还处于一种看明白但打起来可能还会有点陌生的状态,所以接下来有空要尝试打打KPM算法。

2、感觉这一章的学习好像学的理论知识比较多(除了串匹配),要是实际运用可能还不是很懂。

 

目标:

1)学好新知识的同时回顾旧知识,跟进老师教学进度。

2)希望能把学的运用起来

你可能感兴趣的:(数据结构第四章小结)