顺序表插入元素
● 在任一位置插入元素的概率为
p
=
1
n
+
1
p=\frac{1}{n+1}
p=n+11
● 在
i
i
i位置(
i
i
i的取值:
[
0
,
n
]
[0, n]
[0,n])之前插入元素,需要移动
(
n
−
i
)
(n-i)
(n−i)个元素
● 插入元素平均要移动的元素个数为
n
2
=
(
0
+
n
)
(
n
+
1
)
2
∗
p
\frac{n}{2}=\frac{(0+n)(n+1)}{2}*p
2n=2(0+n)(n+1)∗p
插入位置 | 元素移动个数 |
---|---|
0 | n |
1 | n-1 |
… | … |
n | 0 |
顺序表删除元素
● 在任一位置删除元素的概率为
p
=
1
n
p=\frac{1}{n}
p=n1
● 在
i
i
i位置(
i
i
i的取值:
[
0
,
n
−
1
]
[0, n-1]
[0,n−1])之前插入元素,需要移动
(
n
−
i
−
1
)
(n-i-1)
(n−i−1)个元素
● 删除元素平均要移动的元素个数为
n
−
1
2
\frac{n-1}{2}
2n−1
移动次数计算与静态链表
静态链表使用数组存储,模拟真正的链表
节点类型定义
typedef struct
{
int data;
int next; //记录下一个节点是谁
}SLNode;
SLNode SLink[maxSize]; //建表
int p = Ad0; //定义一个指针
SLink[p].data; //取p指针指向的节点值,类比p->data
SLink[p].next; //取p后继节点指针,类比p->next
//在p后插入节点q
SLink[q].next = SLink[p].next;
SLink[p].next = SLink[q];
//类比q->next = p->next; p->next = q;