C
Listeyi gezme
Bağlı listeyi döngüyle gezmeyi öğrenirsin.
Listeyi gezme
Bir listeyi gezmek, baştan sona her düğümü sırayla ziyaret etmektir. Bir imleç (cursor) değişkeni baştan başlar ve her adımda bir ilerler.
Örnek: Node *cur = head; while (cur != NULL) { printf("%d ", cur->data); cur = cur->next; }. cur != NULL koşulu, listenin sonuna geldiğimizde döngüyü durdurur. cur = cur->next adımı imleci bir sonraki düğüme taşır. Bu döngü O(n) sürede çalışır; n listedeki düğüm sayısıdır. Gezerken düğümleri değiştirmez, yalnızca okuruz.
list_print işlevi
Gezme, listeyi yazdıran bir list_print işlevine dönüşür. İşlev, başı alır ve her düğümün data alanını yazdırır.
Tanım: void list_print(Node *head) { Node *cur = head; while (cur != NULL) { printf("%d ", cur->data); cur = cur->next; } printf("\n"); }. Her değerden sonra boşluk bırakılır; döngü bitince yeni satır yazılır. Bu, çıktının düzenli görünmesini sağlar. İşlev void döndürür çünkü bir şey hesaplamaz, yalnızca yazdırır. Listede hiç düğüm yoksa (head == NULL) döngü hiç dönmez ve yalnızca yeni satır yazılır.
Uygulama list_print ile yazdır
void list_print(Node *head) yaz: Node *cur = head; ile başla, while (cur != NULL) döngüsünde printf("%d ", cur->data); ve cur = cur->next; yap, döngü sonunda printf("\n");. main'de 30, 20, 10 değerlerini başa ekle, list_print(head); çağır, sonra tüm düğümleri free et.
Örnek çözümü göster
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node *next;
} Node;
Node *list_push_front(Node *head, int value) {
Node *n = malloc(sizeof(Node));
n->data = value;
n->next = head;
return n;
}
void list_print(Node *head) {
Node *cur = head;
while (cur != NULL) {
printf("%d ", cur->data);
cur = cur->next;
}
printf("\n");
}
int main(void) {
Node *head = NULL;
head = list_push_front(head, 30);
head = list_push_front(head, 20);
head = list_push_front(head, 10);
list_print(head);
while (head) { Node *t = head; head = head->next; free(t); }
return 0;
}
Kendini test et
-
Gezme deyimleri
- cur = head
- imleci başlat
- cur != NULL
- döngü koşulu
- cur->data
- değeri oku
- cur = cur->next
- bir ilerle
-
while (cur != NULL) döngüsü ne zaman durur?
- cur NULL olduğunda
- cur head olduğunda
- data 0 olduğunda
- next NULL olmadığında
Cevabı göster
cur NULL olduğunda — cur NULL olduğunda listenin sonuna gelinmiş olur.
-
İmleci ilerlet
cur = cur->____;
Cevabı göster
cur = cur->next;
Sıradaki ders: Listeden silme