C
Listeye ekleme
Bağlı listeye eleman eklemeyi öğrenirsin.
Listeye ekleme
Listeye düğüm eklemenin en kolay yolu başa eklemedir (prepend). Yeni düğüm ayrılır, next'i eski başı gösterir ve yeni düğüm yeni baş olur.
İşlev imzası: Node *list_push_front(Node *head, int value). İçeride Node *n = malloc(sizeof(Node)); n->data = value; n->next = head; return n; yazılır. head başlangıçta NULL ise ilk düğüm eklenir; n->next = NULL olur. Bu yöntem O(1) sürede çalışır; listenin sonunu aramak gerekmez. Çağıran taraf yeni başı head = list_push_front(head, 10); biçiminde geri almalıdır.
Geri dönüş değeri ve baş
Başa ekleme, başın değişmesine neden olur. Bu yüzden fonksiyon yeni başı döndürür ve çağıran onu geri alır. Bu, C'deki deyim: işaretçiyi değere göre geçir.
Çağrı: head = list_push_front(head, 20);. Eğer head'i doğrudan fonksiyona gönderip geri almadan kullanırsan, eski başı kullanmaya devam edersin ve yeni düğüm listeden kopuk kalır. Birden çok ekleme zincirleme yapılabilir: önce head = list_push_front(head, 10);, sonra head = list_push_front(head, 20);. Bu, listeyi 20 -> 10 -> NULL biçiminde kurar. Son eklenen her zaman baştadır.
Uygulama İki düğümlü liste
Node *list_push_front(Node *head, int value) fonksiyonunu yaz: malloc(sizeof(Node)) ile ayır, n->data = value;, n->next = head;, return n;. main'de Node *head = NULL; ile başla, önce 10 sonra 20 ekle. printf("%d %d\n", head->data, head->next->data); ile yazdır. Her iki düğümü free ile iade 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;
}
int main(void) {
Node *head = NULL;
head = list_push_front(head, 10);
head = list_push_front(head, 20);
printf("%d %d\n", head->data, head->next->data);
free(head->next);
free(head);
return 0;
}
Kendini test et
-
Yeni düğümün next'i
n->next = ____;
Cevabı göster
n->next = head;
-
Başa ekleme adımları
- 1. adım
- malloc ile ayır
- 2. adım
- data'yı ata
- 3. adım
- next = head
- 4. adım
- return n
-
list_push_front çağrısından sonra ne yapılmalı?
- head'i NULL yap
- free(head) çağır
- data'yı sil
- head'i geri al
Cevabı göster
head'i geri al — head = list_push_front(head, x) ile yeni baş geri alınır.
Sıradaki ders: Listeyi gezme