Java'da Tek Yönlü Bağlı Liste Yapısı Örneği | 2019-10-22 tarihinde oluşturuldu.
Arkadaşlar bu yazımda Bilgisayar Mühendisliğinde Veri Yapıları dersinde işlediğimiz tek yönlü bağlı liste yapısı ile ilgili bir örnek yapmaya çalışacağım.

Amaç:
Numara, Ad Soyad, Vize ile Final not bilgilerini tutan tek yönlü bağlı liste türünde bir veri yapısı tanımlamak.

Methodlar:
  • Başa Eleman Ekleme
  • Sona Eleman Ekleme
  • Araya Eleman Ekleme

  • Baştaki Elemanı Silme
  • Sondaki Elemanı Silme
  • İstenen Elemanı Silme

  • Vizesi En Yüksek Olan Öğrenci Bilgilerini Ekrana Yazdırma
  • Bütün Öğrenci Bilgilerini Ekrana Yazdırma
  • Final sınavı ortalamasına göre geçenleri ve kalanları ayrı bağlı liste halinde listeleme

Yapı:
Ben NetBeans IDE'de Liste.java ile Giris.java adında iki dosya (class) oluşturdum. Liste.java içesisinde Liste yapısını barındıran Liste class'ı ile liste içerisine kaydedilecek öğrenci bilgilerini tutan düğümler için Ogrenciler class'ını oluşturdum. Liste class'ı içerisinde yukarıdaki methodlar bulunmaktadır.

Giris.java ise main methodunu barındıran dosyamız. Bu dosya üzerinden öğrenci bilgilerini tutan düğümleri, düğümleri taşıyan listeyi ve listenin yukarıda bahsedilen methodlarını kullanacağız. Kodlar aşağıdadır;

Liste.java dosyası kodları:

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author sskirat
 */

public class Liste {
    Ogrenci ilk = null, son = null, tmp = null;
   
    public void sona_ekle(String adi, int no, int vize, int genel){
        Ogrenci Ogr = new Ogrenci(adi, no, vize, genel);
       
        if (ilk == null){       // Liste boş ise
            ilk = Ogr;
            son = Ogr;
        }
        else {                  // Liste boş değilse
            son.sonraki = Ogr;
            son = Ogr;
        }
    }
   
    public void sondan_sil(){
       
        Ogrenci onceki = null;
        tmp = ilk;
       
        while (tmp != son){     // Listenin son elemanına kadar gel
            onceki = tmp;       // Sondan bir önceki elemanı bul
            tmp = tmp.sonraki;
        }
       
        if (ilk != null && ilk == son) {    // Eğer listede tek eleman varsa
            ilk = null;
            son = null;
        }
        else {                              // 2 ve üzeri eleman varsa
            onceki.sonraki = null;
            son = onceki;
        }
    }
   
    public void basa_ekle(String adi, int no, int vize, int genel){
        Ogrenci Ogr = new Ogrenci(adi, no, vize, genel);
       
        if (ilk == null){       // Liste boşsa
            ilk = Ogr;
            son = Ogr;
        }
        else {                  // Liste doluysa
            tmp = ilk;
            ilk = Ogr;
            ilk.sonraki = tmp;
            tmp = null;
        }
    }
   
    public void bastan_sil(){
        if (ilk != null){       // Listede eleman varsa
            tmp = ilk.sonraki;
            ilk = tmp;
            tmp = null;
        }
    }
   
    public void araya_ekle(String adi, int no, int vize, int genel, int sira){
        int t_dugum = ogrenci_say();
        Ogrenci Ogr = new Ogrenci(adi, no, vize, genel);
        Ogrenci Onceki;
        tmp = ilk;
       
        if (sira >= 1 && sira <= t_dugum){
            int sayac = 1;
           
            while(tmp != null){     // Listeyi sonuna kadar tara   
                if (sayac == sira){      // parametre ile belirlenen sıraya gelindiğinde
                    Ogr.sonraki = tmp.sonraki;
                    tmp.sonraki = Ogr;
                }
                tmp = tmp.sonraki;
                sayac++;
            }
        }
        else {
            System.out.println("HATA :Araya Ekleme İşlemi Yapılamıyor...!");
            System.out.println("Listede eleman olduğundan ya da yanlış bir değer");
            System.out.println("girmediğinizden emin olup tekrar deneyin.");
        }
    }
   
