2016-04-13 32 views
0
typedef struct node 
{ 
    Record data; 
    struct node *next; 
}Node; 

Node *head = NULL; 

void addRecord(Record x) 
{ 
    Node *previousNode = NULL; 
    Node *newNode; 
    Node *n; 

newNode = (Node*)malloc(sizeof(Node)); 
newNode->data = x; 
newNode->next = NULL; 

if (head == NULL) // The list is empty 
{ 
    head = newNode; 
} 
else  // The list is not empty 
{ 
    n = head; 
    while (n->next != NULL) 
    { 
     ***if (n->data < newNode->data && n->next->data > newNode->data)*** // Insertion Sort 
     { 
      // We have to put it between these 2 nodes 
      newNode->next = n->next; 
      n->next = newNode; 
      return; 
     } 
     else 
     { 
      previousNode = n; 
      n = n->next; 
     } 
    } 
    n->next = newNode; 
} 

}C Hata: ifade I sokma tür halinde işlev içinde kod bu hatayı aritmetik veya işaretçi türü

olmalıdır. Program, 'n' aritmetik veya işaretçi türüne sahip olması gerektiğini söylüyor. Sorun ne görünüyor?

+0

[. C' 'malloc'un()' ve aile 'dönüş değer dağıtmak için neden bu tartışmayı bakınız] (http://stackoverflow.com/q/ 605845/2173917). –

+0

Gönderdiğiniz hata iletisinin neredeyse hatalı olduğundan eminim (yapıştırılan) hatalı –

+0

Hangi satırda hata oluyorsunuz? Kayıt türü tanımı nedir? – MikeC

cevap

1

Operatör aşırı C desteklenmez, bu nedenle bunu int veya diğer aritimetic veya işaretçi türüne typedef ed olmadıkça Record> operatörünü kullanarak karşılaştırılamaz.

Yapı gibi bir şeyi karşılaştırmak için karşılaştırma fonksiyonunu tanımlayın ve kullanın.

Örnek:

typedef struct { 
    int a, b; 
} Record; 

/* 
return positive value if *x > *y 
return negative value if *x < *y 
return 0 if *x == *y 
*/ 
int cmpRecord(const Record* x, const Record* y) { 
    if (x->a + x->b > y->a + y->b) return 1; 
    if (x->a + x->b < y->a + y->b) return -1; 
    return 0; 
} 

/* ... */ 
    while (n->next != NULL) 
    { 
     if (cmpRecord(&n->data, &newNode->data) < 0 && cmpRecord(&n->next->data, &newNode->data) > 0) // Insertion Sort 
     { 
/* ... */