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;
}
}
I have this error in the code within the if function of the insertion sort. The program says that 'n' must have arithmetic or pointer type. What seems to be the problem?
Operator overload is not supported in C, so you cannot compare Record
using >
operator unless it is typedef
ed to int
or other aritimetic or pointer type.
To compare something like structures, define comparation function and use it.
Example:
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
{
/* ... */