数组与链表

对于面试来说,数据结构与算法一直是被问,可对于实际项目开发中把它们都抛得很远,所以就有这样一个现象:在一家公司呆久了突然某些原因不得不面临找工作了(可能是自身为了更高的发展,也有可能是面临公司裁员等一些情况),突然发现有点不知所措,因为面试跟公司开发完全是不一样的侧点重,而其中最头疼的就是关于数据结构与算法相关的一些面试准备,临时抱佛脚这会让自己非常的焦虑,毕境涉及到这块的面试题不是像概念一下背一下就好了,懂这块的面试官几下就把你给问懵逼了,所以发自内心的自己要利用平时好好的把这块硬骨头一点点给啃下去,也给自己做一个备忘,所以下面从易到难一点点来学习。

对于数据结构来说,数组与链表是组成复杂数据结构的最最核心的基础数据结构,如堆、栈、图、hash表等等,当然这对于有过编程经验的人来说so easy,但是越是容易的东西越重要,所以下面来分别看下这两种数据现形势,在正式写代码之前,先说明下编写的环境:

  编程语言:c++【面像过程与面像对象于一身,更便于学习】

  IDE:Sublime Text 3【具体怎么集成c++的环境可以百度】

数组:

具体代码:

 

运行结果不用大脑都晓得:

  

【说明】:mac 上的sublime编译快捷键是:command+b;运行快捷键:shift+command+b

可能有人说这么白痴的入门级的代码就别贴出来了,丢人!如果仅仅是讨论代码的水平那确实有点弱智,但是这里的主题是数据结构,也就是得看到这个数组所表示的一种数据结构的特点,这个也就是写它的目的,对于数组它具有的特点是:数组里面的元素在内存是紧挨着的,中间木有任何间隔,而这特性所带来的好处有:

1、省空间,因为特别紧凑,中间木有其它数据。

2、随机访问某个元素特别快,所谓随机,举个例子,比如:这个数组有1000万个整数元素,这时想取第100万的元素直接可以通过*(array+100万)定位到,也就是说对于一个数组访问第一个元素跟访问1000万个元素都属于常量级别的,时间上都差不多,都非常快。

但是事实总有两面性,有利有弊,它的弊端就是插入或删除数据效率比较低,因为当插入或删除元素时都会造成数组元素的移动,当数据元素比较多的情况下移动数据也是挺耗时间的,所以为了解决这个弊端,新的数据结构诞身了------链表。

链表:

具体代码: 

 

运行结果:

  

上面是链表的一个简单实现,当然这种数据结构的特别才是我们需要了解的,它的特别基本上就和上面数据列出来的倒过来的就不多说了,简单说明一下:

利:便于删除和插件,因为删除和插件节点时只需要将元素节点指针改变一下既可,所以非常高效。

弊:不便于查找,像找第一个元素跟查100个元素,用链表就非常耗时。

以上内容比较简单,但是很重要,未来会慢慢的进行深入,以后也会收集一些经典数据结构与算法这方面的面试题,下节再见!

原文地址:https://www.cnblogs.com/webor2006/p/6659211.html