Witam, mam program
który zczytuje dane(imię nazwisko i datę urodzenia) następnie ma posortować alfabetycznie według imienia, mecze się już parę godzin ale nie mogę wpaść na to jak przy sortowaniu bąbelkowym listy w funkcji sort podmienić dwa elementy. Ta funkcja w takiej postaci jak jest gubi mi wskaźnik do pierwszego elementu.
Dzieki za pomoc.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct wpis{
char *imie, *nazwisko, *datau;
struct wpis *next;
} dane;
struct wpis *dodaj_wpis;
struct wpis *poczatek = NULL;
struct wpis *koniec = NULL;
void nowy()
{
char t[20];
char r[20];
char p[20];
dodaj_wpis = malloc(sizeof (dane));
printf("Podaj imie: ");
scanf("%s", t);
dodaj_wpis->imie=malloc( sizeof(char) * strlen(t));
strcpy( dodaj_wpis->imie, t );
printf("Podaj nazwisko: ");
scanf("%s", r);
dodaj_wpis->nazwisko=malloc( sizeof(char) * strlen(r));
strcpy( dodaj_wpis->nazwisko, r );
printf("Podaj date urodzenia: ");
scanf("%s", p);
dodaj_wpis->datau=malloc( sizeof(char) * strlen(p));
strcpy( dodaj_wpis->datau, p );
dodaj_wpis -> next = NULL;
if (koniec == NULL)
poczatek = koniec = dodaj_wpis;
else {
koniec->next = dodaj_wpis;
koniec = dodaj_wpis;
}
}
void screen()
{
int lp = 1;
struct wpis *tmp;
if(poczatek != NULL)
tmp = poczatek;
else tmp == NULL; //tutaj tez nie dziala
if(tmp == NULL)
printf("Baza danych jest pusta. Wprowadz dane.\n\n");
else
while(tmp != NULL)
{
printf("%d.\t%s\t%s\t%s\n", lp, tmp->imie, tmp->nazwisko, tmp->datau);
tmp = tmp -> next;
lp++;
}
}
void sort()
{
struct wpis *temp, *temp2, *temp3, *temp4;
struct wpis pom;
int pass;
temp2 = malloc(sizeof (dane));
if (poczatek == NULL)
{
printf("Baza danych jest pusta. Wprowadz dane.\n\n");
}
else
{
while (pass)
{
pass = 0;
for (temp = poczatek; temp->next != NULL; temp = temp->next)
{
if(strcmp(temp->imie, temp->next->imie) > 0 )
{
*temp2 = *temp->next; // JAK TU PODMIENIĆ DWA ELEMENTY LISTY??
*temp->next = *temp;
*temp = *temp2;
/*temp3 = temp->next;
temp->next = temp;
temp = temp3;*/
pass=1;
}
}
}
}
}
int main()
{
int i=1;
while(i!=5){
nowy();
i++;}
screen();
printf("\n\n\n\n");
sort();
printf("jest");
screen();
system("pause");
}