top of page

Circular Linked List

May 21, 2021
3 min read

Circular Linked List ini tidak memiliki ujung akhir, karena pointer next simpul terakhirny (tail) yang seharusnya null diarahkan kembali ke simpul paling depan (head), sehingga membentuk sambungan yang melingkar seperti rantai. Setiap simpul dalam circular linked list bisa menjadi titik awal proses traversal (pembacaan/penelusuran). Circular Linked List dapat dibuat menggunakan single linked list, atau pun double linked list.


Contoh Program:


Source Code appCircularLinkedList


package pkgCircularLinkedList;
import java.util.Scanner;
public class appCircularLinkedList {
    
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        cNode nd;
        cCircularLinkedList cll = new cCircularLinkedList(null);
        int pilih = 0;
        do{
            System.out.println("");
            System.out.println("MENU CIRCULAR LINKED LIST");
            System.out.println("1. Tambah Node");
            System.out.println("2. Hapus Node");
            System.out.println("3. Cari Nama");
            System.out.println("4. Cetak Linked List");
            System.out.println("5. Bagi Kata");
            System.out.println("6. Exit");
            System.out.print("Pilih : ");
            pilih = s.nextInt();
            switch(pilih){
                case 1:
                    System.out.println("");
                    System.out.println("TAMBAH DATA MAHASISWA");
                    System.out.println("1. Menjadi Data Pertama");
                    System.out.println("2. Menjadi Data Terakhir");
                    System.out.print("Pilih : ");
                    pilih = s.nextInt();
                    if(pilih==1||pilih==2){
                        System.out.println("");
                        System.out.print("Nama Mahasiswa: ");
                        String nm = s.next();
                        System.out.print("NPM Mahasiswa : ");
                        String p = s.next();
                        System.out.print("IPK Mahasiswa : ");
                        double i = s.nextDouble();
                        nd = new cNode(nm,p,i);
                        if(pilih == 1)cll.addBack(nd);
                        else if(pilih == 2)cll.addBack(nd);
                    }else
                        System.out.println("Pilihan tidak tersedia");
                    break;
                case 2:
                    System.out.println("");
                    System.out.println("HAPUS DATA MAHASISWA");
                    System.out.println("1. Hapus Data Pertama");
                    System.out.println("2. Hapus Data terakhir");
                    System.out.print("Pilih : ");
                    pilih = s.nextInt();
                    if(pilih == 1){
                        cll.delFront();
                    }else if(pilih == 2){
                        cll.delBack();
                    }else
                        System.out.println("Pilihan Tidak Tersedia");
                    break;
                case 3:
                    System.out.println("");
                    System.out.print("Masukkan nama mahasiswa yang dicari : ");
                    String m = s.next();
                    cll.search(m);
                    break;
                case 4:
                    cll.print();
                    break;
                case 5:
                    System.out.println("");
                    System.out.println("BAGI KATA");
                    System.out.print("Masukkan kata : ");
                    String kata = s.next();
                    System.out.print("Masukkan nama untuk karakter pertama : ");
                    String pertama = s.next();
                    cll.dividedWord(kata, pertama);
                    break;
                case 6:
                    System.out.println("Terimakasih");
            }
        }while(pilih!=6);
    }

Source Code cCircularLinkedList

package pkgCircularLinkedList;
import java.util.Scanner;
public class cCircularLinkedList {
    Scanner s = new Scanner(System.in);
    cNode head,tail;
    int jNode;
        cCircularLinkedList(cNode n){
            head = tail = n;
            jNode = 0;
        }
    public void addFront(cNode baru){
        if(head == null){
        head = tail = baru;
    }else{
        head.prev = baru;
        baru.next = head;
        head = baru;
    }
    jNode++;
    System.out.println("Penambahan Sukses");
    }
    public void delFront(){
        if(head == null)
            System.out.println("Linked List Kosong");
        else if(head.next == null){
            head = tail = null;
            System.out.println("Penghapusan Sukses");
        }else{
            cNode t = head.next;
            head.next = null;
            //t.prev = null;
            head = t;
            head.prev = null;
            System.out.println("Penghapusan Sukses");
        }
    }
    public void addBack(cNode baru){
        if(tail == null){
            head = baru;
            tail = baru;
        }else{
            baru.prev = tail;
            tail.next = baru;
            tail = baru;
        }
        System.out.println("Penambahan Berhasil");
    }
    public void delBack(){
        if(head == null)
            System.out.println("LinkedList Kosong");
        else{
            cNode t = tail.prev;
            tail.prev = null;
            tail = t;
            tail.next = null;
            System.out.println("");
        }
    }
    public void search(String n){
        cNode t;
        boolean ketemu = false;
        for(t = head; t != null; t = t.next){
        if(t.getNama().equalsIgnoreCase(n)){
            ketemu = true;
            System.out.println("");
            System.out.println("Data Mahasiswa Tersedia");
            System.out.println("Nama:"+t.getNama());
            System.out.println("NPM :"+t.getNPM());
            System.out.println("IPK :"+t.getIPK());
        }
    }
        if(ketemu == false)
            System.out.println("Data Mahasiswa tidak tersedia");
    }
    public void print(){
        System.out.println("");
        System.out.println("Isi Circular Linked List");
        System.out.println("Mundur :");
        for(cNode t = head; t!= null; t = t.next){
            System.out.print(t.getNama()+"\t");
            System.out.print(t.getNPM()+"\t");
            System.out.print(t.getIPK()+"\t");
        }
        System.out.println("");
        System.out.println("Maju :");
        for(cNode t = tail; t!= null; t = t.prev){
            System.out.print(t.getNama()+"\t");
            System.out.print(t.getNPM()+"\t");
            System.out.print(t.getIPK()+"\t");
    }
        System.out.println("");
    }
    public void dividedWord(String k, String n){
        int jkata = k.length();
        boolean ketemu = false;
        if(head == null){
            System.out.println("Data Kosong");    
        }else{
            for(cNode h = head; h != null; h = h.getNext()){
                if(h.getNama().equalsIgnoreCase(n)){
                    ketemu = true;
                    cNode t = h;
                    for(int i = 0; i<jkata; i++){
                        System.out.println(k.charAt(i)+":"+t.getNama()+"\t("+t.getNPM()+")");
                        if(t.getNext() != null) t = t.getNext();
                        else t = head;
                    }
                }
            }
            if(ketemu == false)
                System.out.println("Data Mahasiswa tidak ditemukan");
        }
    }

Source Code cNode

package pkgCircularLinkedList;
public class cNode {
    private String nama;
    private String npm;
    private double ipk;
    cNode prev, next;
    
    cNode(String n, String p, double i){
        nama = n;
        npm = p;
        ipk = i;
        next = null;
        System.out.println("object node"+n+"dibuat\n");
    }
    public void setNama(String n){
        nama = n;
    }
    public void setNPM(String p){
        npm = p;
    }
    public void setIPK(double i){
        ipk = i;
    }
    public void setNext(cNode n){
        next = n;
    }
    public String getNama(){
        return nama;
    }
    public String getNPM(){
        return npm;
    }
    public double getIPK(){
        return ipk;
    }
    public cNode getNext(){
        return next;
    }
}

Hasil Program


Comments


Don't forget to visit my other Social Media

  • Pinterest
  • Instagram

© 2023 by Radinplace. Proudly created with Wix.com

bottom of page