按名称排序c处的复杂结构

时间:2014-01-13 12:16:13

标签: c sorting struct

我正在开发一个c程序。我正在使用这个结构:

main.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;
}

我需要更改此函数以通过其中一个元素对结构进行排序,例如通过ag-&gt; nom [0]。但我从C开始,我不知道如何做到这一点

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

你可以冒泡它:

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函数中找到列表的头部开始打印,除非你确定该函数总是作为参数传递给列表的头部。