数据结构之——C++中的线性表

顺序表和链表的区别

线性表(linear list)

是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串…

顺序表

顺序表是一段连续的物理空间地址,依次存储数据元素的线性结构

链表

链表是一种非连续的物理空间结构,链表中的数据在内存中是不连续的,只是在逻辑上连续的。

链表和数组的区别

  1. 数组中存储的元素在内存中是连续的,使用数组前必须固定好数组的大小,后期不支持动态改变数组的大小;链表中的数据在内存中是不连续的,只是在逻辑上是连续的,支持动态增加和删除。
  2. 数组在内存中顺序存储,可以通过下标访问,访问效率高;链表访问效率低,如果想要访问某个元素,需要从头遍历。
  3. 数组在除了尾插和尾删,其他操作时间复杂度都是O(n),需要移动大量的元素;而链表的插入和删除的时间复杂度都是O(1),只需要前后连接即可。

栈和队列

栈和堆的区别
  1. 栈是由高地址向低地址扩展的,堆是由低地址向高地址扩展的。
  2. 堆中的内存需要手动申请和释放,而栈是操作系统自动申请和释放的。
  3. 堆中频繁调用malloc和new,容易产生内存碎片,而栈不会产生内存碎片。
  4. 堆的分配效率低,栈的分配效率高。
  5. 堆的空间大小要比栈的空间大很多。
为什么栈的分配效率高

因为栈是操作系统提供的数据结构,计算机会在底层对栈提供支持,会分配专门的寄存器来存储栈的地址,压栈和出栈都会有专门的执行指令;而堆是C/C++库函数提供的,它的机制比较复杂,需要一些分配内存、合并内存、释放内存的算法,因此效率低。

栈溢出的原因
  1. 局部数组过大——》增大栈空间,改用动态内存分配。
  2. 递归调用层次太多:递归函数在运行时会执行压栈的操作,当压栈的次数太多时,会导致栈溢出。
  3. 指针或者数组越界。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值