C语言数据结构_从顺序表中删除元素


从静态顺序表中删除第i个位置元素的代码如下:

void DelElem(ElemType Sqlist[], int &n, int i){
    int j;
    if(i<1 || i>n)
        exit(0);			//非法删除
    for(j=i; j

从动态生成的顺序表中删除第i个位置元素的代码如下:

void DelElem(Sqlist *L,int i)
{
    ElemType *delItem,*q;
    if(i<1 || i>L->length) exit(0);
    delItem=&(L->elem[i-1]);
    q=L->elem + L->length - 1;
    for(++delItem;delItem<=q;++delItem)
    {
        *(delItem-1)=*delItem;
    }
    L->length--;
}

函数DelElem()的作用是在顺序表中删除第i个位置的元素,并将顺序表的长度减少1。其实现过程如下:

(1)判断删除的元素是否合法。一个长度为n的顺序表的可能删除元素的位置是1~n+1,因此如果i<1或者i>n+1,都是非法的。

(2)将顺序表的i位置以后的元素顺序后前移动一个元素的位置,这样会覆盖第i个元素的位置,起到删除第i个元素的作用。

(3)将表长减1。