    public void nolu_ogr_sil (int numara){
        tmp = ilk;
        Ogrenci onceki;
       
        if (tmp != null && ilk.no == numara){       // Aradığımız numara ilk düğümde ise
            bastan_sil();
        }
        else {  
            onceki = ilk;
            tmp = ilk.sonraki;      // Numara ilk düğümde değilse 2. düğümden itibaren arıyoruz
           
            while (tmp != null){    
               
                if (tmp.no == numara){     
                    onceki.sonraki = tmp.sonraki;
                    onceki = null;
                    tmp = null;
                    break;
                }
               
                tmp = tmp.sonraki;
                onceki = onceki.sonraki;
            }
        }
    }
   
    public void listele(){
        tmp = ilk;
        while(tmp != null){
            System.out.println("Öğrenci Adı: "+ tmp.adi + "\t\tÖğrenci No: "+ tmp.no + "\t\tÖğrenci Vize: "+ tmp.vize + "\t\tÖğrenci Genel: "+ tmp.genel);
            tmp = tmp.sonraki;
        }
        System.out.println("\n");
        tmp = null;
    }
   
    public void yuksek_bul(){
        tmp = ilk;
        Ogrenci en_iyi = null;
        int yuksek = 0;
       
        while(tmp != null){
            if (tmp.vize > yuksek){
                yuksek = tmp.vize;
                en_iyi = tmp;
            }
            tmp = tmp.sonraki;
        }
        System.out.println("VİZESİ EN İYİ ÖĞRENCİ BİLGİLERİ");
        System.out.println("Öğrenci Adı: \t"+ en_iyi.adi);
        System.out.println("Öğrenci No: \t"+ en_iyi.no);
        System.out.println("Öğrenci Vize: \t"+ en_iyi.vize);
        System.out.println("Öğrenci Genel: \t"+ en_iyi.genel);
        System.out.println("\n");
    }
   
    public void ortalama_bul (){  // Genel sınav sonuçlarına göre aritmetik ortalamanın üzerindekiler geçer
        tmp = ilk;                 // Diğerleri kalır...
        double ortalama = 0.0;
        double toplam = 0.0;
        int sayac = 0;
        Liste Gecenler = new Liste();
        Liste Kalanlar = new Liste();
       
        while(tmp != null){
            toplam += tmp.genel;
            sayac++;
            tmp = tmp.sonraki;
        }
        tmp = ilk;
        ortalama = toplam / sayac;
       
        while(tmp != null){
            if (tmp.genel >= ortalama){
                tmp.durum = true;
               
                Gecenler.sona_ekle(tmp.adi, tmp.no, tmp.vize, tmp.genel);
            }
            else {
                tmp.durum = false;
               
                Kalanlar.sona_ekle(tmp.adi, tmp.no, tmp.vize, tmp.genel);
            }
        tmp = tmp.sonraki;
        }
        System.out.println("GEÇEN ÖĞRENCİLERİN LİSTESİ");
        Gecenler.listele();
       
        System.out.println("KALAN ÖĞRENCİLERİN LİSTESİ");
        Kalanlar.listele();
    }
   
    public int ogrenci_say(){
        int dugum_sayisi = 0;
        tmp = ilk;
        while (tmp!= null){
            dugum_sayisi++;
            tmp = tmp.sonraki;
        }
        return dugum_sayisi;
    }
   
}

class Ogrenci{
    String adi;
    int no, vize, genel;
    boolean durum;
    Ogrenci sonraki;
   
    Ogrenci(String adi, int no, int vize, int genel){
        this.adi = adi;
        this.no = no;
        this.vize = vize;
        this.genel = genel;
        this.sonraki = null;
    }
}


Giris.java dosyası kodları:

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * @author sskirat
 *
 * Ders : Veri Yapıları
 * Ödev : Tek Yönlü Bağlı Liste
 * Yapan: Selçuk Sinan KIRAT
 * No   : ........
 */

