标签:多少 取数据 查找 链表 shadow 设置 十分 连续 memory
链表(Linked List)是由许多相同数据类型的数据项按照特定顺序排列而成的线性表。但链表的特性是其各个数据项在计算机内存中的位置是不连续且随机(Random)存放的。
数据的插入和删除都相当方便,有新数据插入就向系统申请一块内存空间,而数据被删除后,就可以把这块内存空间还给系统,加入和删除都不需要移动大量的数据。
设计数据结构时比较麻烦,并且在查找数据时,也无法像静态数据(如数组)那样可以随机读取数据,必须要按序查找到该数据为止。
日常生活中有许多链表的抽象运用,例如可以把“单向链表”想象成火车,有多少人就挂多少节车厢,当假日人多时,需要较多车厢时就多挂些车厢,人少时就把车厢数量减少,十分有弹性。像游乐场中的摩天轮就是一种“环形链表”的应用,可以根据需要增加坐厢的数量。
链表与数组的最大不同点,就是它的各个元素或数据项的存储不必在连续的内存中(即不必分配连续存储的空间给它们),只要考虑它们在逻辑上的顺序即可。虽然数组结构也可以用来仿真链表的结构,但在进行增删或移动元素时相当不便,而且必须事先声明固定的数组空间,太多或太少各有利弊,缺乏弹性。因此,使用动态分配内存的模式,最适合链表数据结构的设计。
“动态分配内存”(Dynamic Allocation)的基本精神就是:让内存的使用更具弹性,即可在程序执行期间根据用户的设置与需求,适当给变量分配所需要的内存空间。虽然动态分配内存比静态分配内存方式更具有弹性,但是动态分配内存也有不利之处。下表列出了静态内存分配和动态分配内存两种方式的相关比较。
相关比较表 | 动态分配 | 静态分配 |
内存分配 | 运行阶段 | 编译阶段 |
内存释放 | 程序结束前必须释放分配的内存空间,否则造成内存“泄露”(Memory Leak) | 不需释放,程序结束时自动归还给系统 |
程序运行性能 | 较低。(因为所需内存要到程序执行时才能分配) | 较高。(程序编译阶段即已确定所需分配的内存容量) |
指针遗失 | 若指向动态分配空间的指针在未释放该地址空间之前,又指向了别的内存空间时,则原本所指向的内存空间将无法被释放,而造成内存“泄露” | 没有此问题。 |
标签:多少 取数据 查找 链表 shadow 设置 十分 连续 memory
原文地址:https://www.cnblogs.com/dotnet261010/p/12310588.html