giriiş
Yığın, aynı türden öğelerden oluşan doğrusal bir veri yapısıdır. Bir Yığın'da, öğelerin eklenmesi ve çıkarılması yalnızca bir uç noktada gerçekleşir. Yığın'ın davranışı "son giren ilk çıkar" (LIFO) olarak tanımlanır. Bir öğe yığına "İTİLDİĞİNDE", yığından "çıkarılan" ilk öğe olur. Eklenen en eski öğeye ulaşmak için, önceki tüm öğeleri geri almanız gerekir.
Bu yazıda, yığın veri yapısı kavramını ve C'de diziler kullanılarak uygulanmasını öğreneceksiniz.
Yığınlarda gerçekleştirilen işlemler
Aşağıda Stacks tarafından sağlanan temel işlemler yer almaktadır.
- push: bir elemanı yığının en üstüne ekler.
- pop: Yığının en üstündeki elemanı kaldırır.
- isEmpty: Yığının boş olup olmadığını kontrol eder.
- isFull: Yığının dolu olup olmadığını kontrol eder.
- üst: Yığının en üst elemanını görüntüler.
Stacks'in temel mekaniği
Başlangıçta, yığındaki en üstteki öğeyi izlemek için bir işaretçi (yukarı) ayarlanır. Yığın -1 olarak başlatılır.
Daha sonra yığının boş olup olmadığı top ve -1 karşılaştırılarak kontrol edilir.
Yığına elemanlar eklendikçe en üstteki konum güncellenir.
Öğeler çıkarıldığında veya silindiğinde en üstteki öğe kaldırılır ve en üstteki konum güncellenir.
C'de yığın uygulaması
YIĞINLAR yapılar, işaretçiler, diziler veya bağlı listeler kullanılarak temsil edilebilir.
Bu örnek, C'de dizileri kullanarak yığınları uygular:
#include <stdio.h>
#include <stdlib.h>
#define SIZE 4
int top = -1, inp_array[SIZE];
void push();
void pop();
void show();
int main()
{
int choice;
while (1)
{
printf("\nPerform operations on the stack:");
printf("\n1.Push the element\n2.Pop the element\n3.Show\n4.End");
printf("\n\nEnter the choice: ");
scanf("%d", &choice);
switch (choice)
{
case 1:
push();
break;
case 2:
pop();
break;
case 3:
show();
break;
case 4:
exit(0);
default:
printf("\nInvalid choice!!");
}
}
}
void push()
{
int x;
if (top == SIZE - 1)
{
printf("\nOverflow!!");
}
else
{
printf("\nEnter the element to be added onto the stack: ");
scanf("%d", &x);
top = top + 1;
inp_array[top] = x;
}
}
void pop()
{
if (top == -1)
{
printf("\nUnderflow!!");
}
else
{
printf("\nPopped element: %d", inp_array[top]);
top = top - 1;
}
}
void show()
{
if (top == -1)
{
printf("\nUnderflow!!");
}
else
{
printf("\nElements present in the stack: \n");
for (int i = top; i >= 0; --i)
printf("%d\n", inp_array[i]);
}
}Bu program kullanıcıya dört seçenek sunar:
- Bir öğeyi itmek
- Bir öğeyi patlatmak
- Göstermek
- Son
Kullanıcının bir sayı girmesini bekler.
- Kullanıcı 1'i seçerse, program bir push() işlemi gerçekleştirir. Öncelikle top değerinin SIZE – 1'e eşit olup olmadığını kontrol eder. Doğruysa, "Taşma!!" mesajı görüntülenir. Aksi takdirde, kullanıcıdan yığına eklemek üzere yeni bir öğe sağlaması istenir.
- Kullanıcı 2'yi seçerse, program bir pop() işlevi işler. İlk olarak, top değerinin -1'e eşit olup olmadığını kontrol eder. Doğruysa, "Underflow!!" görüntülenir. Aksi takdirde, en üstteki eleman kaldırılır ve program ortaya çıkan yığını çıktı olarak verir.
- Kullanıcı 3'ü seçerse, program bir show() işlevi işler. İlk olarak top'un -1'e eşit olup olmadığını kontrol eder. Doğruysa, "Underflow!!" görüntülenir. Aksi takdirde, program ortaya çıkan yığını çıktı olarak verir.
- Kullanıcı 4'ü seçerse programdan çıkılır.
"10" sayısını yığına itmek için şu kodu çalıştırın:
Output
Perform operations on the stack:
1.Push the element
2.Pop the element
3.Show
4.End
Enter the choice: 1
Enter the element to be inserted onto the stack: 10Daha sonra Stack()'taki elemanları göster:
Output
Perform operations on the stack:
1.Push the element
2.Pop the element
3.Show
4.End
Enter the choice: 3
Elements present in the stack:
10Sonra pop():
Output
Perform operations on the stack:
1.Push the element
2.Pop the element
3.Show
4.End
Enter the choice: 2
Şimdi yığın boş. Pop()'u tekrar deneyin:
Output
Perform operations on the stack:
1.Push the element
2.Pop the element
3.Show
4.End
Enter the choice: 3
Underflow!! Your code... */Bir yığının nasıl çalıştığını anlamak için bu programla denemeler yapmaya devam edin.
Yığın işlemlerinin zaman karmaşıklığı
Yığınlarda aynı anda yalnızca bir öğeye erişilebilir.
Yığın üzerinde push() ve pop() işlemleri gerçekleştirilirken O(1) zaman alır.
Sonuç
Bu yazıda, yığın veri yapısı kavramını ve C'de diziler kullanılarak uygulanmasını öğrendiniz.









