Anda di halaman 1dari 14

PRAKTIKUM ALGORITMA DAN STRUKTUR DATA

MODUL KE-3

LIST LINEAR
ARRAY & LINKED LIST

LABORATORIUM PEMROGRAMAN
PROGRAM STUDI TEKNIK INFORMATIKA
FAKULTAS TEKNIK
UNIVERSITAS MUHAMMADIYAH MALANG
2010
I. TUJUAN
Mahasiswa mampu :
1. Mengerti bagaimana model penyimpanan data menggunakan struktur data linier list
untuk array dan linked list.
2. Memahami model pengaksesan elemen dalam struktur data array dan linked list.
3. Mengerti dan menggunakan metode-metode standar di kelas array linear list linked list.

II. ALAT YANG DIGUNAKAN


Peralatan yang digunakan :
1. Perangkat PC yang terinstall Java
2. Editor Java

III. DASAR TEORI

IV. PROSEDUR PELAKSANAAN


Prosedur pelaksanaan praktikum adala sebagai berikut :
1. Mahasiswa menerima tugas yang diberikan oleh dosen/asisten
2. Mahasiswa mengerjakan tugas yang diberikan
3. Asisten/dosen menilai pekerjaan mahasiswa
V. LATIHAN

1. Program LARIK.java, berupa program array beserta operasinya.


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class LARIK {


static int[] Larik = new int[25];
static int ukuranLarik;
public static void main(String[] args) {
System.out.print("Berapa ukuran larik? ");
ukuranLarik = inputData();
for (int j=0; j<ukuranLarik; j++){
System.out.print("Masukkan larik ke-" + (j+1) + " ");
Larik[j] = inputData();
}
MAX();
MIN();
AVERAGE();
}
private static void AVERAGE() {
double average = 0.0;
for (int avg=0;avg<ukuranLarik; avg++) {
average = average + Larik[avg];
}
average = average / ukuranLarik;
System.out.println("Rata-rata bilangan dalam larik = " + average);
}
private static int inputData() {
BufferedReader bfr = new BufferedReader
(new InputStreamReader(System.in));
String angkaInput = null;
try {
angkaInput = bfr.readLine();
} catch (IOException e) {
e.printStackTrace();
}
int Data = Integer.valueOf(angkaInput).intValue();
return Data;
}
private static void MIN() {
int minimum = Larik[0];
for (int min=0; min < ukuranLarik; min++){
if (minimum > Larik[min]) {
minimum = Larik[min];
}
}
System.out.println("Bilangan terkecil dalam larik = " + minimum);
}
private static void MAX() {
int maximum = Larik[0];
for (int max=0; max < ukuranLarik; max++){
if (maximum < Larik[max]) {
maximum = Larik[max];
}
}
System.out.println("Bilangan terbesar dalam larik = " + maximum);
}
}
2. Class matriks
Terdiri dari method inputData(), bacaMatriks(),tambahkanMatriks(), tulisHasil().
- inputData() : digunakan untuk membaca input/masukan dari keyboard
- bacaMatriks() : digunakan untuk membaca elemen/isi matriks yang diinputkan.
- tambahkanMatriks() : digunakan untuk menambahkan tiap elemen matriks 1 dan
matriks 2.
- tulisHasil() : digunakan untuk menampilkan isi/elemen matrik hasil.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Matriks {
static int[][] Matriks1 = new int[10][10];
static int[][] Matriks2 = new int[10][10];
static int[][] MatriksHasil = new int[10][10];
static int ukuran;
public static void main(String[] args) {
System.out.print("Masukkan ukuran matriks : ");
ukuran = inputData();
bacaMatriks();
tambahkanMatriks();
tulisHasil();
}
private static void tulisHasil() {
System.out.println("\n\nMatrik Hasil Penjumlahan : ");
for (int i=0; i<ukuran; i++){
for (int j=0; j<ukuran; j++){
System.out.print(MatriksHasil[i][j] + " ");
}System.out.println("");
}
}
private static void tambahkanMatriks() {
for (int i=0; i<ukuran; i++){
for (int j=0; j<ukuran; j++){
MatriksHasil[i][j] = Matriks1[i][j] + Matriks2[i][j];
}
}
}
private static void bacaMatriks() {
System.out.println("Masukkan data Matrik 1 : ");
for (int i=0; i<ukuran; i++){
for (int j=0; j<ukuran; j++){
System.out.print("Matriks["+(i+1)+"]["+(j+1)+"]");
Matriks1[i][j] = inputData();
}
}
System.out.println("Masukkan data Matrik 2 : ");
for (int i=0; i<ukuran; i++){
for (int j=0; j<ukuran; j++){
System.out.print("Matriks["+(i+1)+"]["+(j+1)+"] :");
Matriks2[i][j] = inputData();
}
}
}
private static int inputData() {
BufferedReader bfr = new BufferedReader(new InputStreamReader(System.in));
String angkaInput = null;
try { angkaInput = bfr.readLine();}
catch (IOException e) {e.printStackTrace();}
int Data = Integer.valueOf(angkaInput).intValue();
2.
return Data;
}
}
3. class ArrayLinearList hasil implementasi dari interface LinearList
import java.util.*;
import utilities.*;

public class ArrayLinearList implements LinearList


{
protected Object [] element; // array of elements
protected int size; // number of elements in array
public ArrayLinearList(int initialCapacity)
{
if (initialCapacity < 1)
throw new IllegalArgumentException
("initialCapacity must be >= 1");
element = new Object [initialCapacity];
}
public ArrayLinearList()
{// use default capacity of 10
this(10);
}
public boolean isEmpty()
{return size == 0;}
public int size()
{return size;}
void checkIndex(int index)
{
if (index < 0 || index >= size)
throw new IndexOutOfBoundsException
("index = " + index + " size = " + size);
}
public Object get(int index)
{
checkIndex(index);
return element[index];
}
public int indexOf(Object theElement)
{
for (int i = 0; i < size; i++)
if (element[i].equals(theElement))
return i;
return -1;
}
public Object remove(int index)
{
checkIndex(index);
Object removedElement = element[index];
for (int i = index + 1; i < size; i++)
element[i-1] = element[i];

element[--size] = null; // enable garbage collection


return removedElement;
}
public void add(int index, Object theElement)
{
if (index < 0 || index > size)
throw new IndexOutOfBoundsException
("index = " + index + " size = " + size);
if (size == element.length)
element = ChangeArrayLength.changeLength1D(element, 2 * size);
for (int i = size - 1; i >= index; i--)
element[i + 1] = element[i];
element[index] = theElement;
size++;
}
}
4. Program dibawah ini menggunakan linkedlist yang sudah ada pada java.
import java.util.LinkedList;

public class SenaraiBerkaitTunggal {


private static LinkedList<Integer> l;
public static void main(String[] args) {
System.out.println("Program LINKEDLIST default bahasa Java.");
l = new LinkedList<Integer>();
Integer j = null;
int i;
System.out.println("starting...");
for (i = 0; i < 5; i++) {
j = new Integer((int) (Math.random() * 100));
l.addFirst(j);
System.out.println("add : " + j);
}
for (; i < 10; i++) {
j = new Integer((int) (Math.random() * 100));
l.addLast(j);
System.out.println("addLast : " + j);
}
for (i = 0; i < l.size(); i++)
System.out.println("get " + i + " : " + l.get(i));
for (i = 0; i < 5; i++)
System.out.println("remove : " + ((Integer) l.remove()));
while (!l.isEmpty())
System.out.println("removeLast : " + ((Integer) l.removeLast()));
System.out.println("Done ;-)");
}
}

5. Program dibawah ini adalah program untuk membuat single pointer.


public class pOneChildNode{
protected Object data;
// next merupakan pointer ke node berikutnya.
protected pOneChildNode next;
// Konstruktor 1.
public pOneChildNode(){
next = null;
data = null;
}
// Konstruktor 2.
public pOneChildNode(Object d,pOneChildNode n){
data = d;
next = n;
}
// Pengaturan nilai pointer next.
public void setNext(pOneChildNode n){next = n; }
// Pengaturan nilai data.
public void setData(Object d){data = d; }
// Mengambil nilai pointer next.
public pOneChildNode getNext(){return next; }
// Mengambil nilai data yang tersimpan dalam Node.
public Object getData(){return data; }
// Mengubah nilai data ke bentuk String.
public String toString(){
return ""+data;
}
}
6. Program dibawah ini adalah program untuk membuat double pointer.
public class pTwoChildNode {
protected String data;
protected pTwoChildNode left, right;
public pTwoChildNode() {
data = null;
left = right = null;
}
public pTwoChildNode(String d) {
data = d;
left = right = null;
}
public void setLeft(pTwoChildNode l) {
left = l;
}
public void setRight(pTwoChildNode r) {
right = r;
}
public void setData(String d) {
data = d;
}
public pTwoChildNode getLeft() {
return left;
}
public pTwoChildNode getRight() {
return right;
}
public Object getData() {
return data;
}

public String toString() {


return "" + data;
}
}

