在顺序表中插入和删除一个元素,平均需要移动多少个元素?

2024-11-23 11:00:27
推荐回答(2个)
回答1:

需要平均移动约表长一半的元素,具体移动的元素个数与该元素在线性表中的位置有关。

添加到第1个,移动N个元素;

添加到第2个,移动(N-1)个元素;

……

添加到第N个,移动1个元素;

添加到第(N+1)个,移动0个元素

平均:(0+1+2+……+N)/(N+1)=N/2

删除第1个,移动(N-1)个;


删除第2个,移动(N-2)个;

……


删除第N个,移动0个


平均:[0+1+……+(N-1)]/N=(N-1)/2

扩展资料:

插入或删除一个元素,需要移动的是插入或删除元素后面的元素。

由于顺序表的存储特点是:只要确定了起始位置,表中任一元素的地址都通过下列公式得到:LOC(ai)=LOC(a1)+(i-1)*L  1≤i≤n 其中,L是元素占用存储单元的长度。

所以确定了插入或删除元素的位置后,便可算出需要移动的元素个数。

参考资料:百度百科-顺序表

回答2:

添加到第1个,移动N个;

添加到第2个,移动(N-1)个;

……

添加到第N个,移动1个;

添加到第(N+1)个,移动0个

平均:(0+1+2+……+N)/(N+1)=N/2

删除第1个,移动(N-1)个;

删除第2个,移动(N-2)个;

……

删除第N个,移动0个

平均:[0+1+……+(N-1)]/N=(N-1)/2

顺序表的结构定义:

#define maxlen 50 //定义顺序表中元素个数最多有几个

typedef struct{elementtype data[maxlen]; //elementtype是元素的类型 依具体情况而定

int listlen; //便于时刻了解顺序表里元素的个数

}seqlist; //顺序表的名称 不妨为seqlist

声明顺序表类型变量:

seqlist L,L1;

如顺序表的每个结点占用len个内存单元,用location (ki)表示顺序表中第i个结点ki所占内存空间的第1个单元的地址。则有如下的关系:location (ki+1) = location (ki) +len

location (ki) = location(k1) + (i-1)len

存储结构要体现数据的逻辑结构,顺序表的存储结构中,内存中物理地址相邻的结点一定具有顺序表中的逻辑关系。