Stack ve Queue: C ile Temel Veri Yapılarını Kodla
Stack (yığın) ve Queue (kuyruk) programlamada sıkça kullanılan iki temel veri yapısı. Stack LIFO (Last In First Out) mantığıyla çalışır, son giren ilk çıkar. Queue ise FIFO (First In First Out), ilk giren ilk çıkar. İkisini de C ile sıfırdan yazarak nasıl çalıştığını görelim.
Stack'i dizi tabanlı olarak oluşturalım. Eleman eklemek push, çıkarmak pop işlemidir.
1#include <stdio.h>2#include <stdlib.h>3#define MAX 10045typedef struct {6int items[MAX];7int top;8} Stack;910void push(Stack *s, int val) {11if (s->top < MAX - 1) {12s->items[++s->top] = val;13printf("%d push edildi\n", val);14} else {15printf("Stack dolu!\n");16}17}1819int pop(Stack *s) {20if (s->top >= 0) {21return s->items[s->top--];22}23printf("Stack boş!\n");24return -1;25}2627int main() {28Stack s;29s.top = -1;3031push(&s, 10);32push(&s, 20);33push(&s, 30);3435printf("Pop: %d\n", pop(&s));36printf("Pop: %d\n", pop(&s));3738return 0;39}Beklenen çıktı:
110 push edildi220 push edildi330 push edildi4Pop: 305Pop: 20Şimdi Queue'yu yazalım. Enqueue (ekleme) ve Dequeue (çıkarma) işlemleri vardır.
1#include <stdio.h>2#include <stdlib.h>3#define MAX 10045typedef struct {6int items[MAX];7int front, rear;8} Queue;910void enqueue(Queue *q, int val) {11if (q->rear < MAX - 1) {12q->items[++q->rear] = val;13printf("%d kuyruğa eklendi\n", val);14} else {15printf("Kuyruk dolu!\n");16}17}1819int dequeue(Queue *q) {20if (q->front <= q->rear) {21return q->items[q->front++];22}23printf("Kuyruk boş!\n");24return -1;25}2627int main() {28Queue q;29q.front = 0;30q.rear = -1;3132enqueue(&q, 5);33enqueue(&q, 15);34enqueue(&q, 25);3536printf("Dequeue: %d\n", dequeue(&q));37printf("Dequeue: %d\n", dequeue(&q));3839return 0;40}Beklenen çıktı:
15 kuyruğa eklendi215 kuyruğa eklendi325 kuyruğa eklendi4Dequeue: 55Dequeue: 15Stack'te son eklenen 30 ilk çıktı, Queue'da ise ilk eklenen 5 ilk çıktı. Fark budur. Gerçek projelerde dinamik bellek (malloc) kullanarak bağlı liste tabanlı versiyonlar daha verimli olur, ama bu temel yapılar algoritmayı anlamak için yeterli. Üretim kodunda buffer overflow'dan korunmak için her zaman sınır kontrolü yapın.
0 yorum