(5)插入数据元素 ListInserte(i,e) 该运算在线性表中逻辑序号为位置上插入一个新元素e。 如图24所示是插入元素的示意图,由此看出,在一个线性表 中,可以在两端及中间任何位置上插入一个新元素。 元素x插入到3号位置 插入元素后的结果 會會會會會一曾曾會會會曾曾 图24在线性表中插入元素示意图
(5)插入数据元素ListInsert(i,e) 该运算在线性表中逻辑序号为i的位置上插入一个新元素e。 如图2.4所示是插入元素的示意图,由此看出,在一个线性表 中,可以在两端及中间任何位置上插入一个新元素
public bool listInsert(int i, string e) int j if(i<1‖i> length+1) return false; /参数错误时返回fase for (=length;j>=i;j-) /将daa[i-1及后面元素后移一个位置 data[j=data[] datai-1=e; /插入元素e length++ 顺序表长度增1 return true: ∥功插入返回rue -2-1 MaxSize-1 从data[n-1元素开始移动起 图2.5插入元素时移动元素的过程
public bool ListInsert(int i,string e) { int j; if (i<1 || i>length+1) return false; //参数错误时返回false for (j=length;j>=i;j--) //将data[i-1]及后面元素后移一个位置 data[j]=data[j-1]; data[i-1]=e; //插入元素e length++; //顺序表长度增1 return true; //成功插入返回true }
本算法的主要时间花在元素移动上,元素移动的次数不 仅与表长n有关,而且与插入位置有关,共有n+1个位置可以 插入元素:当n1时,移动次数为0;当i1时,移动次数为 n,达到最大值。假设每个位置插入元素的概率相同,P表示 在第个位置上插入一个元素的概率,则=1(n+1),所以在长 度为n的线性表中插入一个元素时所需移动元素的平均次数为: n(n+ P2(n-+1 (n-2+1) (n-2+1) n+1
本算法的主要时间花在元素移动上,元素移动的次数不 仅与表长n有关,而且与插入位置i有关,共有n+1个位置可以 插入元素:当i=n+1时,移动次数为0;当i=1时,移动次数为 n,达到最大值。假设每个位置插入元素的概率相同,pi表示 在第i个位置上插入一个元素的概率,则pi=1/(n+1),所以在长 度为n的线性表中插入一个元素时所需移动元素的平均次数为:
(6)删除数据元素 ListDelete(i,e 该运算删除线性表中逻辑序号为元素。如图2.6所示是 删除元素的示意图,由此看出,在一个线性表中,可以删除两 端及中间任何位置上的元素。 删除元素h 删除元素后的结果 會會會會曾一曾曾曾會曾 图2.6在线性表中删除元素示意图
(6)删除数据元素ListDelete(i,e) 该运算删除线性表中逻辑序号为i的元素。如图2.6所示是 删除元素的示意图,由此看出,在一个线性表中,可以删除两 端及中间任何位置上的元素
public bool listDelete(int i, ref string e) int j; if(i<I‖i> length) /参数错误时返回 false return false; e=datai-1; for(j=i-1i;j< length-1j++)将 datai之后的元素前移一个位置 datai=datalj+l; leng h 顺序表长度减1 return true; ∥功删除返回rue 01 i-12 n-1 Max Size-1 +1 从 batali元素开始移动起 图27删除元素时移动元素的过程
public bool ListDelete(int i,ref string e) { int j; if (i<1 || i>length) //参数错误时返回false return false; e=data[i-1]; for (j=i-1; j<length-1;j++) //将data[i]之后的元素前移一个位置 data[j]=data[j+1]; length--; //顺序表长度减1 return true; //成功删除返回true }