在c中按名称对复杂结构进行排序
我正在开发一个c程序。我正在使用此结构: 主要条款h:在c中按名称对复杂结构进行排序,c,sorting,struct,C,Sorting,Struct,我正在开发一个c程序。我正在使用此结构: 主要条款h: #define LONG_CADENA 22 #define NUM_CADENAS 5 #define formato "%22s%22s%22s%22s%22s\n" #define indi_format "%22s" typedef struct Agenda { char* nom[NUM_CADENAS]; struct Agenda* ant; struct Agenda* sig;
#define LONG_CADENA 22
#define NUM_CADENAS 5
#define formato "%22s%22s%22s%22s%22s\n"
#define indi_format "%22s"
typedef struct Agenda
{
char* nom[NUM_CADENAS];
struct Agenda* ant;
struct Agenda* sig;
} ag;
我有此功能来显示目标议程:
#include <stdio.h>
#include "main.h"
ag* mostrarAgenda(ag* act)
{
unsigned i = 0;
void* ini;
ini = act;
while (act++->sig) //ma1: Reescribir esta línea utilizando el bucle for
{
for (; i<NUM_CADENAS; i++)
{
printf(indi_format, act->nom[i]);
}
}
printf("\n");
getchar();
return ini;
}
#包括
#包括“main.h”
ag*mostrarAgenda(ag*act)
{
无符号i=0;
void*ini;
ini=act;
while(act++->sig)//ma1:Reescribir esta línea utilizando el bucle for
{
对于(;inom[i]);
}
}
printf(“\n”);
getchar();
返回ini;
}
我需要更改此函数以按其中一个元素对结构进行排序,例如按ag->nom[0]。但是我从C开始,我不知道怎么做
有人能帮我吗?你可以对它进行气泡排序:
int c;
do {
c=0;
while(iterator->sig){
if ( compare(iterator,iterator->sig) > 0 ) {
swap(iterator,iterator->sig);
c++;
}
iterator=iterator->sig;
}
} while (c);
您只需实现比较函数和交换函数
这里的迭代器最初是指向列表第一个元素的指针。找到它是你的责任
另外,我建议在print函数中找到列表的开头开始打印,除非您确定该函数始终作为参数传递给列表的开头。您可以查看气泡排序。我知道一些排序代码,但我从不使用带指针的struct,我不知道如何为这个结构应用排序代码…@George:使用
qsort
几乎总是比实现你自己的更好。@KlasLindbäck是的,但正如我所见,他有一个未知长度的议程链接列表,他想排序。不太好用。@George你说得对,不能用sort()。