簡體   English   中英

C鏈表插入元素的排序方式

[英]C Linked list inserting element in a sorted way

嘿,我需要以一種排序的方式將元素插入到鏈表中。 每個元素都有一個isbn,我需要對鏈表進行排序,這是可行的,因為它在頭部插入了最小的元素,但是剩下的似乎是隨機排序的。 這是我的代碼

void insertABook(linkedlist *root, linkedlist *newbook)
{ 
    if ((root==NULL) && (root->ptr==NULL))
    {
        root->ptr=newbook;
    }
    else
    {
        linkedlist *next = root;
        while((next->ptr != NULL) && (next->isbn < newbook->isbn))
        {
            next = next->ptr;
        }
        newbook->ptr=next->ptr;
        next->ptr=newbook;
    }
}

根參數是虛擬節點(NULL),而newbook參數是要插入的新元素。 我使用這種方法一一添加元素。

參數root是一個值,它是存儲在根中的地址。
我猜你的代碼。

    linkedlist *root = NULL, *newbook;
    while (...) {   // or for( , , )
        newbook = malloc(sizeof(linkedlist));
        // edit newbook
        insertABook(root, newbook);
              :
              :

至少有3種方式。
1. insertABook()返回鏈表*以存儲根。

        root = insertABook(root, newbook);

2.將root更改為鏈表**。 我想這就是您想要的答案。

void insertABook(linkedlist **root, linkedlist *newbook) {
    if (*root==NULL) {
        *root=newbook;
    }
    else {  // insert or append
        linkedlist  *next = *root;
            :
            :

呼叫者

        insertABook(&root, newbook);

&root是root的地址。

  1. root在源文件中是全局的。

     static linkedlist *root = NULL; 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM