習題2.4 遞增的整數序列鏈表的插入 (15分)


本題要求實現一個函數,在遞增的整數序列鏈表(帶頭結點)中插入一個新整數,並保持該序列的有序性。

函數接口定義:

List Insert( List L, ElementType X ); 
 

其中List結構定義如下:

typedef struct Node *PtrToNode; struct Node { ElementType Data; /* 存儲結點數據 */ PtrToNode Next; /* 指向下一個結點的指針 */ }; typedef PtrToNode List; /* 定義單鏈表類型 */ 
 

L是給定的帶頭結點的單鏈表,其結點存儲的數據是遞增有序的;函數Insert要將X插入L,並保持該序列的有序性,返回插入后的鏈表頭指針。

裁判測試程序樣例:

#include <stdio.h> #include <stdlib.h> typedef int ElementType; typedef struct Node *PtrToNode; struct Node { ElementType Data; PtrToNode Next; }; typedef PtrToNode List; List Read(); /* 細節在此不表 */ void Print( List L ); /* 細節在此不表 */ List Insert( List L, ElementType X ); int main() { List L; ElementType X; L = Read(); scanf("%d", &X); L = Insert(L, X); Print(L); return 0; } /* 你的代碼將被嵌在這里 */ 
 

輸入樣例:

5
1 2 4 5 6
3
 

輸出樣例:

1 2 3 4 5 6 



List Insert( List L, ElementType X )
{
    List tmp;
    tmp =(List) malloc(sizeof(struct Node));//創建結點,並且放入數據
    tmp->Data = X;
    List p = L;
   //找到比x大的第一個結點的前驅結點,然后插入
    while(p->Next&&X>p->Next->Data)//當p->Next為空的時候為頭(尾)節點后插入表頭
    {
        p = p->Next;
    }

        tmp->Next = p->Next;
        p->Next = tmp;
    

    return L;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM