- 总结一下线性表的特点。
(1) 存在唯一的一个被称作“第一个”的数据元素,表头元素;
(2) 存在唯一的一个被称作“最后一个”的数据元素。表位元素;
(3) 除第一个之外,结构中的每个数据元素均只有一个前驱;
(4) 除最后一个外,结构中的每个数据元素均只有一个后继。
- 顺序表插入算法Insert(SqList *L,int i,ElemType e)实现过程中,如果有n个元素,在i位置插入,则需要向后移动多少个元素? 第一个移动的元素是哪个位置?最后一个移动的元素是哪个位置?
移动(n-i+1)个元素,第一个移动的是最后一个元素,最后一个移动的是第i个位置的元素的元素
- 顺序表删除算法Delete(SqList *L,int i)实现过程中,如果有n个元素,删除第i个元素,则需要向前移动多少个元素? 第一个移动的元素是哪个位置?最后一个移动的元素是哪个位置?
要移动(n-i)个元素,第一个移动第i+1个位置的元素,最后一个移动最后一个元素
- 总结一下顺序表的优缺点。
优点:可以随机存储,节省空间开销
缺点:插入和删除时间复杂度太高,需要移动大量元素
- 构造先进先出单链表(也称为尾插法),新插入的元素在表头还是表尾?每次插入新结点时的操作包括哪几步?
在表尾
步骤:1)建立一个新结点,指针为空
- 尾指针指向头结点
- 生成新节点,输入元素
- 插入到表尾
- r指针指向新的尾结点
- 构造后进先出单链表(也称为头插法),新插入的元素在表头还是表尾?每次插入新结点时的操作包括哪几步?
在表头
步骤:1)建立头结点,next域为空
- 生成新节点P
- 输入新的元素
- 插入到表头
- 在单链表中第i个位置插入新元素e,总结一下算法思路是什么?(用文字描述)
首先生成一个新节点x,数据域存入e,x的指针域指向第i+1个位置,第i-1个位置的结点指针域指向x
- 在单链表中删除第i个结点,总结一下算法思路是什么?(用文字描述)
将第i-1个结点的指针域指向第i+1个结点
- 在单链表中删除值为e的结点,总结一下算法思路是什么?(用文字描述)
从头结点开始顺着与e比较,若符合,则删除,若越界或链表为空返回错误值
- 有序单链表合并算法中,pa,pb,pc三个指针的作用是什么?如果pa->data大于pb->data,应该怎么办(给出代码)?如果pa->data小于pb->data,应该怎么办(给出代码)?
Pa和pb分别指向La表和Lb表当前待插入的结点位置,pc指向表Lc中最后一个结点
如果pa->data大于pb->data:pc->next=pb,pc=pb,pb=pb->next;
pa->data小于pb->data:pc->next=pa,pc=pa,pa=pa->next;
- 相比较单链表,单循环链表的区别是什么?优点是什么?
可以从任意位置查询到所有结点
优点是可以简化链表合并算法
- 双向链表结点包括几部分?分别存储的是什么信息?
三部分:两个指针域,一个数据域
分别存储直接前驱地址,直接后继地址,数据元素
- 如下图所示的双向循环链表中,在p指针指向的结点后面插入s指针指向的e结点,给出操作语句。
S->next=P->next;
P->next=S;
P->next->front=S;
S->front=P;
12、如下图所示的双向循环链表中,删除q指针指向的结点,给出操作语句。
- >next->front=p;
- >next=q->next;
Free(q);