7. Program single linked list dan operasinya


import pOneChildNode;
public class pLinkedList{
protected pOneChildNode head;
protected int number;
public pLinkedList(){
head = null;
number = 0;
}
public boolean isEmpty(){
return head == null;
}
public int size(){
return number;
}
public void insert(Object obj){
head = new pOneChildNode(obj,head);
number++;
}
public Object remove(){
if(isEmpty())
return null;
pOneChildNode tmp = head;
head = tmp.getNext();
number--;
return tmp.getData();
}
public void insertEnd(Object obj){
if(isEmpty())
insert(obj);
else{
pOneChildNode t = head;
while(t.getNext() != null)
t=t.getNext();
pOneChildNode tmp =
new pOneChildNode(obj,t.getNext());
t.setNext(tmp);
number++;
}
}
public Object removeEnd(){
if(isEmpty())
return null;
if(head.getNext() == null)
return remove();
pOneChildNode t = head;
while(t.getNext().getNext() != null)
t = t.getNext();
Object obj = t.getNext().getData();
t.setNext(t.getNext().getNext());
number--;
return obj;
}
public Object peek(int n){
pOneChildNode t = head;
for(int i = 0;i<n && t != null;i++)
t = t.getNext();
return t.getData();
}
}

8. Program double linked list dan operasinya


Import pTwoChildNode;
import java.lang.String;
import java.util.*;
public class pDoublyLinkedList {
private pTwoChildNode head, tail;
protected long num;
protected pTwoChildNode getHead() { return head; }
protected pTwoChildNode getTail() { return tail; }
protected void setHead(pTwoChildNode p) { head = p; }
protected void setTail(pTwoChildNode p) { tail = p; }
public pDoublyLinkedList() {
setHead(new pTwoChildNode());
setTail(new pTwoChildNode());
getTail().setLeft(head);
getHead().setRight(tail);
num = 0;
}
public long size() { return num; }
public boolean isEmpty() { return num == 0; }
public void addHead(String o) {
pTwoChildNode p = new pTwoChildNode(o);
p.setLeft(getHead());
p.setRight(getHead().getRight());
getHead().setRight(p);
p.getRight().setLeft(p);
num++;
}
public Object removeHead() {
Object o = null;
if (!isEmpty()) {
pTwoChildNode p = getHead().getRight();
getHead().setRight(p.getRight());
p.getRight().setLeft(getHead());
o = p.getData();
num--;
}return o;
}
public void addTail(String o) {
pTwoChildNode p = new pTwoChildNode(o);
p.setRight(getTail());
p.setLeft(getTail().getLeft());
getTail().setLeft(p);
p.getLeft().setRight(p);
num++;
}
public Object removeTail() {
Object o = null;
if (!isEmpty()) {
pTwoChildNode p = getTail().getLeft();
getTail().setLeft(p.getLeft());
p.getLeft().setRight(getTail());
o = p.getData();
num--;
}return o;
}
public void add(String o) { addHead(o); }
public Object remove() { return removeHead(); }
public Enumeration<Object> elementsHeadToTail() {
return new Enumeration<Object>() {
pTwoChildNode p = getHead();
public boolean hasMoreElements() {
return p.getRight() != getTail();
}
public Object nextElement() {
synchronized (pDoublyLinkedList.this) {
if (hasMoreElements()) {
p = p.getRight();
return p.getData();
}
}
throw new NoSuchElementException("pDoublyLinkedList Enumeration");
}
};
}
public Enumeration<Object> elementsTailToHead() {
return new Enumeration<Object>() {
pTwoChildNode p = getTail();
public boolean hasMoreElements() {
return p.getLeft() != getHead();
}
public Object nextElement() {
synchronized (pDoublyLinkedList.this) {
if (hasMoreElements()) {
p = p.getLeft();
return p.getData();
}
}
throw new NoSuchElementException(
"pDoublyLinkedList Enumeration");
}
};
}

}
9. Tes program single linked list
import pLinkedList;
public class TestLinkedList {
public static void main(String[] args){
pLinkedList l = new pLinkedList();
Integer j = null;
int i;
System.out.println("starting...");
for(i=0;i<5;i++){
j = new Integer((int)(Math.random() * 100));
l.insert(j);
System.out.println("insert: " + j);
}
for(;i<10;i++){
j = new Integer((int)(Math.random() * 100));
l.insertEnd(j);
System.out.println("insertEnd: " + j);
}
for(i=0;i<l.size();i++)
System.out.println("peek "+i+": "+l.peek(i));
for(i=0;i<5;i++)
System.out.println("remove: " + ((Integer)l.remove()));
while(!l.isEmpty())
System.out.println("removeEnd: " + ((Integer)l.removeEnd()));
System.out.println("Done ;-)");
}
}

