gpt4 book ai didi

c - 如何按字段之一对结构链表进行排序?

转载 作者:行者123 更新时间:2023-12-04 06:39:53 24 4
gpt4 key购买 nike

哇现在我知道我没有。哈哈。

我的结构是这样的:

struct Medico{ 
int Id_Doctor;
int Estado;
char Nombre[60]; ////focus on this part of the structure, this is name.
char Clave_Acceso[20];
char Especialidad[40];
struct Medico *next;
};

我想根据名称(字母顺序..)组织结构关于如何解决这个问题的任何想法?

例如
Albert Haynesworth
Bob Marley
Carl Johnson

非常感谢您的先进。 :)(C,Unix)

最佳答案

在 C 中对链表实现归并排序非常简单:

#include <string.h>
#include <stdlib.h>
#include <stdio.h>

struct node {
struct node *next;
char *data;
};

struct node *
divlist (struct node *n) {
int i = 0;
if (n) {
struct node *tail, *n2 = n;
while (1) {
n2 = n2->next;
if (!n2) break;
if (i++ & 1) n = n->next;
}
tail = n->next;
n->next = NULL;
return tail;
}
return NULL;
}

struct node *
mergelists(struct node *a, struct node *b) {
struct node *n;
struct node **last = &n;
if (!a) return b;
if (!b) return a;

while (1) {
if (strcmp(a->data, b->data) > 1) {
*last = b;
last = &b->next;
b = b->next;
if (!b) {
*last = a;
break;
}
}
else {
*last = a;
last = &a->next;
a = a->next;
if (!a) {
*last = b;
break;
}
}
}
return n;
}

struct node *
sortlist (struct node *n) {
struct node *tail = divlist(n);
if (!tail) return n;
return mergelists(sortlist(n), sortlist(tail));
}

int main(int argc, char *argv[]) {
int i;
struct node *n1, *n = NULL;
for (i = argc; --i >= 1;) {
n1 = (struct node *)malloc(sizeof(*n1));
n1->data = argv[i];
n1->next = n;
n = n1;
}

n1 = n = sortlist(n);

while (n1) {
printf("%s\n", n1->data);
n1 = n1->next;
}
return 0;
}

请注意,您必须修改此代码才能使用您的数据结构和正确的比较!

关于c - 如何按字段之一对结构链表进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4385061/

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