PTA 6 6 鍊錶拼接(20分)

2021-09-14 04:43:30 字數 1978 閱讀 1823

本題要求實現乙個合併兩個有序鍊錶的簡單函式。

鍊錶結點定義如下:

struct listnode ;
函式介面定義:

struct listnode *mergelists(struct listnode *list1, struct listnode *list2);
其中list1和list2是使用者傳入的兩個按data公升序鏈結的鍊錶的頭指標;函式mergelists將兩個鍊錶合併成乙個按data公升序鏈結的鍊錶,並返回結果鍊錶的頭指標。

裁判測試程式樣例:

#include #include struct listnode ;

struct listnode *createlist(); /*裁判實現,細節不表*/

struct listnode *mergelists(struct listnode *list1, struct listnode *list2);

void printlist( struct listnode *head )

printf("\n");

}int main()

/* 你的**將被嵌在這裡 */

輸入樣例:

1 3 5 7 -1

2 4 6 -1

輸出樣例:

1 2 3 4 5 6 7
題目解答:

struct listnode *mergelists(struct listnode *list1, struct listnode *list2)

while(p2)

int i, j, temp;

for(i=1; ia[j+1])}}

for(i = 0; i < len; i++)

if(tail != null)//tail為開闢節點

tail = q;

tail->next = null;

}return head;

}

氣泡排序:

以「3 2 4 1」為例對氣泡排序進行說明

第一輪(排序過程)

3 2 4 1(最初)

2 3 4 1(比較3和2,交換)

2 3 4 1(比較3和4,不交換)

2 3 1 4(比較1和4 ,交換)

第一輪結束,最大數字已經在後邊,因此第二輪需要排序只需要對前面3個數字進行比較

第二輪(排序過程)

2 3 1 4(第一輪排序結果)

2 3 1 4(比較2和3,不交換)

2 1 3 4(比較3和1,交換)

第二輪結束,次大數已在倒數第二位

第三輪(排序過程)

2 1 3 4(第二輪排序結果)

1 2 3 4(比較2和1,交換)

至此,排序過程結束。

選擇法排序:

選擇法排序的演算法步驟如下:

1.在未排序的n個數(在a[0]~a[n-1])中找到最小數,將它與a[0]交換:

2.在剩下未排序的n-1個數(a[1]~a[n-1])中找到最小數,將它與a[1]

交換:···········

第n-1步:在剩下未排序的兩個數(a[n-2]~a[n-1])中找到最小數,將

它與a[n-2]交換:

~~~核心**:~~~/*對n個數進行排序*/

for(k=0;ktemp=a[index];/*最小元素與下標為k的元素交換*/

a[index]=a[k];

a[k]=temp;

}

6 25 鍊錶拼接 20 分

原題鏈結 題目的大意是給定兩個公升序單鏈表,合併成要給鍊錶,合併後仍然公升序,題目要求實現的是mergelist 函式。資料結構中講歸併排序的鍊錶實現時,其中的乙個步驟就是合併鍊錶。include include struct listnode struct listnode createlist ...

6 4 鍊錶拼接 20分

正確作答出這個程式前,發現測試點老是段錯誤或者執行超時,心態 然後準備csdn上面copy一手,誰都不愛。結果發現自己能力有限,沒法短時間消化其他大佬的 於是搞出了自認為較為通俗易懂的 當然,本篇的通過 或許有進步空間,還請各位讀者不吝賜教 本題要求實現乙個合併兩個有序鍊錶的簡單函式。鍊錶結點定義如...

PTA6 6 帶頭結點的鏈式表操作集

list makeempty position find list l,elementtype x bool insert list l,elementtype x,position p bool delete list l,position p 其中list結構定義如下 typedef struc...