2014-01-13 4 views
1

Я разрабатываю программу c. Я использую эту структуру:Сортировка по названию сложной структуры в 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-> nom [0]. Но я начинаю с C, и я не знаю, как я мог это сделать

Кто-нибудь может мне помочь?

+0

Вы можете проверить сортировку пузырьков. – George

+0

Я знаю некоторый код сортировки, но я никогда не использую struct с указателями, и я не знаю, как применить код сортировки для этой структуры ... – alberph

+2

@George: Использование 'qsort' почти всегда лучше, чем реализация собственных. –

ответ

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

Вы просто должны реализовать функцию сравнения и функция подкачки.

Здесь итератор первоначально является указателем на первый элемент списка. Это ваш долг найти его.

Также я предлагаю в функции печати найти начальную страницу для начала печати, если вы не уверены, что функция всегда передается головке списка в качестве параметра.

Смежные вопросы