数据结构学习笔记1
进度:静态分配顺序表+单链表
参考资料:b站 王道考研+小甲鱼
<
判断一个算法的效率时,函数中的常数和其他次要项常常可以忽略,而更应该关注最高项目、的阶数。
推导大O阶方法:
1、 用常数1取代运行时间中的所有加法常数
2、 在修改后的运行次数函数中,只保留最高阶项
3、 如果最高阶项存在且不是1,则去除系数
O(1)
口诀:常对幂指阶
由零个或多个数据元素组成的有限序列
1、 首先它是一个序列,有前后关系
2、 若元素存在多个,第一个元素无前驱,最后一个元素无后继,其他元素有且只有一个前驱和后继
抽象的数据类型就是把数据类型和相关操作捆绑在一起
Operation
InitList(*L)初始化建立一个空的线性表L
ListEmpty(L)判断是否为空表,是返回true,否返回false
ClearList(*L)清空线性表
GetElem(L,i,*e)将线性表L中更多第i个位置元素值返回给e
LocateElem(L,e)在线性表L当中查找与给定值e相等的元素
ListInsert(*L,i,e)在L的第i个位置插入新元素e
ListDelete(*L,i,*e)删除L中第i个位置元素,并用e返回其值
ListLength(L)返回L的元素个数
1、 存储空间的起始位置,数组data,它的存储位置就是线性表存储空间的存储位置
2、 线性表的最大存储容量:数组长度MaxSize
线性表的当前长度:length
1、 相当于给自定义的数据结构取个昵称…
1、 首先进行判断i的范围,注意i>L.length + 1这一句实际上是在检测是否插入的数据能使顺序表是连续的(比如原表在1-5位有数据了,但是在插入时要求在第7位插入,这是不合理的)
2、 难点在于位次序是从1开始的,而数组的存储是从0开始的
1、 感觉没啥好总结的,虽然这个代码写了好一会,但是感觉最大的困难就是上面的图片了
2、 感觉这一次写的代码起以往来说交互性更好了
3、 源码指路github(全部贴上来真的太长啦……)
https://github.com/Sherlock-White/Learning-note/tree/DataStructure
1、 new从自由存储区分配内存,而malloc从堆分配内存。自由存储区能否是堆,取决于operator new的实现细节。
2、 new分配内存成功时,返回的是一个与对象类型严格匹配的指针,符合类型安全性;而malloc分配成功返回void*,需要进行强制类型转换。
3、 new分配内存失败时,会抛出bac_alloc异常;而malloc会返回NULL
那么对new失败应该使用try-catch的异常机制
4、 new无需指定内存块的大小,编译器会完成的;malloc需要指出(利用sizeof)
5、 new会调用对象的构造函数/析构函数,而malloc不会
6、 new的实现可以基于malloc,反之不可以
7、 new允许被重载,malloc不行
new不能扩容,而malloc可以用realloc原地扩大
https://www.cnblogs.com/ywliao/articles/8116622.html
1、 进行malloc的时候要进行强制类型转化,并且要显式说明分配的内存大小
2、 建议用memset或者是别的方法对脏数据进行处理
3、 下面的博客界面真香啊,javascript马上学qaqq
https://www.cnblogs.com/ybqjymy/p/12365716.html
1、 一个技巧是可以将结构体命名为两个形式,一个是LNode,另一个是*LinkList,在书写的过程中,前者更强调是一个指针,后者更强调是一个单链表,可以增强代码的可读性
2、 千万别在里面放string,char真的很香
3、 带头结点的单链表思路是在main当中声明一个listPoint*类型的指针L作为头结点,然后对其初始化,接着调用insert函数将元素插入
4、 遍历的核心就是用一个临时的指针p去指向头结点L,用p=p->next实现遍历,难点是边界条件的判定
5、 在释放内存的时候,同样是用一个p去遍历,因为我们要释放的只有malloc的内存,所以从头结点走到NULL的时候应该可以把内存放干净
1、 字符串的复制不可以用“=”,可以用strcpy函数,很香很香
2、 单链表注意判断边界情况,永远不要想调用一个NULL的对象
3、 因为写链表的时候顺便把课设的项目做了,所以源码不是很方便贴
1、感觉malloc和new都有适用的场景吧√
2、顺序表的动态分配下次再写了,咕咕咕咕咕
3、感觉自己的代码真的看起来规范很多了qaq
4、回头找个时间得把链表完完整整重新写一遍,最难的地方其实还是插入的判断啦…
5、其实推送本来是昨天码完的,结果快到跑步的点了就咕咕咕咕咕了哈哈哈老鸽子了
6、每天都在努力不被拉爆
7、也不会啦,能拉爆我的几位不是每天能遇到(?)
8、咕咕咕咕咕
9、眠哥的史努比到底什么时候更新?????
IT双侠的咕咕咕日常
内容/排版:咸哥
特别鸣谢:王道考研/一杯清酒邀明月