C: Spojový seznam, shake sort

Odeslat odpověď

Smajlíci
:D :) :( :o :shock: :? 8) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:

BBCode je zapnutý
[img] je zapnutý
[flash] je vypnutý
[url] je zapnuté
Smajlíci jsou zapnutí

Přehled tématu
   

Rozšířit náhled Přehled tématu: C: Spojový seznam, shake sort

Re: C: Spojový seznam, shake sort

od hippies » 6. 5. 2009 11:35

jde, ale ta slozitost nebude hezka;)
Lukyas píše:
hippies píše:fuj, to je ale kod :roll:

.. zkus se neco naucit a napis si to :wink:
:arrow: to bych se asi neptal na foru andminko :D :idea:
ty se neptas, ty zadavas

Re: C: Spojový seznam, shake sort

od Tuetschek » 5. 5. 2009 21:30

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.
Yup, to nejde ... je potreba obousmerny 8) .

Re: C: Spojový seznam, shake sort

od svick » 5. 5. 2009 18:19

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.

Re: C: Spojový seznam, shake sort

od Lukyas » 5. 5. 2009 15:04

hippies píše:fuj, to je ale kod :roll:

.. zkus se neco naucit a napis si to :wink:
:arrow: to bych se asi neptal na foru andminko :D :idea:

Re: C: Spojový seznam, shake sort

od hippies » 5. 5. 2009 13:04

fuj, to je ale kod :roll:

.. zkus se neco naucit a napis si to :wink:

C: Spojový seznam, shake sort

od LukasF » 4. 5. 2009 23:45

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áš

Nahoru