一、什么是数据结构?
数据结构(Data Structure)是计算机存储、组织数据的方式,指相互之间存在一种或多种特定关系的数据元素的集合。
二、什么是算法?
算法(Algorithm)就是定义良好的计算过程,他取一个或一组的值为输入,并产生出一个或一组值作为输出。简单来说算法就是一系列的计算步骤,用来将输入数据转化成输出结果。
Note:
①市面上有很多数据结构与算法的书籍,很多同学都不明白这两个词语是什么意思。在前言这里笔者只能告诉你数据结构和算法的小白理解,当你系统学完整本书之后,才能深刻理解该学科的具体含义。就好比去驾校第一天,教练只是告诉你什么是方向盘,什么是离合,什么是刹车,但距离开车上路还需要进一步系统地学习。
②数据结构:实现一些项目,需要在内存中将数据存储起来(比如通讯录,把每个人的信息存储起来),存储有多种形式,数组、链表、树、哈希表······每个存储方式都有它的特点;故我们需要把这些数据结构了解一遍,在我们实现项目时才知道选什么合适,因此数据结构需要在我们后面的学习中深入理解。
③算法:通俗来讲算法就是解决问题的方法。算法有排序、查找、去重等多种算法。
排序:淘宝买手机(想看最贵的或者好评度高的或者销量多的,我们进行排序)
查找:快递,我们输入手机号来查找我的快递发到哪了
去重:删除重复的数据
现实中我们需要很多很多更高级的算法,比如你在抖音经常看小姐姐,抖音就推荐小姐姐的视频,经常看篮球,抖音就推荐篮球的视频,这就是推荐算法的功能,但是该算法不是那么轻易就能实现的。
④解决算法就必须用到数据结构,有些数据结构又同时用到算法,它们是不分家的,所以经常说数据结构和算法。
三、数据结构和算法的重要性
数据结构和算法在未来的笔试面试以及程序员的发展中非常重要。
1.在校园招聘的笔试中
当前校园招聘笔试一般采用Online Judge形式,一般都是20~30道选择题,3~4道编程题。
大家可以去牛客网查看公司真题。
我们看到大公司通常5道左右的算法题,中小公司是选择题(20~30个)+编程题(3个左右)。可以看出大公司对大家的要求更高了。
2.在校园招聘的面试中
笔试通过之后就是面试环节,通常是三次面试。下面就是一些公司的面试问答题。
注:加粗的是数据结构和算法相关的知识
①某学长CVTE面试
- 怎么计算一个类到底实例化了多少对象?
- 如果还有一个派生类继承了这个类,那么如何计算这两个类,各自实例化了多少对象?
- 你了解联合体和结构体吗?
- 如何测试一个机器是大端还是小端?
- 你了解队列和栈吗?
- 怎么用两个栈实现一个队列。
- 你使用过模版吗?
- 写一个比较两个数大小的模板函数。
- 你使用过容器吗?
- 判断两个链表是否相交。
- Vector和数组的区别。
- 你在学校里做的最满意的一个项目是什么?简述一下这个项目。
②某学长腾讯的面试
- 自我介绍
- 学习STL具体是怎么开展的?
- 如果一款产品给你怎么检测内存泄露?
- 进程间通信方式,共享内存是怎么实现的,会出现什么问题,怎么解决?
- TCP为什么是可靠的?可靠是怎么保证的?为什么要三次握手?为什么三次握手就可以可靠?
- Http数据分包问题
- Vector相关
- Hashmap相关
- 红黑树的原理、时间复杂度等
- Memcpy和memmove的区别
- 客户端给服务器发送数据,意图发送aaa,然后再发bbb,但是可能会出现aaabbb这种情况,如何处理?
- 游戏的邮件服务器中每天会有玩家频繁的创建邮件和删除邮件,海量数据、大小不一,会有哪些场景,怎么存储,邮件是怎么到内存的?
- 写一道算法题
③某学姐百度的面试
- 手写五道题,三道编程题,一道数据库,一道linux
- 数据库的题两问
- 算法了解的如何,插入排序编程
- 说一下IP,TCP,ARP
- 内核是什么
- IP层主要功能
- map和set底层
- bootstrap的用法,html的全称
- 你觉得框架和库有啥区别
- 代码优化
- 哈希表
- shell脚本
- 快速排序思想
- 递归是什么
- 分治是什么,与递归区别是什么
- web平台是怎么做的
- linux命令
- 了解些什么前沿的技术,英语怎么样,了解过什么英语的文献
3.在未来的工作中
学好算法对一个程序员来说是必须的吗?如果是,至少应该学到哪种程度? - 知乎谢邀。首先,对于大部分程序员而言,在工作中不是必须的,但是你要找工作,特别是刚毕业参加校招的学生,…https://www.zhihu.com/question/36579347/answer/217323640数据结构与算法对一个程序员来说的重要性? - 知乎谢题主邀。正如题主所说,程序员如果想达到一个高层次,底子是最重要的。所以我们不但要学好数据结构与算…https://www.zhihu.com/question/289795606/answer/485134867
以后的发展对代码要求很高,学习数据结构和算法就可以提高我们的代码能力,一定要重视。
在我们找工作和考研,数据结构和算法很重要,我们要学扎实,不要半罐子水响叮当,而是放平心态,认真学。
四、如何学好数据结构和算法
1.死磕代码,磕成这样就可以了。
2.注意画图和思考。
五、数据结构和算法书籍及资料推荐
1.数据结构学习得差不多了,推荐大家都去把《剑指offer》和《程序员代码面试指南》上的题做一遍。
2.刷完上面的内容,我们还可以去刷刷Leetcode。