1. 程式人生 > >順序表之重用空間

順序表之重用空間

題意:假設一個線性表採用順序表表示,設計一個演算法,刪除其中所有值等於x的元素,要求演算法的時間複雜度為O(n)、空間複雜度為O(1)。

設刪除L中所有值等於x元素後的順序表為L1,顯然L1包含在L中,為此重用L的空間。

演算法1:

void delnodel(SqList*&L,ElemType x)
{
    int k=0,i;
    for(i=0;i<L→length;i++)
        if(L→data[i]!=x)
        {
             L→data[k]=L→data[i];
             k++;
        }
    L→length=k;
}

演算法2:

void delnode2(SqList*&L,ElemType x)
{
    int k=0,i;
    while(i<L→length)
    {
        if(L→data[i]==x)
        {
            k++;
        else
            L→data[i-k]=L→data[i];
        i++;
     }
     L→length=k;
}