- Katılım
- 1 Şubat 2007
- Mesajlar
- 93,683
- Reaksiyon puanı
- 50,347
- Puanı
- 1,060
- Konum
- İstanbul
- Web Sitesi
- izleryazar.com
Programlama dillerinde veri yapıları, verileri çeşitli şekillerde tutmayı sağlayan yapılardır. Bu veri yapılarından en yaygın olarak kullanılanlarından biri de stack (yığıt) yapısıdır. Stackler LIFO (Last In First Out - Son Giren İlk Çıkar) yapısına göre çalışır. Yani bir örnek olarak elimizde 3 5 7 gibi bir dizi olsun. Eğer bu diziye 8 rakamını eklersek sona eklenecek yani 3 5 7 8 şeklinde olmuş olacak dizimiz. Eğer silmek istersek ise son giren yani 8 ilk olarak çıkacak ve dizimiz yeniden 3 5 7 olan haline dönecek.
Bu basit veri yapısının örnek kodunu C üzerinde yazdım. Kod sadece örnek olması amacıyla çok basit bir şekilde yazılmıştır.
Kodda anlatılanları kısaca özetlemek gerekirse öncelikle stack adlı bir yapı oluşturdum. Bu yapının iki değeri var biri stack içindeki toplam değer sayısını tutacak "top" değişkeni, diğeri ise 10 elemanlı bir değer dizisi. Bu 10 olan eleman sayısını siz elbette istediğiniz gibi değiştirebilirsiniz. Hatta define ile başta tanımlarsanız programlama açısından daha doğru bir iş yapmış olursunuz.
Daha sonra stack yapısınının yanı sıra iki tane temel fonksiyonumuz var, onları oluşturdum. Bu fonksiyonlar pop ve push fonksiyonları. Push fonksiyonu stackin üzerine sayı eklerken, pop ise stackin en üstündeki sayıyı alıyor. Bunları yaparken top değişkenine bakarak doluluğunu kontrol ediyor ve push'ta arttırıyor, pop'ta ise azaltıyor bu top değişkenin değerini.
Bu basit veri yapısının örnek kodunu C üzerinde yazdım. Kod sadece örnek olması amacıyla çok basit bir şekilde yazılmıştır.
Kodda anlatılanları kısaca özetlemek gerekirse öncelikle stack adlı bir yapı oluşturdum. Bu yapının iki değeri var biri stack içindeki toplam değer sayısını tutacak "top" değişkeni, diğeri ise 10 elemanlı bir değer dizisi. Bu 10 olan eleman sayısını siz elbette istediğiniz gibi değiştirebilirsiniz. Hatta define ile başta tanımlarsanız programlama açısından daha doğru bir iş yapmış olursunuz.
Daha sonra stack yapısınının yanı sıra iki tane temel fonksiyonumuz var, onları oluşturdum. Bu fonksiyonlar pop ve push fonksiyonları. Push fonksiyonu stackin üzerine sayı eklerken, pop ise stackin en üstündeki sayıyı alıyor. Bunları yaparken top değişkenine bakarak doluluğunu kontrol ediyor ve push'ta arttırıyor, pop'ta ise azaltıyor bu top değişkenin değerini.
Kod:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
struct stack{
int top;
int deger[10];
};
struct stack s;
void push(struct stack *ps, int x){
if(ps->top==9)
printf("stack dolu");
else
ps->deger[(ps->top)++]=x;
}
void pop(struct stack *ps){
if(ps->top==0)
printf("stack bos");
else
ps->top--;
}
int main()
{
int sayi=0;
while(sayi!=4){
printf("Lutfen bir secim yapin:
1. Ekleme
2. Silme
3. Listeleme
4. Cikis
");
scanf("%d",&sayi);
switch(sayi){
case 1:
printf("Eklemek istediginiz sayiyi girin:");
int ekle;
scanf("%d",&ekle);
push(&s,ekle);
break;
case 2:
pop(&s);
break;
case 3:
if(s.top==0)
printf("Liste bos
");
else
printf("
Liste:");
for(int a=0;a<s.top;a++)
printf("%d ",s.deger[a]);
printf("
");
break;
}
}
getchar();
return 0;
}