Çanakkale Onsekiz Mart Üniversitesi Bilgisayar Mühendisliği Bölümü dağıtık sistemler ders notlarım.
Tek Yönlü Bağlı Liste
//1.Bölüm-Tek Yönlü Bağlı Listeler
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
struct hucre
{
int icerik;
struct hucre *sonraki;
};
struct hucre *hucre_olustur(int icerik)
{
struct hucre *a;
a=(struct hucre *)malloc( sizeof(struct hucre) );
if(a==NULL)
{
printf("Yer ayrilamadi...");
exit(1);
}
a->icerik=icerik;
a->sonraki=NULL;
}
void liste_basina_ekle(int icerik,struct hucre **liste_basi)
{
struct hucre *a=hucre_olustur(icerik);
a->sonraki=*liste_basi;
*liste_basi=a;
}
void liste_sonuna_ekle(int icerik,struct hucre **liste_basi)
{
struct hucre *a=hucre_olustur(icerik);
if(*liste_basi==NULL)
{
a->sonraki=*liste_basi;
*liste_basi=a;
}
else
{
struct hucre *x=*liste_basi;
while(x->sonraki!=NULL)
{
x=x->sonraki;
}
x->sonraki=a;
}
}
void liste_sirali_ekle(int icerik,struct hucre **liste_basi)
{
struct hucre *a,*b,*eklenen;
b=*liste_basi;
while(b!=NULL && b->icerik <= icerik)
{
if(b->icerik==icerik) //Aynı iki değer listeye eklenmemektedir.
return;
a=b;
b=b->sonraki;
}
eklenen=hucre_olustur(icerik);
if(b==*liste_basi)
{
eklenen->sonraki=*liste_basi;
*liste_basi=eklenen;
}
else
{
a->sonraki=eklenen;
eklenen->sonraki=b;
}
}
void liste_yaz(struct hucre *liste_basi)
{
while(liste_basi!=NULL)
{
printf("%4d ",liste_basi->icerik);
liste_basi=liste_basi->sonraki;
}
printf("\n");
}
void liste_yaz_recursive(struct hucre *liste_basi)
{
if(liste_basi!=NULL)
{
printf("%4d ",liste_basi->icerik);
liste_yaz_recursive(liste_basi->sonraki);
}
else
printf("\n");
}
void tersten_liste_yaz_recursive(struct hucre *liste_basi)
{
if(liste_basi!=NULL)
{
tersten_liste_yaz_recursive(liste_basi->sonraki);
printf("%4d ",liste_basi->icerik);
}
else
printf("\n");
}
void liste_sirala(struct hucre **liste_basi)
{
struct hucre *a,*b,*c,*d;
if(*liste_basi==NULL || (*liste_basi)->sonraki==NULL )
return;
d=(*liste_basi)->sonraki;
(*liste_basi)->sonraki=NULL;
while(d!=NULL)
{
c=d;
d=d->sonraki;
b=*liste_basi;
while(b!=NULL && b->icerik < c->icerik)
{
a=b;
b=b->sonraki;
}
if(b==*liste_basi)
{
c->sonraki=*liste_basi;
*liste_basi=c;
}
else
{
a->sonraki=c;
c->sonraki=b;
}
}
}
void liste_ters_cevir(struct hucre **liste_basi)
{
struct hucre *a,*b;
a=NULL;
while(*liste_basi!=NULL)
{
b=*liste_basi;
*liste_basi=(*liste_basi)->sonraki;
b->sonraki=a;
a=b;
}
*liste_basi=a;
}
void liste_eleman_sil(int silinen,struct hucre **liste_basi)
{
struct hucre *temp=*liste_basi;
struct hucre *once;
while(temp!=NULL && temp->icerik!=silinen)
{
once=temp;
temp=temp->sonraki;
}
if(temp==NULL)
return;
else
{
if(temp==*liste_basi)
*liste_basi=(*liste_basi)->sonraki;
else
once->sonraki=temp->sonraki;
free(temp);
}
}
void liste_yoket(struct hucre **liste_basi)
{
struct hucre *simdiki;
while(*liste_basi!=NULL)
{
simdiki=(*liste_basi);
*liste_basi=(*liste_basi)->sonraki;
free(simdiki);
}
}
int main()
{
struct hucre *liste1=NULL;
liste_basina_ekle(10,&liste1);
liste_basina_ekle(15,&liste1);
liste_sonuna_ekle(32,&liste1);
liste_sonuna_ekle(45,&liste1);
liste_sirali_ekle(12,&liste1); //12 15 10 32 45
liste_yaz(liste1);
//liste_yaz(liste1); // 12 15 10 32 45
//liste_yaz_recursive(liste1); // 12 15 10 32 45
//tersten_liste_yaz_recursive(liste1); // 45 32 10 15 12
//liste_eleman_sil(45,&liste1);
//liste_yoket(&liste1);
//liste_sirala(&liste1);
//liste_yaz(liste1); //10 12 15 32 45
//liste_ters_cevir(&liste1);
//liste_yaz(liste1); //45 32 10 15 12
getch();
return 0;
}
No comments:
Post a Comment