数据结构与算法学习笔记
文章平均质量分 92
Tutu不秃
计算机科学与技术大一在读
展开
-
数据结构与算法之美-排序(笔记5)
小规模数据:插入排序大规模数据:快排特殊数据:桶排序:数据需要很容易就能划分成m个桶,桶与桶之间有着天然的大小顺序。这样每个桶内的数据都排序完之后,桶与桶之间的数据不需要再进行排序。其次,数据在各个桶之间的分布是比较均匀的。桶排序比较适合用在外部排序中。所谓的外部排序就是数据存储在外部磁盘中,数据量比较大,内存有限,无法将数据全部加载到内存中计数排序:当要排序的n个数据,所处的范围并不大的时候,比如最大值是k,我们就可以把数据划分成k个桶。每个桶内的数据值都是相同的,省掉了桶内排序的时间。原创 2023-06-26 18:36:07 · 577 阅读 · 1 评论 -
数据结构与算法之美-栈 (笔记4)
我们使用两个栈,X和Y,我们把首次浏览的页面依次压入栈X,当点击后退按钮时,再依次从栈中出栈,并将出栈的数据依次放入栈Y。比如你顺序查了a,b,c三个页面,我们就依次把a,b,c压入栈,当你通过页面b又跳转到新的页面d,页面c就无法再通过前进、后退按钮重复查看了,所以需要清空栈Y,d放入X。这里也可以用栈来解决。事实上,从功能上来说,数组或链表确实可以替代栈,但你要知道,特定的数据结构是对特定场景的抽象,而且,数组或链表暴露了太多的操作接口,操作上的确灵活自由,但使用时就比较不可控,自然也就更容易出错。原创 2023-06-13 15:41:15 · 337 阅读 · 1 评论 -
数据结构与算法之美-链表 (笔记3)
这样代码实现起来就会很繁项,不简洁,而且也容易因为考不全而出错。如何来解决这个问题呢?技巧三中提到的哨兵就要登场了。哨兵,解决的是国家之间的边界问题。同理,这里说的哨兵也是解决“边界问题”的,不直接参与业务逻辑。还记得如何表示一个空链表吗?head=null表示链表中没有结点了。其中head表示头结点指针,指向链表中的第 一个结点。如果我们引入哨兵结点,在任何时候,不管链表是不是空,head指针都会一直指向这个哨兵结点。我们也把这种有哨兵结点的链表叫带头链表。原创 2023-06-13 15:35:36 · 286 阅读 · 1 评论 -
数据结构与算法之美-数组(笔记2)
顾名思义,线性表就是数据排成像一条线一样的结构。每个线性表上的数据最多只有前和后两个方向。其实除了数组,链表、队列、栈等也是线性表结构。【线性表只有前后有联系】与之相反的,在非线性表中,数据不是简单的前后关系,比如二叉树,堆,图,使它有“随机访问的特性”。但是数组的插入删除,为保证连续性,需要大量的数据搬移工作。数组如何实现根据下标随机访问数组元素?拿int a[10]举例,计算机给这个数组分配了一段连续的内存空间1000~1039。原创 2023-06-08 11:12:50 · 243 阅读 · 0 评论 -
数据结构与算法之美-复杂度分析(笔记1)
假设每一行代码执行的时间都为unit_time,这段代码总共执行了多少时间呢?第一二行分别需要1个unit_time,四五行都运行了n遍需要2n*unit_time的执行时间,所以这段代码总的执行时间就是(2n+2)*unit_time,我们可以知道所有代码的执行时间T(n)与每行代码的执行次数n成正比这个例子中T(n)=O(2n+2),大O时间复杂度实际上并不具体表示代码真正的执行时间,而是表示代码执行时间随数据规模增长的变化趋势,所以,也叫作。原创 2023-06-07 17:42:24 · 297 阅读 · 2 评论