1. 程式人生 > >【領卓教育】資料結構/C 單鏈表順序插入 結點

【領卓教育】資料結構/C 單鏈表順序插入 結點

先定義一個結構體,並建立一個空的帶頭單鏈表!

typedef struct node
{
    int data;
    struct node * next;
}link_list;

link_list * creat_malloc()  //返回一個指標
{
    link_list *p ;
    p = malloc(sizeof(*p));
    if(p == NULL)
        return NULL;

    p->next = NULL;
    return p;   
}

順序插入結點需要將你要插入的結點 與  連結串列中的值進行比較!

int list_order_insert(link_list *me,int *data)       //順序插入
{
    link_list *p = me,*q;
    while(p->next && p->next->data < *data )     //p->next 表示p->next不為空
    {                                            //*data是你要插入的值
        p = p->next;                          //你要插入的值大於當前結點,就與下一個結點比較
                                               //當前結點的值要是大於*data,就跳出迴圈
    }
    q = malloc(sizeof(*q));                 //為你插入的結點申請記憶體空間,並用q指向它
    if(q == NULL)                            //如果申請失敗,返回-1
        return -1;

    q->data = *data;                          //將引數*data 賦給q->data
    q->next = p->next;                        //q這兩句是插入的基本語句
    p ->next = q;
    return 0;
}

下面是主函式:

int main()
{
    int i;
    link_list *p;
    int arr[] = {12,9,3,34,5,45,6};
    p=creat_malloc();
    printf("hello1\n");
    for(i = 0;i<sizeof(arr)/sizeof(*arr);i++)
    {
        list_order_insert(p,&arr[i]);
    }
    printf("hello\n");
    show(p);
}

結果如下: