gpt4 book ai didi

C:插入排序逻辑无法使用指针和结构来工作

转载 作者:行者123 更新时间:2023-11-30 17:02:13 25 4
gpt4 key购买 nike

typedef struct record
{
char name[20];
char surname[20];
char telephone[20];

}Record;

typedef struct node
{
Record data;
struct node *next;
}Node;

Node *head = NULL;

/*
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->name > y->name) return 1;
if (x->name < y->name) return -1;
return 0;
}

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 ((cmpRecord(&n->data.name, &newNode->data.name) < 0) && (cmpRecord(&n->next->data.name, &newNode->data.name) > 0)) // 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;

}

}

因此,这段代码应该在列表中添加人员记录,并根据名称按字母顺序对它们进行排序。但是,在显示列表时,项目不按字母顺序排列。似乎有什么问题?谢谢附言。 cmpRecord 在 if 语句中用于插入排序。

最佳答案

要按字母顺序比较两个字符串,请使用 strcmp():

int cmpRecord(const Record* x, const Record* y) {
int cmp = strcmp(x->name, y->name);
return (cmp > 0) - (cmp < 0);
}

并通过cmpRecord(&n->data, &newNode->data);调用此函数,因为data字段的类型为Record

关于C:插入排序逻辑无法使用指针和结构来工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36664546/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com