STACKLER
Bir stack baglanmis listelerin bir zoraki versiyonudur.Yeni nodlar stacklere yanlizca stacklerin en ustunden baslama sarti ile eklenebilir ve cikarilabilirler.
Bu nedenle stack last-in, first-out(LIFO)(En son iceri, en ilk disari) olarak bilinir.
Bir stackte ki nodun en sonda ki baglanti uyesi stackin en sonunu gostermek amaci ile NULL a kurulur.
Link list ve Stackler arasinda ki fark: ekleme ve cikarma islemi link liste herhangi bir yerde yapilabilir ama stackde ise islemin en basindan yapilir.
Assagida yer alan program Stack kullanilarak yapilmistir.
/*dinamik stack programi*/
#include <stdio.h>
#include <stdlib.h>
struct stackNode{
int data;
struct stackNode *sonraki;
};
typedef struct stackNode STACKNODE;
typedef STACKNODE *STACKNODEPTR;
void ekle(STACKNODEPTR *, int);
int Cikar(STACKNODEPTR *);
int Bos(STACKNODEPTR);
void StackYaz(STACKNODEPTR);
void Yonergeler(void);
main()
{
STACKNODEPTR stack = NULL;
int secenek, deger;
Yonergeler();
printf("?");
scanf("%d", &secenek);
while(secenek != 3)
{
switch(secenek)
{
case 1:
printf("Lutfen bir tam sayi giriniz: ");
scanf("%d", °er);
ekle(&stack, deger);
StackYaz(stack);
break;
case 2:
if(Bos(stack))
printf("The cikarilan deger %d.\n". Cikar(&stack));
StackYaz(stack);
break;
default:
printf("Gecersiz secenek.\n\n");
Yonergeler();
break;
}
printf("?");
scanf("%d", &secenek);
}
printf("Programin Sonu\n");
return(0);
}
/*Yonergeler*/
void Yonergeler(void)
{
printf("Lutfen Bir Secenek Girin:\n"
"1 bir
deger eklemek icin\n"
"2 bir
deger cikarmak icin\n"
"3 programa
son vermek icin\n");
}
/*Stacke bir node ekleme*/
void ekle(STACKNODEPTR *Ust, int bilgi)
{
STACKNODEPTR yeni;
yeni = malloc(sizeof(STACKNODE));
if(yeni != NULL)
{
yeni->data = bilgi;
yeni->sonraki = *Ust;
*Ust = yeni;
}
else
printf("%d eklenmedi. Hafiza yetersiz.\n",
bilgi);
}
/*Bir bilgiyi stackden silme islemi*/
int Cikar(STACKNODEPTR *Ust)
{
STACKNODEPTR hedef;
int SilinecekDeger;
hedef = *Ust;
SilinecekDeger = (*Ust)->data;
*Ust = (*Ust)->sonraki;
free(hedef);
return(SilinecekDeger);
}
/*Stackde ki bilgileri Yaz*/
void StackYaz(STACKNODEPTR suAn)
{
if(suAn = = NULL);
printf("Stack Su An Bos\n");
else
{
printf("Stack:\n");
while(suAn
!= NULL)
{
printf("%d - -> ", suAn->data);
suAn =
suAn->sonraki;
}
printf("NULL\n\n");
}
}
/*Stack Bos mu?*/
int Bos(STACKNODEPTR Ust)
{
return Ust = = NULL;
}
|