Scala dilinde insert sıralama algoritması
object InsertSort extends App {
var dizi = Array(5,2,8,4,10,9,1,6,0,3,7)
var degistir = 0
var j = 0
for(i <- 0 to dizi.length-1){
j = i;
while(j > 0 && dizi(j) < dizi(j-1)){
degistir = dizi(j)
dizi(j) = dizi(j-1)
dizi(j-1) = degistir
j = j - 1
}
}
for(i <- 0 to dizi.length-1){
println(dizi(i))
}
}
Ağaçlar(İkili Arama Ağacı)
//5.Bölüm-Ağaçlar (İkili Arama Ağacı)
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
struct dugum
{
int icerik;
struct dugum *sol;
struct dugum *sag;
};
struct ikili_arama_agaci
{
struct dugum *kok; //En tepedeki kısım
};
void ikili_arama_agaci_olustur(struct ikili_arama_agaci **agac)
{
*agac=(struct ikili_arama_agaci *)malloc( sizeof(struct ikili_arama_agaci) ); //4 Bayt'lık yer ayrıldı. (Pointer=>4 Bayt)
if(*agac==NULL)
{
printf("Heap'te gerekli yer ayrilmadi...");
exit(1);
}
(*agac)->kok=NULL;
}
int ikili_agac_bosmu(struct ikili_arama_agaci *agac)
{
if(agac->kok==NULL)
return 1;
else
return 0;
}
struct dugum *dugum_olustur(int icerik)
{
struct dugum *d=(struct dugum *)malloc( sizeof(struct dugum) ); //12 Bayt'lık yer ayrıldı.
if(d==NULL)
{
printf("Heap'te gerekli yer ayrilmadi...");
exit(1);
}
d->icerik=icerik; //(*d).icerik=icerik
d->sol=d->sag=NULL; //Önce sag'a NULL atanıyor sonra bu değer sol'a aktarılıyor.
return d;
}
void ekle(struct ikili_arama_agaci *agac,int icerik)
{
struct dugum *dugum;
struct dugum *d;
struct dugum *geri; //[ ][icerik][geri]
d=agac->kok;
while(d!=NULL)
{
geri=d;
if(icerik < d->icerik)
d=d->sol;
else if(icerik > d->icerik)
d=d->sag;
else
return;
}
dugum=dugum_olustur(icerik);
if(agac->kok==NULL)
{
agac->kok=dugum;
return;
}
if(icerik < geri->icerik)
geri->sol=dugum;
else
geri->sag=dugum;
}
void inorder_yardimci(struct dugum *kok)
{
if(kok==NULL)
return;
inorder_yardimci(kok->sol);
printf("%4d ",kok->icerik);
inorder_yardimci(kok->sag);
}
void inorder(struct ikili_arama_agaci *agac)
{
if(agac==NULL)
return;
inorder_yardimci(agac->kok);
printf("\n");
}
void preorder_yardimci(struct dugum *kok)
{
if(kok==NULL)
return;
printf("%4d ",kok->icerik);
preorder_yardimci(kok->sol);
preorder_yardimci(kok->sag);
}
void preorder(struct ikili_arama_agaci *agac)
{
if(agac==NULL)
return;
preorder_yardimci(agac->kok);
printf("\n");
}
void postorder_yardimci(struct dugum *kok)
{
if(kok==NULL)
return;
postorder_yardimci(kok->sol);
postorder_yardimci(kok->sag);
printf("%4d ",kok->icerik);
}
void postorder(struct ikili_arama_agaci *agac)
{
if(agac==NULL)
return;
postorder_yardimci(agac->kok);
printf("\n");
}
int dugum_sayisi(struct dugum *kok)
{
if(kok==NULL)
return 0;
return 1+dugum_sayisi(kok->sol)+dugum_sayisi(kok->sag);
}
int yaprak_sayisi(struct dugum *kok)
{
if(kok==NULL)
return 0;
if(kok->sol==NULL && kok->sag==NULL)
return 1;
else
return yaprak_sayisi(kok->sol)+yaprak_sayisi(kok->sag);
}
void sil(struct ikili_arama_agaci *agac,int silinen)
{
struct dugum *d=agac->kok;
struct dugum *parent=NULL; //Silinen elemanın bir üstü.
struct dugum *d1,*d2;
int sol; //Parentin solundan.
while(d!=NULL)
{
if(silinen < d->icerik) //Silinmeye soldan devam edilir.
{
parent=d;
d=d->sol;
sol=1; //Silinen elemana nereden yaklaşıldığını tespit etmek için.
}
else if(silinen > d->icerik)
{
parent=d;
d=d->sag;
sol=0;
}
else
break;
}
if(d==NULL)
return;
if(d->sol==NULL) //Silinen düğümün solu boş.
{
if(parent==NULL)
agac->kok=d->sag;
else
{
if(sol==1)
parent->sol=d->sag;
else
parent->sag=d->sag;
}
}
else if(d->sag==NULL) //Silinen düğümün sağı boş.
{
if(parent==NULL)
agac->kok=d->sol;
else
{
if(sol==1)
parent->sol=d->sol;
else
parent->sag=d->sol;
}
}
else //Silinen düğümün hem sağı hem de solu dolu.
{ //Silinecek düğümün solunun en sağına git.
//En sağdaki düğüm silinen düğümün konumunu alır.
d1=d->sol;
d2=NULL;
while(d1->sag!=NULL)
{
d2=d1;
d1=d1->sag;
}
if(d2!=NULL)
{
d2->sag=d1->sol;
d1->sol=d->sol;
}
d1->sag=d->sag;
if(parent==NULL)
agac->kok=d1; //Ağacın kökü değişti.
else
{
if(sol==1)
parent->sol=d1;
else
parent->sag=d1;
}
}
/*else //Silinen düğümün hem sağı hem de solu dolu.
{ //Silinecek düğümün sağının en soluna git.
//En soldaki düğüm silinen düğümün konumunu alır.
d1=d->sag;
d2=NULL;
while(d1->sol!=NULL)
{
d2=d1;
d1=d1->sol;
}
if(d2!=NULL)
{
d2->sag=d1->sag;
d1->sol=d->sag;
}
d1->sag=d->sol;
if(parent==NULL)
agac->kok=d1; //Ağacın kökü değişti.
else
{
if(sol==1)
parent->sol=d1;
else
parent->sag=d1;
}
}*/
}
void yoket(struct dugum **kok) //Kök değişeceği için ** .
{
if(*kok!=NULL)
{
yoket( &(*kok)->sol );
yoket( &(*kok)->sag );
free(*kok);
*kok=NULL;
}
}
int main()
{
struct ikili_arama_agaci *agac; //Başlangıç değeri random bir değer.
ikili_arama_agaci_olustur(&agac);
/*Not 1:
Yazdırma Biçimleri: 100
Inorder: 5-80-100-200 80 200
Preorder: 100-80-5-200 5
Postorder: 5-80-200-100
*/
/*Not 2:
struct dugum d; => Nesnenin kendisi. (*d).icerik şeklinde bir tanımlama olamaz!
struct dugum *p; => Nesnenin göstericisi. (*p).icerik || p->icerik şeklinde tanımlanabilir.
*/
/*Not 3:
ekle(agac,100); 100
ekle(agac,80); 80 120
ekle(agac,45); 45 167
ekle(agac,120); 150
ekle(agac,167);
ekle(agac,150);
inorder(agac); //45 80 100 120 150 167
preorder(agac); //100 80 45 120 167 150
postorder(agac); //45 80 150 167 120 100
printf( "Dugum Sayisi: %4d\n",dugum_sayisi(agac->kok) ); //Düğüm Sayısı:6
printf( "Yaprak Sayisi: %4d\n",yaprak_sayisi(agac->kok) ); //Yaprak Sayısı:2
*/
ekle(agac,100);
ekle(agac,50);
ekle(agac,200);
ekle(agac,25);
ekle(agac,75);
ekle(agac,20);
ekle(agac,35);
ekle(agac,98);
ekle(agac,99);
ekle(agac,500);
ekle(agac,400);
ekle(agac,300);
ekle(agac,210);
ekle(agac,375);
inorder(agac); //20 25 35 50 75 98 99 100 200 210 300 375 400 500
preorder(agac); //100 50 25 20 35 75 98 99 200 500 400 300 210 375
postorder(agac); //20 35 25 99 98 75 50 210 375 300 400 500 200 100
/*
[100]----
[50] [200]--------
[25] [75] [500]
[20][35] [98] [400]
[99] [300]
[210][375]
*/
//sil(agac,50);
//preorder(agac);
//yoket(&agac->kok);
//preorder(agac);
getch();
return 0;
}
Çanakkale Onsekiz Mart Üniversitesi Bilgisayar Mühendisliği Bölümü Veri Madenciliği Ders Projesi.
(Yığın (Dinamik Liste))
//4.Bölüm-Yığın (Dinamik Liste Şeklinde)
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define SENTINEL -10000000
struct dugum
{
int icerik;
struct dugum *link;
};
struct dugum *dugum_olustur(int icerik)
{
struct dugum *d;
d=(struct dugum *)malloc( sizeof(struct dugum) );
if(d==NULL)
{
printf("Yer ayrilamadi...");
exit(1);
}
d->icerik=icerik;
d->link=NULL;
return d;
}
void ekle(int icerik,struct dugum **dugum_gostergesi)
{
struct dugum *d=dugum_olustur(icerik);
d->link=*dugum_gostergesi;
*dugum_gostergesi=d;
}
void yazdir(struct dugum *yigin_gostergesi)
{
while(yigin_gostergesi)
{
printf("%4d ",yigin_gostergesi->icerik);
yigin_gostergesi=yigin_gostergesi->link;
}
printf("\n");
}
void yazdir_yanlis(struct dugum **yigin_gostergesi) //Mantık hatası!
{
while(*yigin_gostergesi)
{
printf("%4d ",(*yigin_gostergesi)->icerik);
*yigin_gostergesi=(*yigin_gostergesi)->link;
}
printf("\n");
}
int cikar(struct dugum **yigin_gostergesi)
{
struct dugum *d;
int icerik;
if(*yigin_gostergesi==NULL)
return SENTINEL;
d=*yigin_gostergesi;
*yigin_gostergesi=(*yigin_gostergesi)->link;
icerik=d->icerik;
free(d);
//return d->icerik; //Hata! d silindiği için içeriğe erişilemez.
return icerik;
}
int yigin_bosmu(struct dugum *yigin_isaretcisi)
{
if(yigin_isaretcisi==NULL)
return 1; //0'ın haricindekiler true olduğu için return -1 de yazılabilir.
else
return 0;
}
int main()
{
int a;
struct dugum *yigin_gostergesi=NULL;
ekle(100,&yigin_gostergesi);
ekle(20,&yigin_gostergesi);
ekle(60,&yigin_gostergesi);
yazdir(yigin_gostergesi); // 60 20 100
yazdir(yigin_gostergesi); // 60 20 100
//yazdir_yanlis(&yigin_gostergesi); //1.seferde elemanlar ekrana yazılacaktır.
//yazdir_yanlis(&yigin_gostergesi); //Ancak 2.seferde ve sonrası için ekrana yazılmayacaktır.
a=cikar(&yigin_gostergesi); //Yığının en tepesindeki eleman dışarıya çıkarılacaktır.
if(a!=SENTINEL)
printf("%4d \n",a); //60
yazdir(yigin_gostergesi); //20 100
getch();
return 0;
}
Yığın
//3.Bölüm-Yığın#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define SENTINEL -10000000
struct yigin //Yığın veri yapısı tanımlandı.
{
int *dizi;
int ust;
int kapasite;
};
struct yigin *yigin_olustur(int kapasite) //Yığın oluşturma 1.Yol
{
if(kapasite<=0)
{
printf("Kapasite pozitif bir tamsayi olmali...");
exit(1); //Program başarıyla sonlandırıldı.
}
struct yigin *ptr=(struct yigin *)malloc( sizeof(struct yigin) ); //Yığının boyutu kadar yer ayrıldı (12 Bayt).
ptr->dizi=(int *)malloc( kapasite*sizeof(int) );
ptr->ust=-1;
ptr->kapasite=kapasite;
return ptr;
}
void yigin_olustur_parametre_ile(int kapasite,struct yigin **y) //Yığın oluşturma 2.Yol
{ //**y => Alınan adresde değişiklik yapılacağı için.
if(kapasite<=0)
{
printf("Kapasite pozitif bir tamsayi olmali...");
exit(1); //Program başarıyla sonlandırıldı.
}
*y=(struct yigin *)malloc( sizeof(struct yigin) );
(*y)->dizi=(int *)malloc( kapasite*sizeof(int) );
(*y)->ust=-1;
(*y)->kapasite=kapasite;
}
int yigin_bosmu(struct yigin *y)
{
if(y->ust==-1)
return 1; //Yığın boş.
else
return 0; //Yığın boş değil.
}
int yigin_dolumu(struct yigin *y)
{
if(y->ust==y->kapasite-1)
return 1;
else
return 0;
}
void yigin_ekle(int eleman,struct yigin *y)
{
if( yigin_dolumu(y) )
{
printf("Yigin dolu ekleme yapilamiyor...");
return;
}
y->dizi[++y->ust]=eleman;
}
void yigin_yok_et(struct yigin **y) //A'nın tuttuğu adres değiştirileceği için ** .
{
free( (*y)->dizi );
free(*y);
*y=NULL;
}
struct yigin *kapasiteyi_artir(struct yigin **ptr,int kackat) //Kapasite artırma 1.Yol
{
struct yigin *yeni;
int i;
yeni=yigin_olustur( kackat*( (*ptr)->kapasite) ); //Eskisi yeniye kopyalandı.
for(i=0;i<=(*ptr)->ust;i++)
yeni->dizi[i]=(*ptr)->dizi[i];
yeni->ust=(*ptr)->ust;
yigin_yok_et( &(*ptr) ); //yigin_yok_et(ptr);
return yeni;
}
void kapasiteyi_artir_yeni(struct yigin **ptr,int kackat) //Kapasite artırma 2.Yol
{
struct yigin *yeni;
int i;
yeni=yigin_olustur( kackat*( (*ptr)->kapasite) );
for(i=0;i<=(*ptr)->ust;i++)
yeni->dizi[i]=(*ptr)->dizi[i];
yeni->ust=(*ptr)->ust;
yigin_yok_et( &(*ptr) ); //yigin_yok_et(ptr);
*ptr=yeni;
}
void yigin_yaz(struct yigin *y)
{
int i;
printf("Yigin Kapasitesi :%d\n",y->kapasite);
printf("Yigindaki Eleman Sayisi:%d\n ",y->ust+1);
for(i=y->ust;i>=0;i--)
{
printf("%4d ",y->dizi[i]);
}
printf("\n");
}
int yigin_eleman_sil(struct yigin *y)
{
if( yigin_bosmu(y) )
return SENTINEL;
return y->dizi[y->ust--];
}
int main()
{
struct yigin *A=NULL;
struct yigin *B=NULL;
int silinen;
A=yigin_olustur(10); //Kapasitesi 10 olan yığın oluşturuluyor.
//yigin_olustur_parametre_ile(10,&A);
yigin_ekle(12,A);
yigin_ekle(56,A);
yigin_ekle(-20,A); //En son eklenen eleman yığının en tepesine eklenir.
yigin_yaz(A); //-20 56 12
silinen=yigin_eleman_sil(A); //Yığının başındaki elemandan silinmeye başlanır.
printf("\nSilinen:%4d\n",silinen);
yigin_yaz(A); //56 12
yigin_ekle(100,A); //Yığının başına 100 elemanı eklenir. Sonuna eklenmez.
yigin_yaz(A); //100 56 12
//A=kapasiteyi_artir(&A,3); //1.Yol
kapasiteyi_artir_yeni(&A,3); //2.Yol
yigin_yaz(A); //100 56 12
//En son yığın kapasitesi 30 olur.
getch();
return 0;
}