İstersen buraya tıklayarak açıklamalı veya açıklamasız stack kodlarını indirebilirsin.
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
/**
* Yığın yapısı
* @author Yunus Emre AK
*/
typedef struct node{
int veri;
struct node * altindaki;
}Dugum;
/* Yığın yapısında son giren ilk çıkacağı için "enUst" adında bir düğüm oluşturalım.
* Oluşturulan bu yığın, üst üste konulan kitaplar gibi düşünülebilir.
*
*
*/
Dugum *enUst = NULL;
// Yığına veri ekleme fonksiyonu.
void push(int veri){
// İlk kez veri atama işlemi yapılmadan önce yığın düğümü oluşturulur.
Dugum* yeniDugum;
// Bellek atama işlemini yapıyoruz.
yeniDugum = (Dugum*)malloc(sizeof(Dugum));
// Veriyi atıyoruz.
yeniDugum->veri = veri;
/* Yeni düğüm, enUst olarak ifade ettiğimiz düğümün üstünde olduğu için
* yeni düğümün altındakini, eski enUst düğüm olarak atıyoruz.
*/
yeniDugum->altindaki = enUst;
/* Yeni tanımladığımız düğüm artık en üstte olduğu için yeni düğümü en üste
* atıyoruz, böylelikle ana düğüm en altta, diğer düğümler üstüne binecek şekilde
* veri depolanacak, yapılacak en son "altindaki" işlemi ana düğüme ulaştıracaktır.
*/
enUst = yeniDugum;
}
// Yığından veri çıkarma fonksiyonu.
int pop(){
/* İlk olarak yığında veri olup olmadığı kontrol ediyoruz, eğer veri yoksa işlem
* yapılamaz.
*/
if(enUst == NULL){
printf("\nYigin dugume sahip degil, hata!\n");
// Hata kodu olması amaçlı , -1 döndürüyoruz.
return -1;
}
// Düğümdeki veriyi geri döndürülecek olan sonuc'a atıyoruz.
int sonuc = enUst->veri;
/* En üstteki düğüm silinmeden önce onun için ayrılan belleği serbest bırakmamız
* lazım, bu sebeple bellek bilgisini kaybetmemek için geçici bir düğüne atıyoruz.
*/
Dugum *gecici = enUst;
// En üstteki düğüm silineceği için, altındaki düğüm en üste gelecektir.
enUst = enUst->altindaki;
// Silinen düğüm için ayrılan belleği serbest bırakıyoruz.
free(gecici);
// düğümden aldığımız değeri ekrana döndürüyoruz.
return sonuc;
}
// Bütün düğüm verilerini ekrana yazdırma fonksiyonu.
void printStack(){
/* Ana yığının üzerinde değişiklik yapmamak için bir kopyasını oluşturuyoruz.
*
*/
Dugum *kopyaEnUst = enUst;
// Görsel düzenleme için buradadır.
printf("\n*******");
// Değerler var olduğu sürece işlem devam etmeli.
while(kopyaEnUst != NULL){
printf("\nVeriler: %d ",kopyaEnUst->veri);
/* En üstteki veriye baktıktan sonra bir altındakinin bakmak için altındakini
* en üste alıyoruz.
*/
kopyaEnUst = kopyaEnUst->altindaki;
}
// Görsel düzenleme için buradadır.
printf("\n*******");
}
int main(){
int x = 10;
for(x; x < 50; x+=10){
push(x);
printf("\n%d verisi eklendi",x);
printStack();
}
int a,i = 1;
for(a = pop(); i < 5; a = pop()){
printf("\n%d verisi cikarildi.",a);
printStack();
i++;
}
push(30);
printf("\n30 verisi eklendi");
printStack();
}
Veri Yapıları
Yorumlar
Yorum Gönder