十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
作为我们最先接触的两个数据结构,链表和线性表的优缺点都较为明显,并且二者互相补足
成都创新互联公司是专业的集安网站建设公司,集安接单;提供成都网站制作、网站设计,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行集安网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!文章目录首先,我们来谈谈线性表SeqList
线性表 (linear list) 是 数据结构 的一种,一个线性表是n个具有相同特性的数据元素的有限序列。类似于数组,其本质是一块连续的地址空间
图片来自百度
因为其内容包含多个变量,所以C语言使用结构体来构造
共三个变量:
1.所存储数据类型的指针,用来接收之后malloc,动态开辟的空间
2.Size,表示当前线性表所存储元素个数
3.Capacity,表示当前线性表所能存储的大元素个数
详细的实现这里就不赘述了
接下来是就来讲解线性表的缺点
线性表的缺点如线性表的本质所表现的,线性表是一块连续的空间,如同数组一样,我们需要手动开辟,而且需要指定大小的开辟。
那么就出现第一个问题,开辟多大的空间呢?
这只是问题的表层,很多人也知道,即使我们开辟的过大,过小,我们都可以通过realloc,重新开辟空间,并且realloc可以帮我们copy原先的数据.
但这又有个问题,realloc多大呢,我们总不能插入一个数据,就重新realloc一块比原先空间多一的空间吧?比较适合的扩大数目是—原先的两倍。
但这样也会在后来造成内存浪费,比如我要存130,原先100,那就要realloc200的空间,70个空间将造成浪费
所以,线性表的第一个缺点:容易造成空间浪费
PS:realloc会考察原先空间后是否有足够的空间,若有,是原地扩容。
若没有足够空间,则会在别处申请一块空间,并拷贝原先的值
第二个缺点:头部中间插入和删除效率低
当我们要在线性表的头部或中间插入和删除元素时,我们需要将位置后的元素,往后移动,这就导致效率低
但是,线性表也并不是一无是处
线性表的优点同样,因为线性表的本质,是一块连续的空间
线性表可以通过下标访问元素,很多算法是需要兼容这一点的,比如快排和二分查找
链表和线性表有很大不同
最明显的还是数据的存储,链表并不是连续的地址空间,他是无序的,散的,但这并不违反其线性结构,因为其组成有指针指向当前链表的下一个节点,实现数据的线性联系
链表内部主要有三大区分
循环 非循环
带哨兵卫的头 不带头
单向 双向
因此,链表有八种类型
其中单向,不带头,非循环链表是oj题最常见的,因为其结构简单,功能少,所以相应的题考验学生的思维能力。
而双向,带头,循环链表是结构最复杂,全面的链表,所以其功能较为强大
此处举例双向,带头,循环链表
图片来自百度
任意位置插入删除效率高
因为链表并不是连续的空间,插入和删除只要对指定位置的前后做操作就好
并且通过封装的FindList函数,O(N)的查找,再在指定位置插入删除O(N)即可
按需申请释放空间
每一次的插入删除,只需要申请一块空间即可,和原本的空间没有影响
实际操作,链表会更为的舒服
但链表的缺点也很明显
链表的缺点不支持随机访问。(用下标访问)
意味着,一些排序,二分查找,等算法在这种结构不适用
大致的线性表和链表的总结就到这。
一句话,数据结构是数据存储,应用的框架,容器。
具体使用要依情况而定
感谢阅读
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