线性表定义:零个或多个数据元素的有限序列 (包含顺序表和链表)
顺序表:元素的地址是连续的(其实就是数组)
链表:节点的地址不是连续的,通过指针相连
顺序表:查询,插入,删除,遍历
1、查询:
按位查找的时间复杂度为O(1)
按值查找的时间复杂度为O(n)
2、插入:O(n)
3、删除:O(n)
4、遍历:O(n)
链表:查询,插入,删除,遍历
1、查询:O(n)
对链表中的元素一次进行比较,平均性能是O(n)
2、插入:O(n)
链表的插入相当于粘贴,先粘贴上去,再拆链表。
s—>data = x;//将x的值存储在s中,链表是用来存储数据的,方便以后对链表值的操作
s—>next = p—>next;//先粘贴新节点到立案表上,再拆链表,不然链表就断了
p—>next = s;//s本身就是地址,p节点的next找到s,完成链表的插入操作
3、删除:时间花在遍历链表上
O(n):
1、从头开始遍历链表,找到第i-1个节点
2、将第i-1节点next指向第i个节点的next
第一步,先将删除节点的值取出
先拆再粘,最后全部拆掉
int x = q—>data;
p—>next = q—>next;
4、遍历:O(n)
链表的优缺点:
优点:
1、插入、删除不需要移动其他元素,只需要改变指针
2、链表各个节点在内存中不要求连续,空间利用率高
缺点:
查找需要遍历操作,时间利用率太低