2016-04-13 2 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; 
} 

}С Ошибка: выражение должно иметь арифметический или указатель типа

У меня есть эта ошибка в коде, если в функции вставки рода. В программе говорится, что «n» должен иметь тип арифметики или указателя. В чем проблема?

+0

[. Пожалуйста, смотрите эту дискуссию о том, почему не бросить возвращаемое значение 'таНос()' и семьи в 'C'] (http://stackoverflow.com/q/ 605845/2173917). –

+0

Я почти уверен, что сообщение об ошибке, которое вы отправили (вставляемое), ошибочно –

+0

В какой строке вы получаете ошибку? Каково определение типа Record? – MikeC

ответ

1

перегрузка оператора не поддерживается в C, так что вы не можете сравнить Record с помощью > оператора, если это не typedef ред к int или другой aritimetic или указатель типа.

Чтобы сравнить что-то вроде структур, определите функцию сравнения и используйте его.

Пример:

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 
     { 
/* ... */