C'de Linked List: Sıfırdan Veri Yapısı Kurma
Linked list, verileri dinamik olarak depolayan ve bellekte ardışık olmayan düğümlerden oluşan temel bir veri yapısıdır. Her düğüm bir veri ve bir sonraki düğüme işaret eden pointer içerir. C'de bu yapıyı sıfırdan kurmak hem bellek yönetimini hem de pointer mantığını anlamak için iyi bir alıştırmadır.
Öncelikle bir düğüm (node) yapısı tanımla. Her düğüm bir tam sayı ve bir sonraki düğüme işaret eden pointer tutacak. Ardından ekleme, silme ve liste yazdırma işlevlerini yaz.
1#include <stdio.h>2#include <stdlib.h>34struct Node {5int data;6struct Node* next;7};89typedef struct Node Node;1011// Yeni düğüm oluştur12Node* createNode(int data) {13Node* newNode = (Node*)malloc(sizeof(Node));14newNode->data = data;15newNode->next = NULL;16return newNode;17}1819// Listenin başına eleman ekle20Node* insertAtBegin(Node* head, int data) {21Node* newNode = createNode(data);22newNode->next = head;23return newNode;24}2526// Listenin sonuna eleman ekle27Node* insertAtEnd(Node* head, int data) {28Node* newNode = createNode(data);29if (head == NULL) return newNode;3031Node* temp = head;32while (temp->next!= NULL) {33temp = temp->next;34}35temp->next = newNode;36return head;37}3839// Listeyi yazdır40void displayList(Node* head) {41Node* temp = head;42while (temp!= NULL) {43printf("%d -> ", temp->data);44temp = temp->next;45}46printf("NULL\n");47}4849// Belleği temizle50void freeList(Node* head) {51while (head!= NULL) {52Node* temp = head;53head = head->next;54free(temp);55}56}5758int main() {59Node* head = NULL;6061head = insertAtEnd(head, 10);62head = insertAtEnd(head, 20);63head = insertAtEnd(head, 30);64head = insertAtBegin(head, 5);6566displayList(head);6768freeList(head);69return 0;70}Beklenen Çıktı:
15 -> 10 -> 20 -> 30 -> NULLKodda `malloc()` ile dinamik bellek ayırıyoruz. `createNode()` yeni bir düğüm oluşturup başlatır. `insertAtBegin()` başa, `insertAtEnd()` sona eleman ekler. `displayList()` tüm listeyi gezip yazdırır. En önemli nokta: her `malloc()` için mutlaka `free()` çağrı; aksi halde bellek sızıntısı oluşur. `freeList()` programdan çıkmadan önce tüm düğümleri serbest bırakır.
Sık yapılan hata: NULL pointer kontrolü atlamak. Boş listeye eleman eklerken `head == NULL` durumunu mutlaka kontrol et, yoksa segmentation fault alırsın.
0 yorum