1
1
mirror of https://github.com/ParkMoonJ/KaoYan.git synced 2026-11-04 23:04:50 +08:00

Update 2 线性表.md

This commit is contained in:
ParkMoonJ
2021-04-06 19:08:32 +08:00
parent 02311ad495
commit 0003aecec1

View File

@@ -111,9 +111,52 @@ char CompareAB(SqList A, SqList B) {
### 2.13 试写一算法在带头结点的单链表结构上实现线性表操作 `LOCATE(L, X)`。
```cpp
int Locate(LinkList L, int x) {
p = L -> next;
int i = 1;
while (p && p -> data != x) {
p = p -> next;
}
return i;
}
```
### 2.14 试写一算法在带头结点的单链表结构上实现线性表操作 `LENGTH(L)`。
### 2.15 已知指针 `ha` 和 `hb` 分别指向两个单链表的头结点,并且已知两个链表的长度分别为m和n。试写一算法将这两个链表连接在一起(即令其中一个表的首元结点连在另一个表的最后一个结点之后),假设指针hc指向连接后的链表的头结点,并要求算法以尽可能短的时间完成连接运算。请分析你的算法的时间复杂度。
```cpp
int Length(LinkList L) {
p = L -> next;
int length = 0;
while (p) {
p = p -> next;
length++;
}
return length;
}
```
### 2.15 已知指针 `ha` 和 `hb` 分别指向两个单链表的头结点,并且已知两个链表的长度分别为m和n。试写一算法将这两个链表连接在一起(即令其中一个表的首元结点连在另一个表的最后一个结点之后),假设指针hc指向连接后的链表的头结点,并要求算法以尽可能短的时间完成连接运算。请分析你的算法的时间复杂度。
```cpp
void MergeList(LinkList &a, LinkList &b, LinkList &c) {
if (m < n) {
length = m;
hc = ha;
p = ha -> next;
q = hb -> next;
} else {
length = n;
hc = hb
p = hb -> next;
q = ha -> next;
}
while (length--) {
p = p -> next;
}
p = q;
}
```
### 2.16 已知指针 `la` 和 `lb` 分别指向两个无头结点单链表中的首元结点。下列算法是从表 `la` 中删除自第 `i` 个元素起共 `len` 个元素后,将它们插入到表 `lb` 中第 `j` 个元素之前。试问此算法是否正确?·若有错,则请改正之。
@@ -146,6 +189,10 @@ Status DeleteAndInsertSub (LinkedList la, LinkedList lb , int i, int j, int len)
### 2.17 试写一算法,在无头结点的动态单链表上实现线性表操作 `INSERT(L, i, b)`,并和在带头结点的动态单链表上实现相同操作的算法进行比较。
```cpp
void Insert(Linklist &L)
```
### 2.18 同 2.17 题要求。试写一算法,实现线性表操作 `DELETE(L, i)`。
### 2.19 已知线性表中的元素以值递增有序排列,并以单链表作存储结构。试写一高效的算法,删除表中所有值大于 `mink` 且小于 `maxk` 的元素(若表中存在这样的元素)