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
) dari trilogi pemrograman IF ITB
(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






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