文档章节

链你妹系列1—关于链表,不得不吐槽的那些事

青灯夜
 青灯夜
发布于 2015/09/01 22:10
字数 1190
阅读 3
收藏 0

链你妹系列1—关于链表,不得不吐槽的那些事

 

1. 面试中的那些槽点

         本人是一名c/c++软件开发爱好者,因为烟酒僧期间倒腾项目偏向于软件开发,激发了不少兴趣,所以只在大学过了计算机二级c的我毅然投身软件开发行业,决定为浩瀚的IT行业添砖加瓦(添些bug)。

        哪知道漫漫IT路、处处是深坑,不说别的,光是毕业求职的那一阵,就趟了好多浑水好多坑。这里面最坑爹的,莫过于哪哪都要面链表的问题:

        去联想,最后几题是链表;

        去华为,现场一对一出题考链表;

        去小米,三道大题两道链表;



        ... ...

        哪儿面试都要考查链表;

       链表虐我千百遍,我待链表如初(ni)恋(mei)!

2. 为什么绕不开链表呢?

      为什么大家这么喜欢考察链表呢?那就该从链表这种数据结构的特点开始说起。

      链表是一种物理存储单元上非连续、非顺序逻辑上由链表中的指针顺序链接的存储结构。


      链表的几个优点:

       (1.)不需要预先知道数据的大小;

      (2.)充分利用计算机内存空间,实现灵活的动态内存管理

      这里需要说一下,例如我们存储班级成员信息,如果我们使用数组这种数据结构进行存储,那么遇到一个问题:数组定义多大?我们会在初始化的时候就申请固定的足够大的内存,即静态内存分配,但遇到人员有调整时,我们就需要去修改程序,另外成员数量波动也可能带来内存浪费或数组越界以致内存溢出的风险。

      那么怎么解决这个问题呢?就是使用动态内存分配
      所谓动态内存分配就是指在程序执行的过程中动态地分配或者回收存储空间的分配内存的方法。这就是链表这种数据结构的内存分配方式了。动态内存分配不需要预先分配存储空间,而是由系统根据程序的需要即时分配,且分配的大小就是程序要求的大小,实现弹性伸缩

      (3.)能够快速插入和移除表上任意位置上的节点,不需要移动大量元素,而这一点是数组无法匹敌的。

      这些优点也说明了链表存在的意义,当然,链表的局限性也是明显的:

      读取数据不能像数组一样按索引随机读取,必须顺序引导查找。

      针对数组和链表,实际应用时,需根据各自的特点及使用场景进行选用。如果能精确预测栈或者队列所需要容纳的数据量,就使用数组,否则宜使用链表。实际上,常见的数据结构也是这么选用的,这里列举如下:

数据结构

实现方式

栈 

数组/单链表

队列 

数组/双端链表

优先级队列

数组/堆/有序链表

双端队列

双向链表


      可见合理搭配数据结构、尽量发挥数组和链表各自的优点物尽其用才是王道。

3. 从哪些方面来讲述链表

      喷完了各种面试,我们也要言归正传,好好学习这门基础,毕竟猿们还要混口饭吃,除非自己咋了饭碗。那么会整理哪些链表知识呢?

       我将针对常用的链表类型:单链表、双向链表循环链表讨论面试常见的链表知识,包括链表创建、逆序、合并、节点插入、删除、查找等操作以及相关算法,力保能够涵盖链表问题的方方面面。

4. 链表链你妹系列文章索引

      本篇只是起头,后面将陆续补齐相关文章,并在此文中更新链接。文章风格嘛,还是尝试调侃为上的原则,知识不都是玩出来的吗,正所谓兴趣是最好的苍老师!^_^


      

      
        1.关于链表,不得不吐槽的那些事




     ---------------------------------------------------------------------------------------------------------------------------------------

       如果还喜欢,可以通过以下方式关注我哟:

          github    :    applefly

       微信公众号:   qi_chuang

       微           博:   心灯一豆







