/** * Praktikum 7 - Implementasi LinkedList * * Kelas ini digunakan untuk mempermudah kegiatan praktikum mata kuliah * Struktur Data dan Algoritma di Program Studi Teknik Informatika, * Fakultas Teknologi Informasi, Universitas YARSI. * * Berbeda dengan kuliah pendahulunya, Dasar-Dasar Pemrograman, pada kuliah ini * fokus pada mengembangkan kemampuan mahasiswa untuk menggunakan struktur data * dan berbagai algoritma. Mahasiswa diasumsikan sudah memiliki pengetahuan * dasar untuk membuat program, sehingga memberikan berkas untuk mereka * ubah-ubah selama kegiatan Praktikum, tidak akan menghambat mahasiswa dalam * mencapai tujuan kuliah. * * Untuk menyelesaikan kegiatan Praktikum ini dengan baik, pastikan Anda * membaca instruksi Praktikum dengan baik dan benar. */ // diperlukan agar bisa menggunakan kelas NodeSDA selama Praktikum import fti.ti.sda.NodeSDA; //diperlukan agar bisa menggunakan kelas LinkedListSDA selama Praktikum import fti.ti.sda.LinkedListSDA; /** * @author [tulis nama Anda disini] * @version 1.01 * * Praktikum ini bertujuan untuk memperkenalkan Anda dengan proses analisis * algoritma menggunakan waktu eksekusi. * * Pastikan nama berkas dan kelas sesuai dengan instruksi Praktikum. */ public class Praktikum7 { /** * Jangan ubah method ini kecuali ketika Anda menyesuaikan nama kelas! * * Method yang pertama kali dipanggil ketika kelas ini eksekusi. * @param args Argumen yang diberikan pengguna saat menjalankan program */ public static void main(String[] args){ // membuat sebuah LinkedListSDA baru yang hanya akan menyimpan data // dengan tipe Integer (wrapper class dari tipe int). LinkedListSDA list = new LinkedListSDA(); Praktikum7.add(1, list); // tambahkan 1 ke dalam list Praktikum7.add(2, list); // tambahkan 2 ke dalam list Praktikum7.add(20, list); // tambahkan 20 ke dalam list Praktikum7.removeLast(list); // hapus node terakhir dari list Praktikum7.add(10, list); // tambahkan 10 ke dalam list Praktikum7.add(2, 5, list); // sisipkan 5 pada indeks ke 2 Praktikum7.add(3, 7, list); // sisipkan 7 pada indeks ke 3 Praktikum7.add(40, list); // tambahkan 40 ke dalam list Praktikum7.add(5, 12, list); // sisipkan 5 pada indeks ke 12 Praktikum7.add(6, 14, list); // sisipkan 6 pada indeks ke 14 Praktikum7.removeLast(list); // hapus node terakhir dari list Praktikum7.add(15, list); // tambahkan 15 ke dalam list Praktikum7.add(16, list); // tambahkan 15 ke dalam list Praktikum7.remove( list.size() - 2, list); // hapus node terakhir ke 2 dari list Praktikum7.removeFirst(list); // hapus node pertama dari list Praktikum7.add(100, list); // tambahkan 100 ke dalam list Praktikum7.remove( list.size() - 1, list); // hapus node terakhir dari list list.print(); // cetak isi dari list // tampilkan keluaran yang diharapkan jika semua method sudah // dimplementasikan dengan benar System.out.println("Keluaran yang diharapkan:"); System.out.println("[2, 5, 7, 10, 12, 14, 16]"); } /** * Jangan ubah method ini! * * Menyimpan data yang diberikan ke dalam LinkedList. Gunakan method ini * sebagai hint untuk menyelesaikan method-method lainnya dalam kelas ini. * @param data Data yang akan disimpan ke dalam LinkedList * @param list LinkedList yang akan diubah strukturnya */ public static void add(Integer data, LinkedListSDA list) { // membuat NodeSDA baru yang menyimpan data yang diberikan NodeSDA newNode = new NodeSDA(data); // mengambil alamat node terakhir dalam list NodeSDA last = list.getLast(); last.next = newNode; // next dari node terakhir menunjuk ke node baru newNode.prev = last; // prev dari node baru menunjuk ke node terakhir /* * Pastikan untuk memanggil method ini setiap kali ada perubahan * struktur LinkedList, seperti penambahan atau pengurangan node dalam * list. * * Method ini akan menghitung jumlah elemen dalam list dan memindahkan * posisi last ke elemen terakhir. */ list.updateReferences(); } /** * Menyisipkan data yang diberikan ke dalam LinkedList pada index yang * ditentukan. Baca method add(Integer, LinkedListSDA) untuk * mendapatkan hint. * @param index Posisi di mana data baru akan disisipkan dalam LinkedList * @param data Data yang akan disimpan ke dalam LinkedList * @param list LinkedList yang akan diubah strukturnya */ public static void add(int index, Integer data, LinkedListSDA list) { // Jangan menghapus kode berikut! // logika dalam method ini tidak bisa digunakan untuk menambahkan node // di akhir dari LinkedList if(index == list.size()) { // panggil method untuk menambahkan node di akhir LinkedList Praktikum9.add(data, list); return; // proses penambahan selesai, kembali ke pemanggil } // ---- silahkan tambahkan kode Anda di bawah baris ini } /** * Jangan ubah method ini kecuali ketika Anda menyesuaikan nama kelas! * * Menghapus node pertama dari dalam LinkedList. * @param list LinkedList yang akan diubah strukturnya */ public static void removeFirst(LinkedListSDA list) { // manfaatkan method remove yang sudah ada untuk menghapus node pertama Praktikum7.remove(0, list); } /** * Menghapus node terakhir dari dalam LinkedList. Node terakhir tidak * memiliki node lain setelahnya sehingga logika untuk menghapusnya dari * LinkedList berbeda dari mekanisme menghapus yang biasa. * @param list LinkedList yang akan diubah strukturnya */ public static void removeLast(LinkedListSDA list) { // ---- silahkan tambahkan kode Anda di bawah baris ini } /** * Menghapus node yang ditunjuk oleh index dari dalam LinkedList. Kecuali * ketika menghapus node terakhir, node lainnya selalu menunjuk node lain * pada prev- dan next-nya. * @param index Posisi yang akan dihapus dari LinkedList * @param list LinkedList yang akan diubah strukturnya */ public static void remove(int index, LinkedListSDA list) { // Jangan menghapus kode berikut! // jika yang dihapus adalah node terakhir if(index == list.size() - 1) { // panggil method untuk menghapus node terakhir Praktikum7.removeLast(list); return; // proses penghapusan selesai, kembali ke pemanggil } // ---- silahkan tambahkan kode Anda di bawah baris ini } }