順序表合併演算法一 二 三

2021-06-26 04:53:51 字數 806 閱讀 4620

用順序表a和b表示的兩個線性表,元素的個數分別為m和n,若表中資料都是由小到大順序排列的,且這(m+n)個資料中沒有重複的。那麼

(1)設計乙個演算法將此兩個線性表合併成乙個,仍是資料由小到大排列的線性表,儲存到另乙個順序表c中

(2)如果順序表b的大小為(m+n)個單元,是否可以不利用順序表c而將合併成的線性表存放於順序表b中?

(3)設順序表a有m+n個元素,且前m個有序,後n個有序,設計乙個演算法,使得整個順序表有序。

解:(1)用i和j分別掃瞄順序表a和b,比較它們的當前元素,將較小者複製到順序表c中,這一過程迴圈到其中的乙個順序表掃瞄完畢為止。將另乙個順序表與小的元素全部複製到順序表c中:

void merge1(sqlist *a,sqlist *b,sqlist *c)

while(ilength)

c->data[c->length++]=a->data[i++];

while(jlength)

c->data[c->length++]=b->data[j++];

}

(2)可以,將順序表a中較小的元素插入到b中即可:

void merge2(sqlist *a,sqlist *b)

else

j++;

}}

(3)後n個元素插入到前m個元素中就行了

void merge3(sqlist *a,int m,int n)

else

j++;

}}

順序表合併

question 建立兩個非遞減順序表a,b,合併為乙個順序表但不建立新的順序表,相同資料不插入。比如 a 1 2 3 4 5 b 2 7 可把長度短的插入到長度長的順序表中,即a 1 2 3 4 5 7 實現 如下 include include define ok 1 define error ...

合併順序表

用順序表實現教材2.7.1節 42頁 的線性表合併 也可以參考課件 假設合併後的順序表的長度不會超出序表可能達到的最大長度。多組輸入。每組輸入資料由3行組成。第一行,輸入兩個整數a和b,分別代表順序表的長度。第二行和第三行,分別輸入a個和b個整數。詳見 和樣例輸入。見樣例輸出。每行最後乙個整數後有乙...

演算法競賽入門經典 第一,二,三章學習筆記

我的第七篇部落格,加深一下基礎,從小白書學起.先總結一下以前看過的第一二三章內容,加深記憶.1.輸入double使用 lf,輸出用 f 2.交換a,b值的玄學操作 a b b a b a b 或者a b a b 3.printf輸出 可以用 重視實驗,學會模仿,遵守規範.1.盡量縮小變數定義範圍.2...