版权声明:本文为csdn博主[applebite](http://blog.csdn.net/applebite) 原创文章,转载请注明出处,侵权必究。 微信添加公众号:qi_chuang 或 猎奇创新平台

© 著作权归作者所有

青灯夜
粉丝 2
博文 35
码字总数 21708
作品 0
朝阳
程序员
私信 提问
区块链:一场始料未及的革命

摘要:本文作者Haseeb Qureshi在其文章《区块链:一场始料未及的革命(Blockchain: the revolution we’re not ready for)》中指出,“区块链将颠覆整个社会,它将使得仅存在于乌托邦和哲学...

Unitimes
2018/01/10
0
0
做翻译的那些事

明明英语六级还没有过,居然这么不负责任的跑去给别人做翻译。自我反思到此结束,接下来吐槽翻译的血泪史。 接触到翻译也是最近的事,满打满算不到两个月吧。那时沈公子找我让我帮忙一起翻译...

暖冰
2015/11/25
88
0
看图轻松理解数据结构与算法系列(双向链表)

前言 推出一个新系列,《看图轻松理解数据结构和算法》,主要使用图片来描述常见的数据结构和算法,轻松阅读并理解掌握。本系列包括各种堆、各种队列、各种列表、各种树、各种图、各种排序等...

超人汪小建
2018/07/29
0
0
容器类源码解析系列(三)—— HashMap 源码分析(最新版)

容器类源码解析系列(三)—— HashMap 源码分析(最新版) 前言 本篇文章是《Java容器类源码解析》系列的第三篇文章,主要是对HashMap的源码实现进行分析。强烈建议阅读本文之前,先看看该系列...

MRYangY
04/21
0
0
实名吐槽码云企业版集成度不高,使用体验不一致

码云的用户群中关于码云企业版集成度不高的、使用体验不一致的吐槽,一直不绝于耳,特别是企业版中的仓库页面需要跳到企业外打开的问题。后来可能大家吐啊吐啊,也就习惯了。但是我们坚决不能...

红薯
06/12
6.9K
16

没有更多内容

加载失败,请刷新页面

加载更多

面试官,Java8 JVM内存结构变了,永久代到元空间

在文章《JVM之内存结构详解》中我们描述了Java7以前的JVM内存结构,但在Java8和以后版本中JVM的内存结构慢慢发生了变化。作为面试官如果你还不知道,那么面试过程中是不是有些露怯?作为面试...

程序新视界
4分钟前
1
0
读书笔记:深入理解ES6 (八)

第八章 迭代器(Iterator)与生成器(Generator) 第1节 循环语句的问题   在循环、多重循环中,通过变量来跟踪数组索引的行为容易导致程序出错。迭代器的出现旨在消除这种复杂性,并减少循...

张森ZS
4分钟前
2
0
Elasticsearch 实战(一) - 简介

官腔 Elasticsearch,分布式,高性能,高可用,可伸缩的搜索和分析系统 基本等于没说,咱们慢慢看 1 概述 百度:我们比如说想找寻任何的信息的时候,就会上百度去搜索一下,比如说找一部自己喜...

JavaEdge
8分钟前
2
0
【jQuery基础学习】11 jQuery性能简单优化

本文转载于:专业的前端网站➦【jQuery基础学习】11 jQuery性能简单优化 关于性能优化 合适的选择器 $("#id")会直接调用底层方法,所以这是最快的。如果这样不能直接找到,也可以用find方法继...

前端老手
17分钟前
4
0
重磅发布 | 全球首个云原生应用标准定义与架构模型 OAM 正式开源

导读:2019 年 10 月 17 日,阿里巴巴合伙人、阿里云智能基础产品事业部总经理蒋江伟(花名:小邪)在 Qcon 上海重磅宣布,阿里云与微软联合推出开放应用模型 Open Application Model (OAM...

阿里云官方博客
20分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部