118、数据结构中数组、链表、哈希

本文详细介绍了数组、链表和哈希表三种基本数据结构的特点及适用场景。数组提供高效随机访问,但插入删除效率低;链表灵活动态分配空间,插入删除便捷但不支持随机访问;哈希表则通过哈希函数实现快速查找,但面临哈希冲突问题,文中提到了冲突解决方法。选择合适的数据结构对于优化程序性能至关重要。
摘要由CSDN通过智能技术生成

一、数组 

  1. 在内存中,数组是一块连续的区域。
  2. 数组需要预留空间,在使用前要先申请占内存的大小,可能会浪费内存空间。
  3. 插入数据和删除数据效率低。除了在尾部的插入删除。插入数据时,这个位置后面的数据在内存中都要向后移。删除数据时,这个数据后面的数据都要往前移动。 
  4. 随机读取效率很高。直接根据下标获取元素值。
  5. 不利于扩展,数组定义的空间不够时要重新定义数组。

适用场景: 

  1. 数据量小
  2. 数据规模已知
  3. 对数据存取和修改操作较多,而插入和删除数据较少的情况。

二、链表

  1. 在内存中可以存在任何地方,不要求连续,通过指针来建立元素间的关联。
  2. 不指定大小,只需在用时申请空间就可以。根据需要来动态申请或者删除内存空间。
  3. 增加数据和删除数据很容易,不需要遍历整个链表。
  4. 不支持随机访问。
  5. 扩展方便。

适用场景:  

  1. 不需要预先知道数据规模
  2. 适用于插入删除操作较多,而存取操作较少的情况。

三、哈希

将关键字作为哈希函数f(key)的参数,获取一个地址,使得关键字在表中都有一个确定的位置

(1)hash冲突:key通过哈希函数f(key)得到一个地址,但是却发现该地址已存有其它元素,这就是所谓的hash冲突啦。 

(2)解决hash冲突

  • 开放地址法:对当前求得的地址再添加增量计算。增量di有三种取法:1.线性探测再散列 2. 平方探测再散列 3.随机探测再散列;

  • 链地址法:将所有哈希地址相同的记录都链接在同一链表中;
  • 再哈希法:同时构造多个不同的哈希函数;

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值