为什么要学数据结构与算法?
爱学习爱分享 威? itspcool
编程好比是一辆汽车,而数据结构和算法是汽车内部的变速箱。一个开车的人不懂变速箱的原理也是能开车的,同理一个不懂数据结构和算法的人也能编程。但是如果一个开车的人懂变速箱的原理,比如降低速度来获得更大的牵引力,或者通过降低牵引力来获得更快的行驶速度。那么爬坡时使用1档,便可以获得更大的牵引力;下坡时便使用低档限制车的行驶速度。
回到编程而言,比如将一个班级的学生名字要临时存储在内存中,你会选择什么数据结构来存储,数组还是ArrayList,或者HashSet,或者别的数据结构。如果不懂数据结构的,可能随便选择一个容器来存储,也能完成所有的功能,但是后期如果随着学生数据量的增多,随便选择的数据结构肯定会存在性能问题,而一个懂数据结构和算法的人,在实际编程中会选择适当的数据结构来解决相应的问题,会极大的提高程序的性能。
1、数据结构的基本功能
插入一条新的数据项
寻找某一特定的数据项
删除某一特定的数据项
迭代的访问各个数据项,以便进行显示或其他操作
2、常见的数据结构
数组 Array
栈 Stact
队列 Queue
链表 Linked List
树 Tree
哈希表 Hash
堆 Heap
算法学习方法
把所有经典算法写一遍 看算法有关源码 加入算法学习社区,相互鼓励学习(加我vx:tiger-ran, 备注入群理由, 拉你入群) 看经典书籍 刷题
九章算法班2021版 - 15个经典基础算法
Hash 快速排序 快递选择SELECT BFS/DFS (广度/深度优先遍历) 红黑树 (一种自平衡的二叉查找树) KMP 字符串匹配算法 DP (动态规划 dynamic programming) A*寻路算法: 求解最短路径 Dijkstra:最短路径算法 (八卦下:Dijkstra是荷兰的计算机科学家,提出”信号量和PV原语“,“解决哲学家就餐问题”,”死锁“也是它提出来的) 遗传算法 启发式搜索 图像特征提取之 SIFT 算法 傅立叶变换 SPFA(shortest path faster algorithm) 单元最短路径算法
public class LinkedHashMap<K,V>
extends HashMap<K,V>
implements Map<K,V> {
static class Entry<K,V> extends HashMap.Node<K,V> {
Entry<K,V> before, after;
Entry(int hash, K key, V value, Node<K,V> next) {
super(hash, key, value, next);
}
}
transient LinkedHashMap.Entry<K,V> head;
transient LinkedHashMap.Entry<K,V> tail;
//构造函数如下,
public LinkedHashMap(int initialCapacity,
float loadFactor,
boolean accessOrder) {
super(initialCapacity, loadFactor);
this.accessOrder = accessOrder;
}
}
|