Iseng: Linked-List Generik dan Stack Generik dengan Representasi Linked-List dalam Bahasa Java (bagian I)

Iseng-iseng ingin menambah daftar post, kali ini saya akan menyisipkan salah satu tugas mata kuliah S2 di Rekayasa Perangkat Lunak, IF-ITB. Mata kuliahnya Algoritma dan Pemrograman. Ya, sepintas namanya sama dengan mata kuliah yang pernah saya ambil saat tingkat satu kemarin, tapi ternyata setelah sang dosen (Pak Saiful) memberikan silabus kuliahnya tampaklah bahwa mata kuliah ini adalah lanjutan (lebih tepatnya ulangan dengan sudut pandang ala mahasiswa S2 :P ) dari trilogi pemrograman IF ITB :D (Algoritma dan Pemrograman, Algoritma dan Struktur Data, dan Pemrograman Beriorentasi Objek).

Materinya, karena masih awal-awal, banyak yang me-review kuliah S1 kemarin, termasuk tugas-tugasnya. Kebetulan tugas minggu ini adalah review OOP yang terkait dengan materi koleksi objek dan kelas generik. Hmm, berhubung saya jarang sekali mengkode program dalam Bahasa Java (lebih sering menggunakan Bahasa C dan keluarganya serta teknologi .NET), jadi tugas kemarin sekalian membiasakan saya dengan Bahasa Java. Judul post ini adalah tugasnya, dan sebenarnya akan dipakai untuk membuat kelas yang akan mengubah notasi operasi matematika infiks menjadi posfiks, lalu melakukan evaluasi terhadap notasi posfiks tadi dengan menggunakan stack. Tapi stack-nya harus dalam representasi linked-list.

Sebenarnya di Java sudah ada kelas-kelas koleksi objek tersebut (List, Stack, dan Queue/tidak dibahas di post ini) milik API Java, tapi pak dosen menyarankan mahasiswanya untuk mengkode sendiri koleksi objek yang diperlukan dalam tugas. So, here it is. Mudah-mudahan berguna bagi adik-adik tingkat saya yang nantinya akan mengambil kuliah Pemrograman Beriorientasi Objek atau siapa pun yang ingin mencoba-coba. Just, correct me if I wrong :)


/**
 *    @author     Aprian Diaz Novandi (13505102)
 *    @version    3.0
 *    @since      13 September 2008
 *    Implementasi kelas linked-list generic di Java
 */

package MyCollection;

import java.lang.NullPointerException;

public class MyList<t> {
    static class ElmtList<t> {
        //data
        private T info;
        //referensi ke elemen selanjutnya
        private ElmtList<t> next;

        public ElmtList() {
            info = null;
        }

        public ElmtList(T _info) {
            info = _info;
        }

        public T getInfo() {
            return info;
        }

        public ElmtList<t> getNext() throws NullPointerException {
            return next;
        }

        public void setNext(ElmtList<t> node) throws NullPointerException {
            next = node;
        }

        public String toString() {
            if(next == null)
                return "[" + info + "|X]";
            else
                return "[" + info + "]->";
        }
    }

    //elemen pertama list
    protected ElmtList<t> first;

    //ctor
    public MyList() { }

    public boolean isEmpty() {
        return first == null;
    }

    public ElmtList<t> getFirst() {
        return first;
    }

    public void insertFirst(ElmtList<t> node) {
        node.setNext(first);
        first = node;
    }

    public void insertLast(ElmtList<t> node) {
        if(first == null)
            first = node;
        else {
            ElmtList P = first;
            while(P.getNext() != null) {
                P = P.getNext();
            }
            P.setNext(node);
        }
    }

    public ElmtList<t> deleteFirst() {
        ElmtList<t> node = first;
        if(node != null) {
            first = node.getNext();
            node.setNext(null);
        }
        return node;
    }

    public ElmtList<t> deleteLast() {
        ElmtList<t> P = first, Prev = null, retval = null;
        if (P == null) {
            //list kosong
            retval = null;
        } else if(P.getNext() == null) {
            //elemen list hanya satu
            first = null;
            retval = P;
        } else {
            while(P.getNext() != null) {
                Prev = P;
                P = P.getNext();
            }
            retval = P;
            Prev.setNext(null);
            P = Prev;
        }
        return retval;
    }

    public String toString() {
        ElmtList<t> P = first;
        String retval = "";
        while(P.getNext() != null) {
            //cetak dan telusuri semua elemen
            retval += P.toString();
            P = P.getNext();
        }
        //cetak elemen terakhir
        retval += P.toString();
        return retval;
    }

    //driver, untuk pengujian
    public static void main(String[] args) {
        MyList<integer> L1 = new MyList<integer>();
        MyList<string> L2 = new MyList<string>();

        try {
            L1.insertFirst(new ElmtList<integer>(100));
            L1.insertFirst(new ElmtList<integer>(101));
            L1.insertFirst(new ElmtList<integer>(102));
            L1.deleteFirst();
            L2.insertFirst(new ElmtList<string>("aku"));
            L2.insertFirst(new ElmtList<string>("kamu"));
            L2.insertLast(new ElmtList<string>("dia"));
            L2.insertLast(new ElmtList<string>("mereka"));
            L2.deleteFirst();
            L2.deleteLast();
        } catch (NullPointerException e) {
            e.printStackTrace();
        } finally {
            System.out.println(L1);
            System.out.println(L2);
        }
    }
}

Bersambung.

-KnightDNA-

PS: Saya mengelompokkan koleksi-koleksi objek tadi dalam satu package bernama MyCollection

2 Tanggapan ke “Iseng: Linked-List Generik dan Stack Generik dengan Representasi Linked-List dalam Bahasa Java (bagian I)”


  1. 1 sulha 11 November 2008 pukul 12:35

    thanks bgt y k’

  2. 2 chichi 26 Juli 2009 pukul 15:04

    thanks ya buat ilmu nya..
    add ym ku ya blue_bhangetzzz@yahoo.com
    mau tanya2 mslh kul…
    tq


Tinggalkan Balasan




  • Full Name: Aprian Diaz Novandi
  • Place, date of birth: Tulungagung, East Java, April 12th 1988
  • Height/Weight: 5'9"/132.28 lbs
  • Blood type: B
  • Nationality: Indonesian
  • Residence: Bandung, West Java, Indonesia


  • View Aprian Diaz Novandi's profile on LinkedIn

    Click to view my Personality Profile page


 

September 2008
S S R K J S M
« Agu   Okt »
1234567
891011121314
15161718192021
22232425262728
2930  

Blog Stats

  • 2,152 hits

KnightDNA's Photos

Kamar Kos

Makan-Makan ARC

Di Monumen Perjuangan, Dipati Ukur

Makan-Makan di Hanamasa

Di Kamar Kos

More Photos