public class Giris {
    public static void main(String[] args){
        Liste ogrenciler = new Liste();
       
       
       
        ogrenciler.basa_ekle("Ahmet MEHMET", 2, 25, 75);
        ogrenciler.basa_ekle("Ali VELİ", 4, 46, 86);
        ogrenciler.sona_ekle("Selçuk S. KIRAT", 6, 34, 100);
        ogrenciler.sona_ekle("Hasan HÜSEYİN", 8, 80, 13);
       
        ogrenciler.araya_ekle("Aslan KAPLAN", 10, 100, 40, 3);
       
        ogrenciler.listele();
       
        ogrenciler.yuksek_bul();
       
        ogrenciler.ortalama_bul();
       
        System.out.println(ogrenciler.ogrenci_say());
    }
}



Program Çıktısı:

Öğrenci Adı: Ali VELİ       Öğrenci No: 4     Öğrenci Vize: 46     Öğrenci Genel: 86
Öğrenci Adı: Ahmet MEHMET   Öğrenci No: 2     Öğrenci Vize: 25     Öğrenci Genel: 75
Öğrenci Adı: Selçuk S. KIRAT   Öğrenci No: 6     Öğrenci Vize: 34     Öğrenci Genel: 100
Öğrenci Adı: Aslan KAPLAN   Öğrenci No: 10     Öğrenci Vize: 100     Öğrenci Genel: 40
Öğrenci Adı: Hasan HÜSEYİN   Öğrenci No: 8     Öğrenci Vize: 80     Öğrenci Genel: 13


VİZESİ EN İYİ ÖĞRENCİ BİLGİLERİ
Öğrenci Adı:     Aslan KAPLAN
Öğrenci No:     10
Öğrenci Vize:     100
Öğrenci Genel:     40


GEÇEN ÖĞRENCİLERİN LİSTESİ
Öğrenci Adı: Ali VELİ      Öğrenci No: 4     Öğrenci Vize: 46     Öğrenci Genel: 86
Öğrenci Adı: Ahmet MEHMET   Öğrenci No: 2     Öğrenci Vize: 25     Öğrenci Genel: 75
Öğrenci Adı: Selçuk S. KIRAT   Öğrenci No: 6     Öğrenci Vize: 34     Öğrenci Genel: 100


KALAN ÖĞRENCİLERİN LİSTESİ
Öğrenci Adı: Aslan KAPLAN   Öğrenci No: 10        Öğrenci Vize: 100     Öğrenci Genel: 40
Öğrenci Adı: Hasan HÜSEYİN   Öğrenci No: 8        Öğrenci Vize: 80     Öğrenci Genel: 13


5

------------------------------------------------------------------------
BUILD SUCCESS
------------------------------------------------------------------------

Proje Dosyalarını indirmek için tıklayınız.


YORUMLAR | Bu konuya toplam (0) yorum yapılmış


YORUM YAZ
Adınızı Girin:  * Doldurulması zorunludur



   Doğrulama Kodu


KATEGORİLER
  Genel (2)
  Güvenlik (1)
  Program (4)
  Windows (6)
  Mobil (2)
  Python 3.X (8)
  PARDUS (5)
  M.E.B. (1)
  Donanım (1)
  Java (2)
  Robotik (9)

SON YAZILARIM
  Veri Yapıları İkili Arama Ağacı / Binary Search Tree | 2019-12-08
  Java'da Tek Yönlü Bağlı Liste Yapısı Örneği | 2019-10-22
  Lego Mindstorms EV3'ü PARDUS 19 XFCE Üzerinde Python ile Programlama | 2019-08-21
  Python'da Dosyaya Erişme Kipleri | 2019-07-19
  Arduino ile L298N Entegresi ile DC Motor Kullanımı | 2019-04-14
  Arduino LCD Ekran Kullanımı | 2019-04-14
  mBot Blok Şekillerinin Anlamları | 2019-03-21
  mBot Simülasyon Uygulaması (V-REP) | 2019-03-14
  mBot Kullanımı (Ders Notu) | 2019-02-27
  Arduino IDE ile Arduino Programlama (Başlangıç Rehberi) | 2019-02-27