2014-12-04 57 views
0

嘿,我需要以排序的方式插入元素到鏈接列表中。每個元素都有一個isbn,我需要鏈接列表進行排序。它的工作方式是因爲它將最小的元素插入到頭部,但剩下的部分似乎以隨機方式排序。 這是我的代碼C按照排序的方式插入元素的鏈接列表

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參數是要插入的新元素。我使用這種方法逐個添加元素。

+0

在'(下一步 - >國際標準書號ISBN < newbook->)'你是不是比較的ISBN,但該字符串的指針。使用'(strcmp(next-> isbn,newbook-> isbn)<0)'。我知道國際標準書號是一個字符串不是數字,因爲最後一個字符可以是X. – 2014-12-04 22:31:41

+1

沒關係我已經找到解決方案的問題是我比較next-> isbn數字而不是next-> ptr-> isbn – 2014-12-04 22:37:48

+0

'if ((root == NULL)&&(root-> ptr == NULL))'?? – BLUEPIXY 2014-12-04 22:45:38

回答

1

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

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

至少有3種方法。
1. insertABook()返回linkedlist *來存儲根。

 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); 

&根是根的地址。

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

    static linkedlist *root = NULL;