在c中按名称对复杂结构进行排序

在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;

我正在开发一个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;
} 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()。