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{ static class ElmtList { //data private T info; //referensi ke elemen selanjutnya private ElmtList next; public ElmtList() { info = null; } public ElmtList(T _info) { info = _info; } public T getInfo() { return info; } public ElmtList getNext() throws NullPointerException { return next; } public void setNext(ElmtList node) throws NullPointerException { next = node; } public String toString() { if(next == null) return "[" + info + "|X]"; else return "[" + info + "]->"; } } //elemen pertama list protected ElmtList first; //ctor public MyList() { } public boolean isEmpty() { return first == null; } public ElmtList getFirst() { return first; } public void insertFirst(ElmtList node) { node.setNext(first); first = node; } public void insertLast(ElmtList node) { if(first == null) first = node; else { ElmtList P = first; while(P.getNext() != null) { P = P.getNext(); } P.setNext(node); } } public ElmtList deleteFirst() { ElmtList node = first; if(node != null) { first = node.getNext(); node.setNext(null); } return node; } public ElmtList deleteLast() { ElmtList 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 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 L1 = new MyList (); MyList L2 = new MyList (); try { L1.insertFirst(new ElmtList (100)); L1.insertFirst(new ElmtList (101)); L1.insertFirst(new ElmtList (102)); L1.deleteFirst(); L2.insertFirst(new ElmtList ("aku")); L2.insertFirst(new ElmtList ("kamu")); L2.insertLast(new ElmtList ("dia")); L2.insertLast(new ElmtList ("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









