Ⅰ数据结构前言

一、什么是数据结构?

数据结构(Data Structure)是计算机存储、组织数据的方式,指相互之间存在一种或多种特定关系的数据元素的集合。

二、什么是算法?

算法(Algorithm)就是定义良好的计算过程,他取一个或一组的值为输入,并产生出一个或一组值作为输出。简单来说算法就是一系列的计算步骤,用来将输入数据转化成输出结果。

Note:

①市面上有很多数据结构与算法的书籍,很多同学都不明白这两个词语是什么意思。在前言这里笔者只能告诉你数据结构和算法的小白理解,当你系统学完整本书之后,才能深刻理解该学科的具体含义。就好比去驾校第一天,教练只是告诉你什么是方向盘,什么是离合,什么是刹车,但距离开车上路还需要进一步系统地学习。

数据结构:实现一些项目,需要在内存中将数据存储起来(比如通讯录,把每个人的信息存储起来),存储有多种形式,数组、链表、树、哈希表······每个存储方式都有它的特点;故我们需要把这些数据结构了解一遍,在我们实现项目时才知道选什么合适,因此数据结构需要在我们后面的学习中深入理解。

算法:通俗来讲算法就是解决问题的方法。算法有排序、查找、去重等多种算法。

排序:淘宝买手机(想看最贵的或者好评度高的或者销量多的,我们进行排序)

查找:快递,我们输入手机号来查找我的快递发到哪了

去重:删除重复的数据

现实中我们需要很多很多更高级的算法,比如你在抖音经常看小姐姐,抖音就推荐小姐姐的视频,经常看篮球,抖音就推荐篮球的视频,这就是推荐算法的功能,但是该算法不是那么轻易就能实现的。

解决算法就必须用到数据结构,有些数据结构又同时用到算法,它们是不分家的,所以经常说数据结构和算法。 

三、数据结构和算法的重要性

数据结构和算法在未来的笔试面试以及程序员的发展中非常重要。

1.在校园招聘的笔试中

当前校园招聘笔试一般采用Online Judge形式,一般都是20~30道选择题,3~4道编程题。

大家可以去牛客网查看公司真题。

2017腾讯校招笔试真题_Java工程师、C++工程师_牛客网腾讯2017校招开发工程师笔试试卷(二),笔试真题面试真题在线oj练习,在线编程学习提升求职竞争力,真正的应届生校招实习求职神器。https://www.nowcoder.com/test/6393508/summary

我们看到大公司通常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》和《程序员代码面试指南》上的题做一遍。

剑指Offer_在线编程+题解_牛客题霸_牛客网【牛客题霸专属】剑指offer专题精选谷歌、微软等知名IT企业的50余道典型面试题,从基础知识、代码质量、解题思路、优化效率和综合能力五个方面系统整理了影响面试的5个要点。https://www.nowcoder.com/ta/coding-interviews?page=1

2.刷完上面的内容,我们还可以去刷刷Leetcode。

题库 - 力扣 (LeetCode) 全球极客挚爱的技术成长平台海量技术面试题库,拥有算法、数据结构、系统设计等 1000+题目,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode-cn.com/problemset/all/

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Aspect of Twilight

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值