10. Tes program double linked list


Import pDoublyLinkedList;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Enumeration;
public class TestDoublyLinkedList {
private static pDoublyLinkedList list;
public static void main(String[] args) {
list = new pDoublyLinkedList();
System.out.println("PROGRAM DOUBLY LINKED LIST : ");
System.out.print("Ada berapa data? ");
int cacahData = inputData();
String data;
for(int i=1;i<=cacahData;i++){
System.out.print("Masukkan kalimat Anda : ");
data = bacaData();
masukList(data);
}
isiList();
}
private static Integer inputData() {
BufferedReader bfr = new BufferedReader(
new InputStreamReader(System.in));
String angkaInput = null;
try {
angkaInput = bfr.readLine();
} catch (IOException e) {
e.printStackTrace();
}
int Data = Integer.valueOf(angkaInput).intValue();
return Data;
}
private static void isiList() {
System.out.print("Mau tulis dari belakang-depan (1) atau depan-belakang (9) : ");
int kendali = inputData();
System.out.println("Isi list :");
if (kendali == 1) {
int i = 1;
Enumeration<Object> e = list.elementsHeadToTail();
while (e.hasMoreElements())
System.out.println("Kalimat " +(i++) + " : " + ((String) e.nextElement())+ " ");
}
if (kendali == 9) {
int i = 1;
Enumeration<Object> e = list.elementsTailToHead();
while (e.hasMoreElements())
System.out.println("Kalimat " + (i++) + " : " + ((String) e.nextElement())+ " ");
}
}
private static void masukList(String data) {
list.addHead(data);
}
private static String bacaData() {
String data = null;
BufferedReader bfr = new BufferedReader(
new InputStreamReader(System.in));
String stringInput = null;
try {
stringInput = bfr.readLine();
} catch (IOException e) {
e.printStackTrace();
}
data = String.valueOf(stringInput);
return data;
}
}
VI. TUGAS PRAKTIKUM
1. Modifikasi program pada latihan 2 dengan menambahkan method sesuai ADT berikut ini :
AbstractDataType Matrix
{
instances
array 2 dimensi dengan n baris dan m kolom
operations
kurang_matriks(M1,M2): mengurangi tiap elemen matriks 1 dengan
elemen matriks2
salin_matriks(M1,M2) : memberikan semua nilai dari matriks 1 ke
matriks 2
perkalian_matriks(M1,M2) : mengalikan semua nilai pada matriks 1
ke matriks 2 dimana kolom matriks 1 harus sama dengan baris pada
matriks 2
}

Buatlah menu pilihan yang dapat ditentukan oleh user untuk memilih operasi atau method
mana yang akan dipanggil. Misal pilihan 1 untuk penambahan matriks, pilihan 2 untuk
perkalian matriks, pilihan 5 untuk keluar, dan seterusnya.

2. Buatlah program simulasi daftar nama dan alamat dengan single atau double linked list
Algoritma Program :
- Program meminta user untuk memilih operasi yang ingin dikerjakan : operasi
tambah(1), operasi hapus(2), operasi cetak(3).
- Jika pilihan 1 maka user akan menambahkan data pada linked list dengan nama dan
alamat. Kemudian ada pertanyaan apakah user ingin menambahkan data lagi, jika ya
maka akan diulang lagi begitu seterusnya sampai user menjawab tidak dan kembali ke
menu awal.
- Jika pilihan 2 maka user akan menghapus data pada linked list sesuai dengan nama yang
dimasukkan. Kemudian ada pertanyaan apakah user ingin menghapus data lagi, jika ya
maka akan diulang lagi begitu seterusnya sampai user menjawab tidak atau elemen yang
ada pada linked list habis. selanjutnya kembali ke menu awal.
- Jika pilihan 3 maka user akan mencetak/menampilkan semua data pada linked list.

3. Buatlah sebuah class TestArrayLinearList untuk menjalankan class ArrayLinearlist. Pada


class TestArrayLinearList lakukan pengaksesan pada default constructor, kemudian lakukan
operasi berikut :
isEmpty();
add(0,2);
add(1,6);
add(0,1);
add(2,4);
size();
indexOf(4);
indexOf(3);
get(0);
get(3);
remove(1);
remove(2)
isEmpty();
size();

VII. HASIL PRAKTIKUM


[Tuliskan source code dan hasil tugas praktikum di sini]

VIII. KESIMPULAN

Anda mungkin juga menyukai