VERİ YAPILARI DERSİ ÖDEV VİZE 1
RAPORU
NAZMİ CİRİM
21360859069
PROJE ADI:
Öğrenci bilgilerini işlemek için çift bağlantılı (doubly linked) bir
liste yapısı oluşturmak.
PROJE AMACI:
Öğrenci bilgilerini yönetmek için bağlı liste(Linked List)
yapısını kullanır. Bağlı liste, her bir öğrencinin özelliklerini
(öğrenci numarası, ad, soyad, bölüm ve sınıf bilgilerini)
depolar ve bu bilgileri ekler, siler, arar ve listeler.
1-) createLinkedList :
Yeni bir öğrenci düğümü oluşturan ve bu düğümün başlangıç
olarak kullanılabileceği bir bağlı liste yapısı için bir yardımcı
fonksiyonu içerir. yeni_ogrenci işaretçisi, dinamik olarak
oluşturulan bellek bloğunu işaret eder.
strcpy fonksiyonu ile ad, soyad ve bölüm stringleri,
yeni_ogrenci yapısının ilgili alanlarına kopyalanır.
yeni_ogrenci->next ve yeni_ogrenci->prev başlangıçta NULL
olarak ayarlanır. Bu değerler bu öğrenci düğümünün bağlı
listeye eklenen diğer düğümlerle ilişkisini tanımlamak için
kullanılır.
Son olarak oluşturulan bu yeni öğrenci düğümü işaretçisi
yeni_ogrenci oluşturulan düğümün adresini döndürmek için
kullanılır. Bu, bağlı listenin başlangıç noktası olarak
kullanılabilir veya başka bir yerde bu düğümü bağlı listeye
eklemek için kullanılabilir.
2-) destroyLinkedList :
Bağlı liste içindeki tüm düğümleri serbest bırakarak belleği
temizler.
temp değişkeni listenin düğümlerini dolaşmak için kullanılan
geçici bir işaretçi olarak kullanılıyor.
İlk olarak head parametresiyle gelen başlangıç düğümünü
işaret eder. while döngüsü ile listenin tüm düğümlerini
dolaşmak için kullanılır. Her döngü adımında temp mevcut
düğümü işaret eder ve free(temp) ile bu düğümün bellek
alanını serbest bırakır.
Bundan sonra temp bir sonraki düğümü işaret etmek üzere
güncellenir.
3-) addNode :
Bağlı listede yeni bir öğrenci düğümü eklemek için bir
fonksiyon içerir. Bağlı listenin head ini kullanarak yeni öğrenci
düğümüyle birlikte verilen öğrenci bilgileriyle birleştirerek
bağlı listeye yeni bir düğüm ekler.
Ogrenci **head bağlı listenin başlangıç noktasını işaret eden
bir işaretçi işaretçisidir. Bu işaretçi işaretçisi bağlı listenin
kendisini değiştirebilmek için kullanılır.
createLinkedList fonksiyonu kullanılarak, verilen öğrenci
bilgileriyle yeni bir öğrenci düğümü oluşturulur. Bu yeni
düğüm yeni_ogrenci işaretçisine atanır. Bağlı liste boşsa
(*head == NULL) yani başlangıç düğümü henüz atanmamışsa
oluşturulan yeni öğrenci düğümü bağlı listenin başlangıç
noktası olan head işaretçisine atanır (*head = yeni_ogrenci).
Bu atama bağlı listenin ilk düğümünü oluşturur. Bağlı liste boş
değilse yeni öğrenci düğümü listenin sonuna eklenir. Bunun
için listenin sonuna kadar ilerleyen bir döngü kullanılır.
Listenin sonuna ulaşıldığında (temp->next == NULL) yeni
öğrenci düğümü temp->next işaretçisiyle bağlanır ve
yeni_ogrenci->prev işaretçisi ile önceki düğüme bağlanır.
4-) deleteNode :
Öğrenci numarasını (ogrenci_no) anahtar bilgi alarak bağlı
listeden belirli bir öğrenci numarasına sahip bir öğrenci
düğümünü silen bir fonksiyon içerir. Bağlı listenin head ini
işaret eden bir işaretçi işaretçisine sahiptir. while (temp !=
NULL) Listenin sonuna kadar bir döngü oluşturulur.
if (temp->ogrenci_no == ogrenci_no) listenin şu anki
düğümünün öğrenci numarasının silinecek olan öğrenci
numarasına eşit olup olmadığını kontrol eder eşitse bu
düğümü silmek gerekir.
if (temp->prev != NULL) silinecek düğümün bir önceki düğümü
varsa yani listenin başındaki bir düğüm değilse temp->prev-
>next = temp->next önceki düğümün next işaretçisi silinecek
düğümün next işaretçisine bağlanır.
Aksi takdirde (else) bu düğüm listenin başındaki bir düğüm
olduğu için *head = temp->next Bağlı listenin yeni başlangıç
noktası, silinecek düğümün bir sonraki düğümüne atanır.
if (temp->next != NULL) eğer silinecek düğümün bir sonraki
düğümü varsa temp->next->prev = temp->prev sonraki
düğümün prev işaretçisi silinecek düğümün prev işaretçisine
bağlanır.
free(temp) silinecek düğümün belleği serbest bırakılır.
5-) searchNode :
Öğrenci numarasını (ogrenci_no) anahtar bilgi alarak belirli bir
öğrenci numarasına sahip bir öğrenci düğümünü arayan bir
fonksiyon içerir.
if (temp->ogrenci_no == ogrenci_no) şu anki düğümün
öğrenci numarasının aranan öğrenci numarasına eşit olup
olmadığını kontrol eder eşitse bu düğümü bulmuşuz demektir
ve bu düğümün adresini (return temp;) ile geri döndürürüz.
Durum gerçekleşmezse yani şu anki düğümün öğrenci
numarası aranan numara değilse temp işaretçisi (temp =
temp->next;) ile bir sonraki düğüme geçer ve döngü devam
eder.
Döngü sona erer ve aranan öğrenci numarasına sahip bir
düğüm bulunamazsa return NULL; ifadesi kullanılır ve NULL
geri döndürülür. Bu durumda bağlı listede aranan öğrenci
numarasına sahip bir düğüm bulunamamış demektir.
6-) displayList :
Bağlı listedeki öğrenci düğümlerinin bilgilerini ekrana yazdıran
bir fonksiyon içerir.
Ogrenci *temp = head bağlı listenin head ini temp işaretçisiyle
işaret eder listenin düğümlerini dolaşmak için kullanılır.
while (temp != NULL) listenin sonuna kadar bir döngü
oluşturur. Döngünün her adımında şu anki düğümün öğrenci
bilgilerini ekrana yazdırır.
temp = temp->next ile bir sonraki düğüme geçer.