线性表 (LinkList)

顺序存储结构
1.数组长度和线性表长度
数组长度:存放线性表的存储空间的长度,储存分配后一般是不变的。
线性表长度:线性表中的元素的个数,随着线性表的插入和删除操作,这个量是变化的。
任何时候,线性表的长度应该小于等于数组的长度。。。。。。
2.获得元素操作、插入操作、删除操作
在存读数据时,时间复杂度为O(1)
在插入或者删除的操作的时候,时间复杂度为O(n)
3.优点:无须为表示表中元素之间的逻辑关系而增加额外的存储空间,可以快速的存储表中任意位置的元素。
缺点:插入和删除操作需要移动大量元素,当线性表的长度变化较大时,难以确定存储空间的容量,造成存储空间的碎片。
=============================================================
链式存储结构 (能说清楚各种链表的优缺点)
主要针对顺序存储结构中,插入和删除操作需要移动大量元素的问题,链式存储结构解决了这一问题。。。。。。
一些概念:数据域data、指针域next、结点、头指针、头结点、
结点由 数据域和指针域组成。。。。。
线性表的最后一个元素的指针域为空!
===============================
单链表
1.单链表的插入与删除 free malloc
注意操作的顺序
2.单链表的整表创建
头插法:插队的办法,始终让新的结点在第一的位置。
尾插法:每次的新结点都插在终端结点的后面,先来后到的原则。
3.单链表的整表删除

4.单链表结构和顺序存储结构优缺点比较
a.存储分配方式:顺序存储结构用一段连续的存储单元依次存储线性表的数据元素;单链表采用链式存储结构,用一组任意的存储单元存放线性表的元素。
b.时间性能:查找(顺序结构O(1)。。。单链表O(n))
插入和删除(顺序结构O(n) 。。。单链表O(1) )
c.空间性能:顺序存储结构需要预分配存储空间,是大是小难以确定 ; 单链表不需要分配存储空间,只要有就可以分配,元素个数也不受限制。
=============================
静态链表:用数组描述的链表 #####(给没有指针的高级语言设计的一种实现单链表能力的方法)
data\cur
备用链表:未被使用的数组元素
游标(cur)、下标
静态链表的插入# 实现了不移动元素,却插入了数据的操作。。。
使用对cur的修改 实现了链表的插入功能
静态链表的删除:如果某个下标为k元素删除掉之后,这个位置就空出来了。将下标为0的元素的cur转给该k元素的cur
(###space[k].cur=space[0].cur###)
然后呢,删除的这个位置k将成为优先空位(把它的位置k存入下标为0的元素的cur中)
优缺点
优点:在插入和删除操作时,只需要修改游标,不需要移动元素,从而改进了顺序结构中插入和删除操作时需要大量移动元素的缺点。
缺点:没有解决连续储存分配带来的表长难以确定问题,失去了顺序储存结构随机存取的特性。
=============================================
循环链表
将终端结点的指针端的空指针改为指向头结点,使单链表形成一个环。
解决了 ‘如何从链表中的某一个结点出发,访问到列表的全部结点。”
循环链表的改造:头指针改为尾指针,,,,那么查找开始结点和终端结点都很方便
例如:循环链表的合并。。。。####去掉一个多余的头结点#################
================================================
双向链表
在单链表的基础上添加了prior前驱指针
p->next->prior = p = p->prior->next
注意:双向链表的插入和删除注意步骤顺序
插入:先搞定s的前驱和后继,再搞定后结点的前驱,最后解决前结点的后继
浙公网安备 33010602011771号