数组、链表、Hash的优缺点
上体育课的时候,老师说:你们站一队,每个人记住自己是第几个,我喊到几,那个人就举手,这就是数组。 老是说,你们每个人记住自己前面的人和后面的人,然后老师只知道第一人是谁。 然后你们各自由活动,老是要找某一个人,是不是每次都是从第一个开始往自己身后的人开始传达?这就是链表。 老师说: 大家1,2,3,4报数,凡是报1,为1队,凡是报2的为2队。。。。 这就是散列(哈希)。而这个4就相当于预定义好的桶的个数。。 程序中,存放指定的数据最常用的数据结构有两种:数组和链表。 数组和链表的区别: 1,数组是将元素在内存中连续存放。 链表中的元素在内存中不是顺序存储的,而是通过存在元素中的指针联系到一起。 2,数组必须事先定义固定的长度,不能适应数据动态的增减的情况。当数据增加时,可能超出原先定义的元素个数;当数据减少时,造成内存浪费; 链表动态地进行存储分配,可以适应数据动态地增减的情况。 3,(静态)数组从栈中分配空间,对于程序员方便快速,但是自由度小; 链表从堆中分配空间,自由度大但是申请管理比较麻烦。 数组和链表在存储数据方面到底谁好?根据数组和链表的特性,分两种情况讨论: 1,当进行数据查询时,数组可以直接通过下标迅速访问数组中的元素。 而链表则需要从第一个元素开始一直找到需要的元素位置, 显然,数组的查询效率会比链表的高。 2,当进行增加或删除元素时,在数组中增加一个元素