順序表的部分演算法

2021-08-15 05:11:54 字數 2033 閱讀 1204

1.從順序表中刪除具有最小值的元素(假設唯一)並由函式發回被刪元素的值。空出的位置由最後乙個元素填補,若順序表為空則顯示出錯資訊並退出執行;

演算法思想:搜尋整個順序表,查詢最小值元素並記錄位置,搜尋結束後用最後乙個元素填補空出的原最小值元素位置。

/* **從順序表中刪除具有最小值的元素(假設唯一)並由函式發回被刪元素的值。** */

/* **空出的位置由最後乙個元素填補,若順序表為空則顯示出錯資訊並退出執行;** */

int del_min(sqlist *l,elemtype e)

e = l.data[0];

int temp = 0;

for(int i=0;ilength;i++)

}l->data[pos] = l->data[l->length-1]; //空出的位置由最後乙個元素填補

l->length--;

return true;

}

2.設計乙個高效演算法,將順序表的所有元素逆置;

演算法思想:掃瞄順序表的前半部分元素,對於元素l->data[i](0<=ilength/2),將其餘後半部分對應元素l->data[l->length-i-1]進行交換。

//設計乙個高效演算法,將順序表的所有元素逆置

void reverse(sqlist *l)

}

3.長度為n的順序表l,編寫乙個時間複雜度為o(n),空間複雜度為o(1)的演算法,該演算法刪除線性表中所有值為x的資料元素;

演算法思想一:用m記錄順序表l中不等於x的元素個數,遍歷並統計,並將不等於x的元素向前放置m位置上,最後修改表的長度

演算法思想二:用m記錄順序表l中等於x的元素個數,遍歷並統計,並將不等與x的元素前移m個位置,最後修改表的長度。

//長度為n的順序表l,編寫乙個時間複雜度為o(n),

//空間複雜度為o(1)的演算法,該演算法刪除線性表中所有值為x的資料元素

void del_x_1(sqlist *l,elemtype x)

}l->length=m; //順序表長度為m

}void del_x_2(sqlist *l,elemtype x)

l->length = l->length-m;

}

4.從有序順序表中刪除其值在給定值s與t之間(要求s演算法思想:先尋找值大於等於s的第乙個元素(第乙個刪除的元素),然後尋找值》t的第乙個元素(最後乙個刪除元素的

下一位),刪除這段元素,即將後面的元素前移;注意:這裡是有序順序表,則再值s與t之間的元素必然是乙個整體,若非有

序,則遍歷表查詢在s與t之間值的元素,例如記錄為m,m++,對非元素向前移m位;

//從有序順序表中刪除其值在給定值s與t之間(要求s=t || l->length == 0)

printf("資訊錯誤。");

for(i=0;ilength&&l->data[i]=l->length)

printf("資訊錯誤。");

for(j=i;jlength&&l->data[j]<=t;j++); //找出》t的第乙個元素

for(;jlength;i++,j++)

l->data[i] = l->data[j];

l->length = i;

return true;

}

5.從有序順序表合併成乙個新的有序順序表,並函式返回結果順序表

演算法思想:首先,將兩個順序表表頭較小的結點按順序存入新的順序表中。然後判斷表的剩餘,將剩下的部分加到新的順序表後面。

//從有序順序表合併成乙個新的有序順序表,並函式返回結果順序表

int merge(sqlist *la,sqlist *lb,sqlist *lc)

while(ilength)

while(jlength)

lc->length = m;

return true;

}

待續。。。

順序表演算法

順序表演算法 順序表演算法 設順序表 a,元素的個數是 n,沒有重複。如果 a 中前 k 個元 素有序,後 n k 個元素有序,設計乙個演算法使得整個順序表有序,要求演算法的空 間複雜度為 o 1 include include define elemtype int define status i...

順序表的演算法操作

1 順序表 順序表就是把線性表中的所有元素按照其邏輯順序,依次儲存到從指定的儲存位置開始的一塊連續的儲存空間中。2 演算法 define maxsize 100 typedef struct typedef宣告新的型別名來代替已有的型別名 sequencelist int querydata seq...

順序表的逆置演算法

對於線性表傳線性表s的引用 int main return 0 通過 s解說主函式傳遞的引用,getchar 函式會吃回車,為了方便用a作為停止迴圈的標誌 void insert int i,seqlist s s a i 1 0 s num i 比較常見的演算法,但是重新寫一次的時候想到微機原理裡...