Jumat, 10 Mei 2013

Struktur Data - Linked List pada Java

Di bawah ini merupakan coding linked list pada Java NetBeans
Semoga bermanfaat :)
import java.util.Scanner;

public class LinkedListExample {

 public static void main(String[] args) {
  Scanner input = new Scanner(System.in);
  proses diproses = new proses();
  int inputan;
  System.out.print("Masukkan Banyak Node = ");
  inputan = input.nextInt();
  for (int i = 0; i < inputan; i++) {
   System.out.print("masukkan data = ");
   int item = input.nextInt();
   diproses.inproses(item);
  }
  System.out.println("===========CETAK===========");
  diproses.bacaproses();
  System.out.println();
  System.out.println("---------------------------");
  int pilihan;
  System.out.println("1. Untuk Menambah dan Menghapus data");
  System.out.println("0. Untuk Keluar");
  System.out.print("Masukkan Pilihan : ");
  pilihan = input.nextInt();
  System.out.println("---------------------------");
  while (pilihan == 1) {
   System.out.print("insert data depan = ");
   int tambahh = input.nextInt();
   diproses.tambahDepan(tambahh);
   System.out.println("===========CETAK===========");
   diproses.bacaproses();
   System.out.println();
   System.out.println("---------------------------");
   System.out.print("insert data belakang = ");
   int tambel = input.nextInt();
   diproses.tambahBelakang(tambel);
   System.out.println("===========CETAK===========");
   diproses.bacaproses();
   System.out.println();
   System.out.println("---------------------------");
   int key;
   System.out.print("key = ");
   key = input.nextInt();
   int baru;
   System.out.print("masukkan data baru = ");
   baru = input.nextInt();
   diproses.tambahDimanapun(baru, key);
   System.out.print("============cetak===========");
   System.out.println();
   diproses.bacaproses();
   System.out.println();
   System.out.println("---------------------------");
   System.out.print("======Hapus Data Depan======");
   System.out.println();
   diproses.deleltefirst();
   diproses.bacaproses();
   System.out.println();
   System.out.println("---------------------------");
   System.out.print("=====Hapus Data Belakang=====");
   System.out.println();
   diproses.deleteLast();
   diproses.bacaproses();
   System.out.println();
   System.out.println("---------------------------");
   System.out.print("=======Hapus Satu Data=======");
   System.out.println();
   int key2;
   System.out.print("Tulis data yang akan dihapus = ");
   key2 = input.nextInt();
   diproses.delete(key2);
   diproses.bacaproses();
   System.out.println();
   System.out.println("---------------------------");
   System.out.println("1. Untuk lanjut memproses data");
   System.out.println("0. Untuk Keluar");
   System.out.print("Masukkan Pilihan : ");
   pilihan = input.nextInt();
   if (pilihan == 0) {
    System.out.println("=======Terima kasih=======");
   }
  }
  System.out.println("=======Terima kasih=======");

 }
}

class Node {
 int data;
 Node berikut; // pointer

 public Node() {
 }

 public Node(int dt) {
  data = dt;
  berikut = null;
 }
}

class proses { // untuk mengolah data (linked list)
 Node depan;
 Node belakang;

 public boolean isKosong() { // memisalkan sebuah wadah kosong (Linked List-nya)
  if ((depan == null) && (belakang == null)) {
   return true;
  } else {
   return false;
  }
 }

 // untuk memproses data yang diinput dari keyboard
 public void inproses(int item) {
  Node p = new Node(item); // Node p adalah nodebaru
  if (isKosong()) {
   depan = belakang = p;
  } else {
   belakang.berikut = p;
   belakang = p;
  }
 }

 public void tambahDepan(int item) {
  Node p = new Node();
  p.data = item;
  if (isKosong()) {
   belakang = depan = p;
   p.berikut = null;
  } else {
   p.berikut = depan;
  }
  depan = p;
 }

 public void tambahBelakang(int item) {
  Node p = new Node();
  p.data = item;
  if (isKosong()) {
   depan = belakang = p;
  } else {
   belakang.berikut = p;
  }
  belakang = p;
  belakang.berikut = null;
 }

 public void tambahDimanapun(int item, int key) {
  Node temp = depan;
  Node p = new Node();
  p.data = item;
  do {
   if (temp.data == key) {
    p.berikut = temp.berikut;
    temp.berikut = p;
    break;
   }
   temp = temp.berikut;
  } while (temp != null);
 }

 public void deleltefirst() {
  Node temp = depan;
  if (!isKosong()) {
   if (depan == belakang) {
    depan = belakang = null;
   } else {
    depan = depan.berikut;
    temp = null;
   }
  } else {
   System.out.println("Data Kosong");
  }
 }

 public void deleteLast() {
  Node temp = depan;
  if (!isKosong()) {
   if (depan == belakang) {
    depan = belakang = null;
   } else {
    while (temp.berikut != belakang) {
     temp = temp.berikut;
    }
    belakang = temp;
    temp.berikut = null;
   }
  } else {
   System.out.println("Data Kosong");
  }
 }

 public void delete(int key2) {
  Node temp = depan;
  if (!isKosong()) { // 1
   while (temp != null) {
    if (temp.berikut.data == key2) { // 2
     temp.berikut = temp.berikut.berikut;
     break;
    }
    if (key2 != temp.data) { // jika key yang dimasukkan salah
     System.out.println("Data yang anda masukkan salah ");
     break;
    } else if ((temp.data == key2) && (temp == depan)) { // 2 //3 //untuk key yang letaknya di depan
     if ((depan != null) && (belakang != null)) {
      if (depan == belakang) { // 4 //jika hanya terdiri 1 data
       depan = belakang = null;
      } else { // 4
       depan = depan.berikut; // jika terdiri dari beberapa data
       temp = null;
      }
     }
     break;
    } else {
     temp = temp.berikut; // 3
    }
   }
  }
  else {
   System.out.println("Data Kosong"); // 1
  }
 }

 public void bacaproses() {// fungsinya untuk mencetak
  Node p;
  p = depan;
  while (p != null) {
   System.out.print(p.data + " ");
   p = p.berikut;
  }
 }
}

4 komentar: