Heap Ağacı
//8.Bölüm-Ağaçlar (Heap Ağacı)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
struct dugum
{
int key;
//İstenilen diğer bilgiler.
};
struct heap
{
struct dugum *dizi;
int kapasite; //Toplam düğüm sayısı. Tutulabilecek en fazla eleman sayısı.
int eleman_sayisi;
};
struct heap *heap_olustur(int kapasite)
{
struct heap *gecici;
gecici=(struct heap *)malloc( sizeof(struct heap) );
if(!gecici)
{
printf("Dinamik alan ayirma basarisiz...");
exit(1);
}
gecici->dizi=(struct dugum *)malloc( kapasite*sizeof(struct dugum) );
if(!gecici->dizi)
{
printf("Dinamik alan ayirma basarisiz...");
exit(1);
}
gecici->kapasite=kapasite;
gecici->eleman_sayisi=0;
return gecici;
}
/*
void heap_olustur_yeni(struct heap **h,int kapasite)
{
*h=(struct heap *)malloc( sizeof(struct heap) );
if(!*h)
{
printf("Dinamik alan ayirma basarisiz...");
exit(1);
}
(*h)->dizi=(struct dugum *)malloc( kapasite*sizeof(struct dugum) );
if(!(*h)->dizi)
{
printf("Dinamik alan ayirma basarisiz...");
exit(1);
}
(*h)->kapasite=kapasite;
(*h)->eleman_sayisi=0;
}
*/
void print_heap(struct heap *heap)
{
int i;
for(i=0;i<heap->eleman_sayisi;i++)
printf("%4d",heap->dizi[i].key);
printf("\n");
}
void initialize_heap(struct heap *heap,int eleman_sayisi,int aralik)
{
int i,j;
int yeni,cik;
srand(time(NULL)); //Her defasında farklı sayılar üretilir.
heap->dizi[0].key=rand()%aralik;
for(i=1;i<eleman_sayisi;i++)
{
while(1)
{
cik=1;
yeni=rand()%aralik;
for(j=0;j<i;j++) //Öncei anahtarlar kontrol edilmektedir.
{
if(yeni==heap->dizi[j].key)
{
cik=0;
break;
}
}
if(!cik) //cik==0
continue;
heap->dizi[i].key=yeni;
break;
}
}
heap->eleman_sayisi=eleman_sayisi;
}
void buble_down(struct heap *heap,int index)
{
int sol,sag;
sol=2*index+1;
sag=2*index+2;
int temp_key;
while( (sol < heap->eleman_sayisi && heap->dizi[index].key < heap->dizi[sol].key) || (sag < heap->eleman_sayisi && heap->dizi[index].key < heap->dizi[sag].key) )
{ /*Sol düğümün olup olmadığı kontrol edilir.
İlk kısım doğruysa ya sağı büyüktür, ya da solu büyüktür.*/
if(sag>=heap->eleman_sayisi || heap->dizi[sol].key > heap->dizi[sag].key) //Sağı yoksa || soldaki sağdakinden büyükse.
{
temp_key=heap->dizi[sol].key;
heap->dizi[sol].key=heap->dizi[index].key;
heap->dizi[index].key=temp_key;
index=2*index+1;
}
else
{
temp_key=heap->dizi[sag].key;
heap->dizi[sag].key=heap->dizi[index].key;
heap->dizi[index].key=temp_key;
index=2*index+2;
}
sol=2*index+1;
sag=2*index+2;
}
}
void heapify(struct heap *heap)
{
int i;
for(i=heap->eleman_sayisi/2-1;i>=0;i--)
buble_down(heap,i);
}
void buble_up(struct heap *heap,int index) //Eklenen eleman sonrası heap özelliği bozulması sonucu (bozulmayabilir) heap özellği kazandırılıyor.
{
int parent,temp_key;
parent=(index-1)/2;
while(parent>=0 && heap->dizi[parent].key < heap->dizi[index].key)
{
temp_key=heap->dizi[parent].key;
heap->dizi[parent].key=heap->dizi[index].key;
heap->dizi[index].key=temp_key;
index=parent;
parent=(index-1)/2;
}
}
void heap_insert(struct heap *heap,int key)
{
if(heap->eleman_sayisi < heap->kapasite)
{
heap->eleman_sayisi++;
heap->dizi[heap->eleman_sayisi - 1].key=key;
buble_up(heap,heap->eleman_sayisi - 1);
}
}
void delete_max(struct heap *heap) //Sürekli uygulanarak dizi sıralı hale getirilebilir.
{
int temp_key;
if(heap->eleman_sayisi > 1)
{
temp_key=heap->dizi[0].key;
heap->dizi[0].key=heap->dizi[heap->eleman_sayisi - 1].key;
heap->dizi[heap->eleman_sayisi - 1].key=temp_key;
heap->eleman_sayisi--;
buble_down(heap,0);
}
}
void heap_sort(struct heap *heap)
{
int i;
int temp=heap->eleman_sayisi;
for(i=1;i<temp;i++)
delete_max(heap);
heap->eleman_sayisi=temp;
}
int main(int argc, char** argv)
{
struct heap *heap=heap_olustur(20);
/*
struct heap *h1=NULL;
heap_olustur_yeni(&h1,kapasite);
*/
initialize_heap(heap,10,101); //10 tane elaman.
print_heap(heap); //31 87 67 74 9 35 1 47 20 46
heapify(heap);
print_heap(heap); //87 74 67 47 46 35 1 31 20 9
heap_sort(heap);
print_heap(heap); //1 9 20 31 35 46 47 67 74 87
/*
heap_insert(heap,55);
heap_insert(heap,75);
print_heap(heap);
*/
getch();
return 0;
}
Çanakkale Onsekiz Mart Üniversitesi Bilgisayar Mühendisliği Bölümü Veri Madenciliği C ile veri küpü kodlaması.
Proje Açıklaması ve Proje Kodları
#include
#include
void dosyaolustur();
void boyut1fonk1(int);
void boyut1fonk2();
void boyut1fonk3();
void boyut2fonk1(int);
void boyut2fonk2(char[]);
void boyut2fonk3();
void boyut2fonk4();
void boyut3fonk1(int);
void boyut3fonk2(char[]);
void boyut3fonk3();
void boyut3fonk4();
int main()
{
dosyaolustur();
int secenek,secenek2,UrunAnahtar;
char UrunAdi[2];
char TedarikciAdi[3];
do{
printf("--------------------\nHangi boyutta islem yapmak istiyorsunuz?\n1- Boyut1\n2- Boyut2\n3- Boyut3\n->");
scanf("%d",&secenek);
if(secenek==1){
printf("--------------------\nBoyut1de yapabileceginiz islemler\n1-Urunu Listele\n2-En Az Satilan Urunu Listele\n3-En Cok Satilan Urunu Listele\n4-Boyut Degistir\n->");
scanf("%d",&secenek2);
if(secenek2==1){
printf("Urun Anahtar Bilgisini Giriniz\n->");
scanf("%d",&UrunAnahtar);
boyut1fonk1(UrunAnahtar);
}
else if(secenek2==2)boyut1fonk2();
else if(secenek2==3)boyut1fonk3();
else if(secenek2==4)continue;
}
else if(secenek==2){
printf("--------------------\nBoyut2de yapabileceginiz islemler\n1-Urun Anahtari ile Urunu Listele\n2-Urun Adi ile Urunu Listele\n3-En Cok Satilan Urunu Listele\n4-En Az Kazanc Saglanan Urunu Listele\n5-Boyut Degistir\n->");
scanf("%d",&secenek2);
if(secenek2==1){
printf("Urun Anahtar Bilgisini Giriniz\n->");
scanf("%d",&UrunAnahtar);
boyut2fonk1(UrunAnahtar);
}
else if(secenek2==2){
printf("Urun Adini Giriniz\n->");
scanf("%s",UrunAdi);
boyut2fonk2(UrunAdi);
}
else if(secenek2==3){
boyut2fonk3();
}
else if(secenek2==4){
boyut2fonk4();
}
else if(secenek2==5){
continue;
}
}
else if(secenek==3){
printf("--------------------\nBoyut3te yapabileceginiz islemler\n1-Urun Anahtari ile Urun ve Tedarikci Bilgisini listele\n2-Tedarikciye Ait Urunleri Listele\n3-En Cok Satilan Urunu listele\n4-En Az Kazanc Saglanan Urunu Listele\n5-Boyut Degistir\n->");
scanf("%d",&secenek2);
if(secenek2==1){
printf("Urun Anahtar Bilgisini Giriniz\n->");
scanf("%d",&UrunAnahtar);
boyut3fonk1(UrunAnahtar);
}
else if(secenek2==2){
printf("Tedarikci Adini Giriniz\n->");
scanf("%s",TedarikciAdi);
boyut3fonk2(TedarikciAdi);
}
else if(secenek2==3){
boyut3fonk3();
}
else if(secenek2==4){
boyut3fonk4();
}
else if(secenek2==5){
continue;
}
}
}
while(secenek!=0);
return 0;
}
void dosyaolustur(){
FILE * satislardosyasi = fopen("satislar.txt","w");
fprintf(satislardosyasi,"\t\t\tSATIÞLAR\n");
fprintf(satislardosyasi,"Ürün Anahtarý\tTedarikci Anahtarý\tSatýþ Mikatarý\n");
fprintf(satislardosyasi,"1\t\t1\t\t\t6\n");
fprintf(satislardosyasi,"2\t\t1\t\t\t6\n");
fprintf(satislardosyasi,"3\t\t1\t\t\t5\n");
fprintf(satislardosyasi,"4\t\t2\t\t\t3\n");
fprintf(satislardosyasi,"5\t\t2\t\t\t1\n");
fprintf(satislardosyasi,"6\t\t3\t\t\t3");
fclose(satislardosyasi);
FILE * urunlerdosyasi = fopen("urunler.txt","w");
fprintf(urunlerdosyasi,"\t\tÜRÜNLER\n");
fprintf(urunlerdosyasi,"Ürün Anahtarý\tÜrün Adý\tFiyat\tTür\n");
fprintf(urunlerdosyasi,"1\t\tAA\t\t5\tX\n");
fprintf(urunlerdosyasi,"2\t\tBB\t\t4\tY\n");
fprintf(urunlerdosyasi,"3\t\tCC\t\t10\tX\n");
fprintf(urunlerdosyasi,"4\t\tDD\t\t20\tK\n");
fprintf(urunlerdosyasi,"5\t\tEE\t\t100\tL\n");
fprintf(urunlerdosyasi,"6\t\tFF\t\t15\tM");
fclose(urunlerdosyasi);
FILE * tedarikdosyasi = fopen("tedarik.txt","w");
fprintf(tedarikdosyasi,"\t\tTEDARÝK\n");
fprintf(tedarikdosyasi,"Tedarikçi Anahtarý\tTedarikçi Ýsmi\n");
fprintf(tedarikdosyasi,"1\t\t\tASD\n");
fprintf(tedarikdosyasi,"2\t\t\tDSA\n");
fprintf(tedarikdosyasi,"3\t\t\tXYZ\n");
fclose(tedarikdosyasi);
}
void boyut1fonk1(int UrunAnahtar){
int UrunAnahtarGelen,TedarikciAnahtarGelen,SatisMiktariGelen,i;
FILE * satislardosyasi = fopen("satislar.txt","r");
fseek(satislardosyasi,62,SEEK_SET);
for(i=0;i<6 i="" p="">6>
fscanf(satislardosyasi,"%d %d %d",&UrunAnahtarGelen,&TedarikciAnahtarGelen,&SatisMiktariGelen);
if(UrunAnahtar == UrunAnahtarGelen){
printf("Tedarikci Anahtari\tSatis Miktari\n%d\t\t\t%d\n",TedarikciAnahtarGelen,SatisMiktariGelen);
break;
}
}
fclose(satislardosyasi);
}
void boyut1fonk2(){
int UrunAnahtarGelen,TedarikciAnahtarGelen,SatisMiktariGelen,i,enkucuk=100;
FILE * satislardosyasi = fopen("satislar.txt","r");
fseek(satislardosyasi,62,SEEK_SET);
for(i=0;i<6 i="" p="">6>
fscanf(satislardosyasi,"%d %d %d",&UrunAnahtarGelen,&TedarikciAnahtarGelen,&SatisMiktariGelen);
if(SatisMiktariGelen
enkucuk = SatisMiktariGelen;
}
}
fseek(satislardosyasi,62,SEEK_SET);
for(i=0;i<6 i="" p="">6>
fscanf(satislardosyasi,"%d %d %d",&UrunAnahtarGelen,&TedarikciAnahtarGelen,&SatisMiktariGelen);
if(SatisMiktariGelen==enkucuk){
printf("Urun Anahtari\tSatis Miktari\n%d\t\t%d\n",UrunAnahtarGelen,SatisMiktariGelen);
}
}
fclose(satislardosyasi);
}
void boyut1fonk3(){
int UrunAnahtarGelen,TedarikciAnahtarGelen,SatisMiktariGelen,i,enbuyuk=0;
FILE * satislardosyasi = fopen("satislar.txt","r");
fseek(satislardosyasi,62,SEEK_SET);
for(i=0;i<6 i="" p="">6>
fscanf(satislardosyasi,"%d %d %d",&UrunAnahtarGelen,&TedarikciAnahtarGelen,&SatisMiktariGelen);
if(SatisMiktariGelen>enbuyuk){
enbuyuk = SatisMiktariGelen;
}
}
fseek(satislardosyasi,62,SEEK_SET);
for(i=0;i<6 i="" p="">6>
fscanf(satislardosyasi,"%d %d %d",&UrunAnahtarGelen,&TedarikciAnahtarGelen,&SatisMiktariGelen);
if(SatisMiktariGelen==enbuyuk){
printf("Urun Anahtari\tSatis Miktari\n%d\t\t%d\n",UrunAnahtarGelen,SatisMiktariGelen);
}
}
fclose(satislardosyasi);
}
void boyut2fonk1(int UrunAnahtar){
int UrunAnahtarSatislardanGelen,TedarikciAnahtarGelen,SatisMiktariGelen;
FILE * satislardosyasi = fopen("satislar.txt","r");
fseek(satislardosyasi,62,SEEK_SET);
int UrunAnahtarUrunlerdenGelen,FiyatGelen;
char UrunAdiGelen1,UrunAdiGelen2,TurGelen;
FILE * urunlerdosyasi = fopen("urunler.txt","r");
fseek(urunlerdosyasi,45,SEEK_SET);
int i,kazanc;
for(i=0;i<6 i="" p="">6>
fscanf(satislardosyasi,"%d %d %d",&UrunAnahtarSatislardanGelen,&TedarikciAnahtarGelen,&SatisMiktariGelen);
fscanf(urunlerdosyasi,"%d %c %c %d %c",&UrunAnahtarUrunlerdenGelen,&UrunAdiGelen1,&UrunAdiGelen2,&FiyatGelen,&TurGelen);
if(UrunAnahtar == UrunAnahtarSatislardanGelen && UrunAnahtar==UrunAnahtarUrunlerdenGelen){
kazanc = SatisMiktariGelen * FiyatGelen;
printf("--------------------\nUrun Adi\tTur\tSatis Miktari\tElde Edilen Kazanc\n%c%c\t\t%c\t%d\t\t%d\n",UrunAdiGelen1,UrunAdiGelen2,TurGelen,SatisMiktariGelen,kazanc);
}
}
fclose(satislardosyasi);
fclose(urunlerdosyasi);
}
void boyut2fonk2(char UrunAdi[2]){
int UrunAnahtarSatislardanGelen,TedarikciAnahtarGelen,SatisMiktariGelen;
FILE * satislardosyasi = fopen("satislar.txt","r");
fseek(satislardosyasi,62,SEEK_SET);
int UrunAnahtarUrunlerdenGelen,FiyatGelen;
char UrunAdiGelen1,UrunAdiGelen2,TurGelen;
FILE * urunlerdosyasi = fopen("urunler.txt","r");
fseek(urunlerdosyasi,45,SEEK_SET);
int i,kazanc;
for(i=0;i<6 i="" p="">6>
fscanf(satislardosyasi,"%d %d %d",&UrunAnahtarSatislardanGelen,&TedarikciAnahtarGelen,&SatisMiktariGelen);
fscanf(urunlerdosyasi,"%d %c %c %d %c",&UrunAnahtarUrunlerdenGelen,&UrunAdiGelen1,&UrunAdiGelen2,&FiyatGelen,&TurGelen);
if(UrunAdi[0] == UrunAdiGelen1 && UrunAdi[1]==UrunAdiGelen2 && UrunAnahtarUrunlerdenGelen==UrunAnahtarSatislardanGelen){
kazanc = SatisMiktariGelen * FiyatGelen;
printf("--------------------\nUrun Anahtari\tTur\tSatis Miktari\tElde Edilen Kazanc\n%d\t\t%c\t%d\t\t%d\n",UrunAnahtarUrunlerdenGelen,TurGelen,SatisMiktariGelen,kazanc);
}
}
fclose(satislardosyasi);
fclose(urunlerdosyasi);
}
void boyut2fonk3(){
int UrunAnahtarSatislardanGelen,TedarikciAnahtarGelen,SatisMiktariGelen;
FILE * satislardosyasi = fopen("satislar.txt","r");
fseek(satislardosyasi,62,SEEK_SET);
int UrunAnahtarUrunlerdenGelen,FiyatGelen;
char UrunAdiGelen1,UrunAdiGelen2,TurGelen;
FILE * urunlerdosyasi = fopen("urunler.txt","r");
fseek(urunlerdosyasi,45,SEEK_SET);
int i,kazanc,enbuyuk=0;
for(i=0;i<6 i="" p="">6>
fscanf(satislardosyasi,"%d %d %d",&UrunAnahtarSatislardanGelen,&TedarikciAnahtarGelen,&SatisMiktariGelen);
if(SatisMiktariGelen>enbuyuk){
enbuyuk = SatisMiktariGelen;
}
}
fseek(satislardosyasi,62,SEEK_SET);
for(i=0;i<6 i="" p="">6>
fscanf(satislardosyasi,"%d %d %d",&UrunAnahtarSatislardanGelen,&TedarikciAnahtarGelen,&SatisMiktariGelen);
fscanf(urunlerdosyasi,"%d %c %c %d %c",&UrunAnahtarUrunlerdenGelen,&UrunAdiGelen1,&UrunAdiGelen2,&FiyatGelen,&TurGelen);
if(SatisMiktariGelen==enbuyuk){
kazanc = SatisMiktariGelen * FiyatGelen;
printf("--------------------\nUrun Adi\tTur\tElde Edilen Kazanc\n%c%c\t\t%c\t%d\n",UrunAdiGelen1,UrunAdiGelen2,TurGelen,kazanc);
}
}
fclose(satislardosyasi);
fclose(urunlerdosyasi);
}
void boyut2fonk4(){
int UrunAnahtarSatislardanGelen,TedarikciAnahtarGelen,SatisMiktariGelen;
FILE * satislardosyasi = fopen("satislar.txt","r");
fseek(satislardosyasi,62,SEEK_SET);
int UrunAnahtarUrunlerdenGelen,FiyatGelen;
char UrunAdiGelen1,UrunAdiGelen2,TurGelen;
FILE * urunlerdosyasi = fopen("urunler.txt","r");
fseek(urunlerdosyasi,45,SEEK_SET);
int i,kazanc,enkucukkazanc=1000;
for(i=0;i<6 i="" p="">6>
fscanf(satislardosyasi,"%d %d %d",&UrunAnahtarSatislardanGelen,&TedarikciAnahtarGelen,&SatisMiktariGelen);
fscanf(urunlerdosyasi,"%d %c %c %d %c",&UrunAnahtarUrunlerdenGelen,&UrunAdiGelen1,&UrunAdiGelen2,&FiyatGelen,&TurGelen);
kazanc = SatisMiktariGelen * FiyatGelen;
if(kazanc < enkucukkazanc){
enkucukkazanc = kazanc;
}
}
fseek(satislardosyasi,62,SEEK_SET);
fseek(urunlerdosyasi,45,SEEK_SET);
for(i=0;i<6 i="" p="">6>
fscanf(satislardosyasi,"%d %d %d",&UrunAnahtarSatislardanGelen,&TedarikciAnahtarGelen,&SatisMiktariGelen);
fscanf(urunlerdosyasi,"%d %c %c %d %c",&UrunAnahtarUrunlerdenGelen,&UrunAdiGelen1,&UrunAdiGelen2,&FiyatGelen,&TurGelen);
kazanc = SatisMiktariGelen * FiyatGelen;
if(kazanc == enkucukkazanc){
printf("--------------------\nUrun Adi\tTur\tElde Edilen Kazanc\n%c%c\t\t%c\t%d\n",UrunAdiGelen1,UrunAdiGelen2,TurGelen,kazanc);
}
}
fclose(satislardosyasi);
fclose(urunlerdosyasi);
}
void boyut3fonk1(int UrunAnahtar){
int UrunAnahtarSatislardanGelen,TedarikciAnahtarSatislardanGelen,SatisMiktariGelen;
FILE * satislardosyasi = fopen("satislar.txt","r");
fseek(satislardosyasi,62,SEEK_SET);
int UrunAnahtarUrunlerdenGelen,FiyatGelen;
char UrunAdiGelen1,UrunAdiGelen2,TurGelen;
FILE * urunlerdosyasi = fopen("urunler.txt","r");
fseek(urunlerdosyasi,45,SEEK_SET);
int TedarikciAnahtarTedariktenGelen;
char TedarikciAdiGelen1,TedarikciAdiGelen2,TedarikciAdiGelen3;
FILE * tedarikdosyasi = fopen("tedarik.txt","r");
fseek(tedarikdosyasi,46,SEEK_SET);
int i,j;
for(i=0;i<6 i="" p="">6>
fscanf(satislardosyasi,"%d %d %d",&UrunAnahtarSatislardanGelen,&TedarikciAnahtarSatislardanGelen,&SatisMiktariGelen);
fscanf(urunlerdosyasi,"%d %c %c %d %c",&UrunAnahtarUrunlerdenGelen,&UrunAdiGelen1,&UrunAdiGelen2,&FiyatGelen,&TurGelen);
if(UrunAnahtar == UrunAnahtarSatislardanGelen && UrunAnahtar==UrunAnahtarUrunlerdenGelen){
for(j=0;j<3 j="" p="">3>
fscanf(tedarikdosyasi,"%d %c %c %c",&TedarikciAnahtarTedariktenGelen,&TedarikciAdiGelen1,&TedarikciAdiGelen2,&TedarikciAdiGelen3);
if(TedarikciAnahtarSatislardanGelen == TedarikciAnahtarTedariktenGelen){
printf("--------------------\nUrun Adi\tTedarikci Adi\n%c%c\t\t%c%c%c\n",UrunAdiGelen1,UrunAdiGelen2,TedarikciAdiGelen1,TedarikciAdiGelen2,TedarikciAdiGelen3);
}
}
}
}
fclose(satislardosyasi);
fclose(urunlerdosyasi);
fclose(tedarikdosyasi);
}
void boyut3fonk2(char TedarikciAdi[3]){
int UrunAnahtarSatislardanGelen,TedarikciAnahtarSatislardanGelen,SatisMiktariGelen;
FILE * satislardosyasi = fopen("satislar.txt","r");
fseek(satislardosyasi,62,SEEK_SET);
int UrunAnahtarUrunlerdenGelen,FiyatGelen;
char UrunAdiGelen1,UrunAdiGelen2,TurGelen;
FILE * urunlerdosyasi = fopen("urunler.txt","r");
fseek(urunlerdosyasi,45,SEEK_SET);
int TedarikciAnahtarTedariktenGelen;
char TedarikciAdiGelen1,TedarikciAdiGelen2,TedarikciAdiGelen3;
FILE * tedarikdosyasi = fopen("tedarik.txt","r");
fseek(tedarikdosyasi,46,SEEK_SET);
int i;
for(i=0;i<3 i="" p="">3>
fscanf(tedarikdosyasi,"%d %c %c %c",&TedarikciAnahtarTedariktenGelen,&TedarikciAdiGelen1,&TedarikciAdiGelen2,&TedarikciAdiGelen3);
if(TedarikciAdi[0] == TedarikciAdiGelen1 && TedarikciAdi[1] == TedarikciAdiGelen2 && TedarikciAdi[2] == TedarikciAdiGelen3){
break;
}
}
for(i=0;i<6 i="" p="">6>
fscanf(satislardosyasi,"%d %d %d",&UrunAnahtarSatislardanGelen,&TedarikciAnahtarSatislardanGelen,&SatisMiktariGelen);
fscanf(urunlerdosyasi,"%d %c %c %d %c",&UrunAnahtarUrunlerdenGelen,&UrunAdiGelen1,&UrunAdiGelen2,&FiyatGelen,&TurGelen);
if(TedarikciAnahtarSatislardanGelen == TedarikciAnahtarTedariktenGelen){
printf("--------------------\nUrun Adi\tTur\tFiyati\t\n%c%c\t\t%c\t%d\n",UrunAdiGelen1,UrunAdiGelen2,TurGelen,FiyatGelen);
}
}
fclose(satislardosyasi);
fclose(urunlerdosyasi);
fclose(tedarikdosyasi);
}
void boyut3fonk3(){
int UrunAnahtarSatislardanGelen,TedarikciAnahtarSatislardanGelen,SatisMiktariGelen;
FILE * satislardosyasi = fopen("satislar.txt","r");
fseek(satislardosyasi,62,SEEK_SET);
int UrunAnahtarUrunlerdenGelen,FiyatGelen;
char UrunAdiGelen1,UrunAdiGelen2,TurGelen;
FILE * urunlerdosyasi = fopen("urunler.txt","r");
fseek(urunlerdosyasi,45,SEEK_SET);
int TedarikciAnahtarTedariktenGelen;
char TedarikciAdiGelen1,TedarikciAdiGelen2,TedarikciAdiGelen3;
FILE * tedarikdosyasi = fopen("tedarik.txt","r");
int i,j,enbuyuk=0;
for(i=0;i<6 i="" p="">6>
fscanf(satislardosyasi,"%d %d %d",&UrunAnahtarSatislardanGelen,&TedarikciAnahtarSatislardanGelen,&SatisMiktariGelen);
if(SatisMiktariGelen>enbuyuk){
enbuyuk = SatisMiktariGelen;
}
}
fseek(satislardosyasi,62,SEEK_SET);
for(i=0;i<6 i="" p="">6>
fscanf(satislardosyasi,"%d %d %d",&UrunAnahtarSatislardanGelen,&TedarikciAnahtarSatislardanGelen,&SatisMiktariGelen);
fscanf(urunlerdosyasi,"%d %c %c %d %c",&UrunAnahtarUrunlerdenGelen,&UrunAdiGelen1,&UrunAdiGelen2,&FiyatGelen,&TurGelen);
if(SatisMiktariGelen==enbuyuk){
fseek(tedarikdosyasi,46,SEEK_SET);
for(j=0;j<3 j="" p="">3>
fscanf(tedarikdosyasi,"%d %c %c %c",&TedarikciAnahtarTedariktenGelen,&TedarikciAdiGelen1,&TedarikciAdiGelen2,&TedarikciAdiGelen3);
if(TedarikciAnahtarTedariktenGelen == TedarikciAnahtarSatislardanGelen){
printf("--------------------\nUrun Adi\tTur\tSatis Miktari\tTedarikci Adi\n%c%c\t\t%c\t%d\t\t%c%c%c\n",UrunAdiGelen1,UrunAdiGelen2,TurGelen,SatisMiktariGelen,TedarikciAdiGelen1,TedarikciAdiGelen2,TedarikciAdiGelen3);
}
}
}
}
fclose(satislardosyasi);
fclose(urunlerdosyasi);
fclose(tedarikdosyasi);
}
void boyut3fonk4(){
int UrunAnahtarSatislardanGelen,TedarikciAnahtarSatislardanGelen,SatisMiktariGelen;
FILE * satislardosyasi = fopen("satislar.txt","r");
fseek(satislardosyasi,62,SEEK_SET);
int UrunAnahtarUrunlerdenGelen,FiyatGelen;
char UrunAdiGelen1,UrunAdiGelen2,TurGelen;
FILE * urunlerdosyasi = fopen("urunler.txt","r");
fseek(urunlerdosyasi,45,SEEK_SET);
int TedarikciAnahtarTedariktenGelen;
char TedarikciAdiGelen1,TedarikciAdiGelen2,TedarikciAdiGelen3;
FILE * tedarikdosyasi = fopen("tedarik.txt","r");
int i,j,kazanc,enkucukkazanc=1000;
for(i=0;i<6 i="" p="">6>
fscanf(satislardosyasi,"%d %d %d",&UrunAnahtarSatislardanGelen,&TedarikciAnahtarSatislardanGelen,&SatisMiktariGelen);
fscanf(urunlerdosyasi,"%d %c %c %d %c",&UrunAnahtarUrunlerdenGelen,&UrunAdiGelen1,&UrunAdiGelen2,&FiyatGelen,&TurGelen);
kazanc = SatisMiktariGelen * FiyatGelen;
if(kazanc
enkucukkazanc = kazanc;
}
}
fseek(satislardosyasi,62,SEEK_SET);
fseek(urunlerdosyasi,45,SEEK_SET);
for(i=0;i<6 i="" p="">6>
fscanf(satislardosyasi,"%d %d %d",&UrunAnahtarSatislardanGelen,&TedarikciAnahtarSatislardanGelen,&SatisMiktariGelen);
fscanf(urunlerdosyasi,"%d %c %c %d %c",&UrunAnahtarUrunlerdenGelen,&UrunAdiGelen1,&UrunAdiGelen2,&FiyatGelen,&TurGelen);
kazanc = SatisMiktariGelen * FiyatGelen;
if(kazanc==enkucukkazanc){
fseek(tedarikdosyasi,46,SEEK_SET);
for(j=0;j<3 j="" p="">3>
fscanf(tedarikdosyasi,"%d %c %c %c",&TedarikciAnahtarTedariktenGelen,&TedarikciAdiGelen1,&TedarikciAdiGelen2,&TedarikciAdiGelen3);
if(TedarikciAnahtarTedariktenGelen == TedarikciAnahtarSatislardanGelen){
printf("--------------------\nUrun Adi\tTur\tKazanc Miktari\tTedarikci Adi\n%c%c\t\t%c\t%d\t\t%c%c%c\n",UrunAdiGelen1,UrunAdiGelen2,TurGelen,kazanc,TedarikciAdiGelen1,TedarikciAdiGelen2,TedarikciAdiGelen3);
}
}
}
}
fclose(satislardosyasi);
fclose(urunlerdosyasi);
fclose(tedarikdosyasi);
}
Kendisine gönderilen bir integer sayıyı yine kendisine gönderilen bağlı listede bulunduran elemanı silen fonksiyonun c kodu
void liste_eleman_sil(int silinecek,struct eleman **ListeBasi){
struct dugum *b = *ListeBasi;
struct dugum *a;
while(*BagliListe != NULL){
a = b;
b = b->sonraki;
}
if(b == NULL){
return;
}
else if(b == *ListeBasi){
*ListeBasi = (*ListeBasi)->sonraki;
}
else{
a->sonraki = b->sonraki;
}
free(b);
}
void liste_eleman_sil(int silinecek,struct eleman **ListeBasi){
struct dugum *b = *ListeBasi;
struct dugum *a;
while(*BagliListe != NULL){
a = b;
b = b->sonraki;
}
if(b == NULL){
return;
}
else if(b == *ListeBasi){
*ListeBasi = (*ListeBasi)->sonraki;
}
else{
a->sonraki = b->sonraki;
}
free(b);
}
Kendisine gönderilen bağlı listeyi ters çeviren yani tüm bağlantıları tersine çeviren fonksiyonun C kodu
void liste_ters_cevir(struct dugum **BagliListe){
struct dugum *a,*b;
a = NULL;
While(*BagliListe != NULL){
b = *BagliListe;
*BagliListe = (*BagliListe)->sonraki;
b->sonraki = a;
a = b;
}
*BagliListe = a;
}
void liste_ters_cevir(struct dugum **BagliListe){
struct dugum *a,*b;
a = NULL;
While(*BagliListe != NULL){
b = *BagliListe;
*BagliListe = (*BagliListe)->sonraki;
b->sonraki = a;
a = b;
}
*BagliListe = a;
}
Hash Tablosu
//7.Bölüm-Hash Tables
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
struct CELL
{
char *anahtar;
struct CELL *next;
};
int lookup(char *anahtar,struct CELL *l) //Arama
{
if(l==NULL)
return 0;
else if( !strcmp(anahtar,l->anahtar) ) //Eşitse (string ifadeler eşitse) 0 döndürür. Değili 1.
return 1;
else
return lookup(anahtar,l->next);
}
int insert(char *anahtar,struct CELL **l)
{
if(*l==NULL) //Liste boş ise.
{
*l=(struct CELL *)malloc( sizeof(struct CELL) );
(*l)->anahtar=(char *)malloc( (strlen(anahtar)+1)*sizeof(char) ); //strlen(anahtar)=>string uzunluğu.
strcpy( (*l)->anahtar,anahtar );
(*l)->next=NULL;
return 1;
}
else if( strcmp(anahtar,(*l)->anahtar) )
return insert( anahtar,&( (*l)->next ) );
else
return 0;
}
void print_list(struct CELL *l)
{
if(l!=NULL)
{
printf("%s ",l->anahtar);
print_list(l->next);
}
/*
while(l!=NULL)
{
printf("%s",l->anahtar);
l=l->next;
}
*/
}
struct table_node
{
int counter;
struct CELL *header; //Listenin başlangıç adresini tutar.
};
struct hash_tablosu
{
struct table_node *tablo_basi; //[tablo_basi][tablo_uzunlugu][multiplier]
int tablo_uzunlugu;
int multiplier;
};
unsigned hash(char *anahtar,int multiplier,int table_size)
{
int i=0;
unsigned int value=0;
while(anahtar[i]) //while(anahtar[i]!=NULL)
{
value=( anahtar[i]+multiplier*value )%table_size;
i++;
}
return value;
}
void initialize_hash_table(struct hash_tablosu **hash_table,int multiplier,int table_size)
{
int i;
*hash_table=(struct hash_tablosu *)malloc( sizeof(struct hash_tablosu) );
if(*hash_table==NULL)
{
printf("Hash tablosu icin yer ayrilamadi...");
exit(1);
}
(*hash_table)->tablo_basi=(struct table_node *)malloc( table_size*sizeof(struct table_node) );
if( (*hash_table)->tablo_basi==NULL )
{
printf("Hash tablosu icin yer ayrilamadi...");
exit(1);
}
(*hash_table)->tablo_uzunlugu=table_size;
(*hash_table)->multiplier=multiplier;
for(i=0;i<table_size;i++)
{
( ( (*hash_table)->tablo_basi )+i )->counter=0;
( ( (*hash_table)->tablo_basi )+i )->header=NULL;
}
}
void insert_hash_table(struct hash_tablosu *hash_table,char *anahtar)
{
int hash_index=hash(anahtar,hash_table->multiplier,hash_table->tablo_uzunlugu);
if(insert( anahtar,&( (hash_table->tablo_basi + hash_index)->header) ) );
(hash_table->tablo_basi+hash_index)->counter++;
}
void print_hash_table(struct hash_tablosu *hash_table)
{
if(hash_table) //Null degilse.
{
int index;
printf("----------HASH TABLOSU-------\n");
for(index=0;index<hash_table->tablo_uzunlugu;index++)
{
printf("%5d : (%d) ",index,(hash_table->tablo_basi+index)->counter);
print_list((hash_table->tablo_basi+index)->header);
printf("\n");
}
}
else
printf("Hash tablosu bos...\n");
}
int delete_dugum_liste(struct CELL **header,char *anahtar)
{
struct CELL *simdiki,*onceki;
simdiki=*header;
while( simdiki && strcmp(simdiki->anahtar,anahtar) )
{
onceki=simdiki;
simdiki=simdiki->next;
}
if(!simdiki)
return 0;
if(simdiki==*header)
{
*header=(*header)->next;
}
else
{
onceki->next=simdiki->next;
}
free(simdiki->anahtar);
free(simdiki);
return 1;
}
void delete_hash_table(struct hash_tablosu *table,char *anahtar)
{
int hash_index=hash(anahtar,table->multiplier,table->tablo_uzunlugu);
if(delete_dugum_liste( &( (table->tablo_basi +hash_index)->header ),anahtar) )
(table->tablo_basi + hash_index)->counter--;
}
void liste_yok_et(struct CELL **liste_basi)
{
struct CELL *onceki;
while(*liste_basi)
{
onceki=*liste_basi;
*liste_basi=(*liste_basi)->next;
free(onceki->anahtar);
free(onceki);
}
}
void hash_table_yok_et(struct hash_tablosu **hash_table)
{
int index;
if(*hash_table)
{
for(index=0;index<(*hash_table)->tablo_uzunlugu;index++)
liste_yok_et( &( (*hash_table)->tablo_basi+index )->header );
free( (*hash_table)->tablo_basi );
free(*hash_table);
}
*hash_table=NULL;
}
struct hash_tablosu *hash_table_buyut(struct hash_tablosu **htable,int multiplier,int tablo_uzunlugu)
{
int i;
struct CELL *liste_basi;
struct hash_tablosu *yeni_tablo;
if(!*htable)
return NULL;
initialize_hash_table(¥i_tablo,multiplier,tablo_uzunlugu);
for(i=0;i<(*htable)->tablo_uzunlugu;i++)
{
liste_basi=( (*htable)->tablo_basi + i )->header;
while(liste_basi!=NULL)
{
insert_hash_table(yeni_tablo,liste_basi->anahtar);
liste_basi=liste_basi->next;
}
}
hash_table_yok_et(htable);
return yeni_tablo;
}
int main(int argc, char** argv)
{
struct hash_tablosu *htable;
initialize_hash_table(&htable,7,11);
print_hash_table(htable);
/*
0 [0][NULL]
1 [0][NULL]
...
10[0][NULL]
*/
insert_hash_table(htable,"kadayif");
insert_hash_table(htable,"trabzonspor");
insert_hash_table(htable,"kadayif");
insert_hash_table(htable,"gundogdu");
insert_hash_table(htable,"besiktas");
insert_hash_table(htable,"baklava");
insert_hash_table(htable,"dembaba");
insert_hash_table(htable,"cardozo");
print_hash_table(htable);
/*
0:(1) dembaba
1:(2) kadayif
2:(0)
3:(1) gundogdu
4:(1) trabzonspor
5:(0)
6:(0)
7:(2) baklava cardozo
8:(1) besiktas
9:()
10:()
*/
htable=hash_table_buyut(&htable,17,19);
print_hash_table(htable);
/*
0:(0)
1:(0)
2:(0)
3:(0)
4:(1) kadayif
5:(0)
6:(0)
7:(1) cardozo
8:(0)
9:(2) dembaba baklava
10:(0)
11:(0)
12:(1) trabzonspor
13:(0)
14:(1) gundogdu
15:(0)
16:(0)
17:(0)
18:(1) besiktas
*/
getch();
return 0;
}
Ağaçlar (AVL Ağacı)
//6.Bölüm-Ağaçlar (AVL Ağacı)
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
struct node
{
int key;
struct node *left;
struct node *right;
int height; //Derinlik.
};
int max(int a,int b)
{
return a>b ? a:b; //Doğru ise a, yanlış ise b döndürülür.
}
struct node *newNode(int key)
{
struct node *node=(struct node *)malloc( sizeof(struct node) );
node->key=key;
node->left=node->right=NULL;
node->height=1;
return node;
}
int height(struct node *node)
{
if(node==NULL)
return 0;
return node->height;
}
struct node *rightRotate(struct node *y) //Sol-Sol Durumu.
{
struct node *x=y->left, *T=x->right;
x->right=y;
y->left=T;
y->height=max( height(y->left),height(y->right) )+1;
x->height=max( height(x->left),height(x->right) )+1;
return x;
}
struct node *leftRotate(struct node *x) //Sağ-Sağ Durumu.
{
struct node *y=x->right, *T=y->left;
y->left=x;
x->right=T;
x->height=max( height(x->left),height(x->right) )+1;
y->height=max( height(y->left),height(y->right) )+1;
return y;
}
int getBalance(struct node *node)
{
if(node==NULL) //Ağaç NULL ise.
return 0;
return height(node->left) - height(node->right);
}
struct node *insert(struct node *node,int key)
{
int balance;
if(node==NULL)
return newNode(key);
if(key < node->key)
node->left=insert(node->left,key);
else
node->right=insert(node->right,key);
node->height=max( height(node->left),height(node->right) )+1;
balance=getBalance(node);
if(balance>1 && key < node->left->key) //Sol-Sol Durumu.
return rightRotate(node);
if(balance<-1 && key > node->right->key) //Sağ-Sağ Durumu.
return leftRotate(node);
if(balance>1 && key > node->left->key) //Sol-Sağ Durumu.
{
node->left=leftRotate(node->left);
return rightRotate(node);
}
if(balance<-1 && key < node->right->key) //Sağ-Sol Durumu
{
node->right=rightRotate(node->right);
return leftRotate(node);
}
return node;
}
void preorder_yardimci(struct node *node)
{
if(node!=NULL)
{
printf("%d (%d) ",node->key,node->height);
preorder_yardimci(node->left);
preorder_yardimci(node->right);
}
}
void preorder(struct node *node)
{
preorder_yardimci(node);
printf("\n");
}
struct node *minValueNode(struct node *root)
{
struct node *current=root;
if(current==NULL)
return NULL;
while(current->left)
current=current->left;
return current;
}
struct node *deleteNode(struct node *root,int key)
{
if(root==NULL)
return root;
if(key < root->key) //Sol taraftan gidilir.
root->left=deleteNode(root->left,key);
else if(key > root->key) //Sağ taraftan gidilir.
root->right=deleteNode(root->right,key);
else //Silinen düğüme göre kontroller yapılır.
{
if(root->left==NULL || root->right==NULL) //Düğüm yaprak ise...
{
struct node *temp=root->left ? root->left:root->right; //if true:if false
if(temp==NULL)
{
temp=root;
root=NULL;
}
else
*root=*temp; //İcerikler kopyalanıyor.
/*root->key=temp->key;
root->right=temp->right;
root->left=temp->left*/
free(temp);
}
else
{
struct node *temp=minValueNode(root->right);
root->key=temp->key;
root->right=deleteNode(root->right,temp->key);
}
}
if(root==NULL)
return root;
root->height=max( height(root->left),height(root->right) )+1;
int balance=getBalance(root);
if( balance>1 && getBalance(root->left)>=0 )
return rightRotate(root);
if( balance>1 && getBalance(root->left)<0 )
{
root->left=leftRotate(root->left);
return rightRotate(root);
}
if(balance<-1 && getBalance(root->right)<=0)
return leftRotate(root);
if(balance<-1 && getBalance(root->right)>0)
{ root->right=rightRotate(root->right);
return leftRotate(root);
}
return root;
}
int main(int argc, char** argv)
{
struct node *root=NULL;
root=insert(root,90);
root=insert(root,150);
root=insert(root,173);
root=insert(root,73);
root=insert(root,40);
root=insert(root,80);
root=insert(root,160);
root=insert(root,180);
preorder(root); //90(4) 73(2) 40(1) 80(1) 160(3) 150(1) 173(2) 180(1)
/*
root=deleteNode(root,90);
root=deleteNode(root,160);
root=deleteNode(root,73);
root=deleteNode(root,80);
root=deleteNode(root,40);
root=deleteNode(root,173);
root=deleteNode(root,180);
root=deleteNode(root,150);
*/
getch();
return 0;
}