Listeyi gezme
- C kursu
- Orta seviye
- Ders 72/116
- 5 dk
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.
Başlangıç kodu
#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;
}
// list_print: while döngüsüyle her düğümün datasını yazdır, sonunda newline
// main: 30, 20, 10 ekle (başa), list_print çağır, tüm düğümleri free et
int main(void) {
// buraya yaz
return 0;
}Örnek çözüm
#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;
}Beklenen çıktı
10 20 30
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Gezme deyimleri
| Kavram | Anlamı |
|---|---|
cur = head |
imleci başlat |
cur != NULL |
döngü koşulu |
cur->data |
değeri oku |
cur = cur->next |
bir ilerle |
2 while (cur != NULL) döngüsü ne zaman durur?
- cur NULL olduğunda Doğru cevap
- cur head olduğunda
- data 0 olduğunda
- next NULL olmadığında
Açıklama: cur NULL olduğunda listenin sonuna gelinmiş olur.
3 İmleci ilerlet
cur = cur->____;
cur = cur->next;
Açıklama: cur->next imleci bir sonraki düğüme taşır.