輸入一組數,構建有序鏈表 (C語言實現)

要求說明

輸入一組數,構建有序鏈表。

整體思路

用數組保存這組數,每次都去找最小值,把最小值構建結點並使用頭插法插入到單鏈表中。 然後將該值刪掉(爲簡便起見,把值弄成MAX)。

這裏使用的是類直接插入的排序方法。

代碼實現

#include <stdio.h>
#include <stdlib.h>
#define MAX 1000000
// 單鏈表結構體定義
typedef struct node
{
    int val;
    struct node *next;
} node;
// 順序打印鏈表
void printNode(node* L)
{
    while(L->next!=NULL)
    {
        L = L->next;
        printf("%d ",L->val);
    }
}
int main()
{
    int n,i,j;
    //因爲要求有序,所以每次都去數組中找最小的值
    int min=MAX;
    int min_index = -1;

    int arr[100];
    scanf("%d",&n);
    for(i=0; i<n; i++)
    {
        scanf("%d",&arr[i]);
    }
    // 表頭結點head 和 需要插入的結點s
    node *head,*s;
    // 生成表頭結點,表頭結點不存放數據
    head = (node*)malloc(sizeof(node));
    head->next = NULL;
    for(i=0; i<n; i++)
    {
        for(j=0; j<n; j++)
        {
            if(min>arr[j])
            {
                min = arr[j];
                min_index = j;
            }
        }
        // 頭插法構建單鏈表
        s = (node*)malloc(sizeof(node));
        s->val = min;
        s->next = head->next;
        head->next = s;
        // 初始化最小值標識
        arr[min_index] =MAX;
        min = MAX;
    }
	// 輸出單鏈表
    printNode(head);
    return 0;
}

運行結果

由於我們每次都是找最小值,故是從小到大的順序插入。

而我們使用的是頭插法,故最終結果從大到小。

所以如果想要讓最終的單鏈表從小到大,每次都找最大值即可。

10
1 9 5 4 3 2 1 5 8 6
9 8 6 5 5 4 3 2 1 1

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章