知识参考王道考研 硬看知识和视频一直瞌睡无聊 破了两天题才寻得规律 故在此记录
分为顺序存储和链式存储
线性表的定义:具有相同数据类型的n个数据元素的有限序列 注意 相同数据类型 有限序列
还有就是 线性表是一种逻辑结构 顺序表和链表是存储(物理)结构
1.顺序存储 即顺序表
这个不太难 几句废话结束
分清 位序和数组下标的区别 为序-1=下标
可以随机存取 存储密度高
关于操作实现 即CRUD
1.初始化的时表长度设为0 无论静态或动态分配
2.关于插删 需要移动元素 所以时间复杂度 浪费在此
3.查找(按序号)很简单 按值的话一一遍历
插入一个元素自然需要从头开始找到那个位置 然后插入 其后元素向后移动 length+1
删除一个元素也需要从头开始找到那个位置 然后删除 其后元素向前移动 length-1
2. 关于练习题后续补充 但最难的是链表
因为参考的是考研的所以就以此为例
1.单链表
2.双链表
3.循环链表
4.静态链表
对于链表 不仅存储值也存储一个地址
所以删除和插入较顺序表简便
表的初始化
这里需要一个概念头结点 是为了方便运算
带头结点
L=(LNode*)malloc(sizeof(LNode));
L->next=NULL;
不带头结点
L=NULL
找某个结点(按序号)
LNode*p=L;
int j=0;
while(p!=NULL&&j<i){
p=p->next;
j++;
}
单链表和双链表的插入删除 这个才是最重要的 也是最难的
单链表插入 就他妈的记住让q的next指针指向的是S S的next指针指向的是P
双链表插入(中间的data省略了) 就是四次记住
要插入的元素prior指向P next指向q
p的next指向s q的prior指向s
无论他怎么变都一样 顶多就是q或者p不给你 但你可以根据另一个找到另一个
如:p->next->prior即为q的prior 你让他指向S即可
单链表删除 很简单就是让q的next指向的不是要删除的p而是s即可 然后free(p)
多链表删除
q的next指向s s的prior指向q 然后free(p)
关于循环链表
循环单链表:最后结点(尾结点)指针指向头结点 判空条件 头结点是否等于头指针
循环双链表:头节点的prior指向尾结点 判空条件 头结点的prior和next域都等于头指针
上面我漏掉了插入删除是否是特殊结点 即第一个元素或最后一个元素 或是前插后插都一样 按上分析即可
静态链表也不多bb了直接看真题分析
ok了 后续再补充错题
标签:结点,线性表,指向,插入,56,next,链表,prior,数据结构 From: https://www.cnblogs.com/gaodiyuanjin/p/18408773