「这是我参与2022首次更文挑战的第20天,活动详情查看:2022首次更文挑战」。
单链表结构和顺序存储结构的优缺点:
存储分配方式:
顺序存储结构用一段连续的存储单元存储线性表的数据元素。
单链表采用链式存储结构,用一组任意的存储单元存放线性表的元素。、
时间性能:
查找
顺序存储结构O(1)
单链表O(n)
插入和删除
顺序存储结构需要平均移动表长一半的元素,时间为O(n)。
单链表在线出某位置的指针后,插入和删除时间仅为O(1)。
若线性表需频繁查找,很少进行插入和删除操作时,用顺序存储结构较好。
若需要频繁插入和删除时,采用单链表结构较好。
静态链表
数组的元素都是由两个数据域组成,data和cur。
数据域data用来存放数据元素。
数据域cur相当于单链表中的next指针,存放该元素的后继在数组中的下标。
# define MAXSIZE 1000
typedef struct
{
ElemType data;
int cur;
}Component,StaticLinkList[MAXSIZE];
静态链表的优缺点:
优点:
在插入和删除操作时,只需要修改游标,不需要移动元素,从而改进了在顺序存储结构中的插入和删除操作需要移动大量元素的缺点。
缺点:
没有解决连续存储分配带来的表长难以确定的问题。
失去了顺序结构随机存取的特点。
总结:
静态链表是为了给没有指针的语言设计的一种实现单链表能力的方法。
循环链表
将单链表中终端结点的指针端由空指针改为指向头结点,就使整个单链表形成了一个环。
双向链表
在单链表的每个节点中,再设置一个指向其前驱结点的指针域。
typedef struct DulNode
{
ElemType data;
struct DulNode *prior;
struct DulNode *next;
}DulNode, *DuLinkList;
双向链表对于单链表来说,更要复杂一些,毕竟它多了prior指针,对于插入和删除要细心。
它的每个节点都需要记录两份指针,所以空间占的多一些,有效提高算法的性能。
说白了就是用空间来换时间。