Dobrý den, chtěl jsem se zeptat jestli by tady nebyl někdo tak hodný, co by mi pomohl udělat spojový seznam , který by třídil shake sortem a nakonec seřazený výpis zobrazil, a uložil to souboru, třeba textového.
/* spojovy seznam */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
typedef struct
{
int den,mesic,rok;
} TDatum;
typedef struct PStudent
{
char jmeno[10],prijmeni[20];
TDatum datnar;
int id;
PStudent *dalsi;
} TStudent;
TStudent *prvni,*student;
int PridejStudenta(char jmeno[10],char prijmeni[20],
int dennar,int mesicnar,int roknar,int id)
{
student=(TStudent *) malloc(sizeof(TStudent));
if (student==NULL)
{
printf("Nepodarilo se pridat studenta
");
return 0;
} else
{
student->dalsi=prvni;
prvni=student;
strcpy(student->jmeno,jmeno);
strcpy(student->prijmeni,prijmeni);
student->datnar.den=dennar;
student->datnar.mesic=mesicnar;
student->datnar.rok=roknar;
student->id=id;
return 1;
}
}
void VypisStudenty()
{
printf("
Vypis studentu
************************
");
for (student=prvni;student!=NULL;student=student->dalsi)
{
printf("%s %s
",student->jmeno,student->prijmeni);
}
printf("***********************
");
}
void Uloz()
{
FILE *f;
f=fopen("test.dat","wb");
for (student=prvni;student!=NULL;student=student->dalsi)
{
fwrite(student,sizeof(TStudent),1,f);
}
fclose(f);
printf("Studenti ulozeni");
}
void Nacti()
{
TStudent *st;
FILE *f;
f=fopen("test.dat","rb");
st=(TStudent *) malloc(sizeof(TStudent));
int p;
while ((p=fread(st,sizeof(TStudent),1,f))==1)
PridejStudenta(st->jmeno,st->prijmeni,st->datnar.den,st->datnar.mesic,st->datnar.rok,st->id);
fclose(f);
printf("Studenti nacteni");
}
void Pridej()
{
char jmeno[10],prijmeni[20];
int den,mesic,rok,id;
printf("Jmeno studenta:");
scanf("%s",jmeno);
printf("Prijmeni studenta:");
scanf("%s",prijmeni);
printf("Den narozeni:");
scanf("%d",&den);
printf("Mesic narozeni:");
scanf("%d",&mesic);
printf("Rok narozeni:");
scanf("%d",&rok);
printf("ID:");
scanf("%d",&id);
PridejStudenta(jmeno,prijmeni,den,mesic,rok,id);
printf("Student pridan");
}
int main(void)
{
prvni=NULL;
char volba=0;
int nacteno=0;
do {
printf("
");
if (volba=='p') Pridej();
if (volba=='u') Uloz();
if (volba=='v') VypisStudenty();
if (volba=='n' && nacteno==0) { Nacti();nacteno=1;} //Soubor studentu lze z disku nacist jen jednou
printf("
Hlavni nabidka
");
printf("--------------
");
printf("p..Pridat studenta
");
printf("v..Vypis studenty
");
printf("u..Ulozit ulozit studenty na disk
");
if (nacteno==0) printf("n..Nahrat studenty z disku
"); //Zobrazi se pouze, pokud nebyli studenti nacteni
printf("k..Konec
Vase volba?");
} while ((volba=getch())!='k');
}
/* Shake sort */
#include <stdio.h>
#include<string.h>
char *a[]={"Marie", "Lukas", "Katka", "Alena"};
int N=sizeof(a)/sizeof(a[0]);
int i,j,k, zmena;
void dopredu()
{
for(j=k;j< i-1;j++)
{
if (strcmp(a[j], a[j+1]) > 0)
{ char *pom=a[j];
a[j]=a[j+1];
a[j+1]=pom;
zmena=1;
}
}
}
void zpatky()
{
for(k=j-1;k> N-i;k--)
{ if (strcmp(a[k], a[k-1]) < 0)
{
char *pom=a[k];
a[k]=a[k-1];
a[k-1]=pom;
zmena=1;
}
}
}
void shakesort()
{
i=N;
k=0;
do
{ zmena=0;
dopredu();
zpatky();
i--;
}while(zmena!=0&&i!=0);
}
int main()
{
shakesort();
for(i=0;i<N;i++)printf("%s ",a);
getch();
return 0;
}
Moc děkuji.
Lukáš
C: Spojový seznam, shake sort
- hippies
- Admin(ka) level I
- Příspěvky: 990
- Registrován: 29. 9. 2004 12:46
- Typ studia: Informatika Mgr.
- Login do SIS: procj4am
- Bydliště: Mladá Boleslav
- Kontaktovat uživatele:
Re: C: Spojový seznam, shake sort
fuj, to je ale kod
.. zkus se neco naucit a napis si to
.. zkus se neco naucit a napis si to
Chjo, dovede te si představit svět, kde by byla každá harmonická diferenciální forma (jistého typu) nesingulární projektivní algebraické variety racionální kombinací kohomologických tříd algebraických cyklů..
Re: C: Spojový seznam, shake sort
to bych se asi neptal na foru andminkohippies píše:fuj, to je ale kod
.. zkus se neco naucit a napis si to
-
- Matfyz(ák|ačka) level I
- Příspěvky: 18
- Registrován: 22. 2. 2008 19:19
- Typ studia: Informatika Mgr.
- Login do SIS: ondep7am
- Bydliště: 17. listopad
Re: C: Spojový seznam, shake sort
Já bych řekl, že shake sort u jednosměrného spojového seznamu ani nejde. Jedině, že by sis uložil do pole ukazatele na prvky seznamu, ale to už bys mohl rovnou použít pole.
- Tuetschek
- Supermatfyz(ák|ačka)
- Příspěvky: 657
- Registrován: 15. 6. 2005 13:54
- Typ studia: Nestuduji ale učím na MFF
- Login do SIS: duseo7af
- Kontaktovat uživatele:
Re: C: Spojový seznam, shake sort
Yup, to nejde ... je potreba obousmerny .svick píše:Já bych řekl, že shake sort u jednosměrného spojového seznamu ani nejde. Jedině, že by sis uložil do pole ukazatele na prvky seznamu, ale to už bys mohl rovnou použít pole.
Plug 'n' Pray.
- hippies
- Admin(ka) level I
- Příspěvky: 990
- Registrován: 29. 9. 2004 12:46
- Typ studia: Informatika Mgr.
- Login do SIS: procj4am
- Bydliště: Mladá Boleslav
- Kontaktovat uživatele:
Re: C: Spojový seznam, shake sort
jde, ale ta slozitost nebude hezka;)
ty se neptas, ty zadavasLukyas píše:to bych se asi neptal na foru andminkohippies píše:fuj, to je ale kod
.. zkus se neco naucit a napis si to
Chjo, dovede te si představit svět, kde by byla každá harmonická diferenciální forma (jistého typu) nesingulární projektivní algebraické variety racionální kombinací kohomologických tříd algebraických cyklů..