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;
}
No comments:
Post a Comment