赞
踩
目录
链表形式存储图示:
静态顺序表的经典模型如下:typedef N 1000struct SeqList{int data[N];size_t size;}这里N是这个顺序表能存储的数据个数,size用来记录已存有效数据的个数。
动态顺序表的经典模型如下:struct SeqList{int* data;size_t size;size_t capacity;}这里 size同样记录这个顺序表已存有效数据的个数,数据data所占的空间都是动态开辟的额。capacity记录容量。
结构:链表一般由个结构体组成,每个结构体可以包含数据和结构体指针两部分,指针部分通过存储下一个结点的地址来将其链接成表。
链表的种类很多,按是否带有头节点分:有头链表和无头链表,
按是否存在循环分:循环链表和无头链表
按是否存有上一结点地址分:单向链表和双向链表
①每个结点都是malloc开辟的,会产生较多的内存碎片(留下的整块的可用空间少)。
②每个结点比顺序表需要多使用八个字节用来存放下一个结点的指针。
③单链表尾删的话需要遍历找到前一个结点,时间复杂度是O(N)。
④不支持随机访问。
⑤缓存命中率低,寄存器的运行速度特别快,空间小,每次获取数据时,会先在寄存器里找,如果找不到,才会去主存中去找,它每次读数据时,会多读几个数据(取决于寄存器的长度),这就导致链表结构被读到的有效数据相比顺序表较少,命中率低。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。