Anda di halaman 1dari 16

MODUL 1 SINGLE LINKED LIST DAN ARRAY

MODUL I
SINGLE LINKED LIST DAN ARRAY

1.1 TUJUAN
Tujuan dari praktikum ini adalah:
1. Mahasiswa mengetahui bagaimana mengimplementasikan array dalam
program.
2. Mahasiswa memahami dan mampu membuat single Linked List.
3. Mahasiswa dapat mengimplementasikan berbagai operasi yang terdapat pada
Linked List.
1.2 DASAR TEORI
1.2.1 Array
Array atau larik adalah suatu bentuk struktur data yang menampung suatu
data sejenis (bertipe data sama) yang diwakili oleh suatu nama variabel [1].
Deklarasi Array :
tipe_data nama_larik[index];
1. Array Satu Dimensi
Array satu dimensi merupakan kumpulan elemen yang terdiri atas satu baris.
Pendeklarasian suatu array harus diikuti oleh suatu indeks yang disediakan [1].
Deklarasi array :
nama_ tipe_data array[index];
2. Array Dua Dimensi
Array dua dimensi tersusun dalam bentuk baris dan kolom, dimana indeks
pertama menunjukkan baris dan indeks kedua menunjukkan kolom [1].
Deklarasi array :
tipe_data nama_array[index-1][index-2];
2. Array Dinamis
Array dinamis adalah array yang tidak mempunyai suatu jangkauan atau
ukuran yang tetap. Tetapi ketika program dijalankan maka memori untuk suatu
array dinamis dialokasikan ketika menugaskan suatu nilai kedua array [1].
Contoh deklarasi array :
static int dataktp [2][7][8][5];

PRAKTIKUM ALGORITMA DAN STRUKTUR DATA I-1


MODUL 1 SINGLE LINKED LIST DAN ARRAY
1.2.2 Single Linked List
Senarai berantai (linked list) adalah sekumpulan komponen yang dinamakan
dengan simpul. Setiap simpul (kecuali simpul terakhir) memuat alamat dari
simpul berikutnya. Jadi, setiap simpul didalam sebuah senarai berantai
mempunyai dua komponen, yaitu data yang digunakan untuk menyimpan
informasi relevan dan link yang digunakan untuk menyimpan alamat dari simpul
berikutnya dalam senarai berantai. Alamat dari simpul pertama disimpan didalam
lokasi yang terpisah, yang disebut dengan kepala (head atau first) [2].
Contoh :

10 20 30

Head data link tail NULL


Gambar 1.1 Senarai berantai
1. Operasi – Operasi yang ada pada Linked List
a. Membuat Node Baru
Pembuatan node baru merupakan pengalokasian node yang
menggunakan variabel pointer bertipe data “struct”. Fungsi “malloc ()”
adalah fungsi yang digunakan untuk pengalokasian memori node yang
baru. Berikut contoh pembuatan node baru dengan “*p” sebagai variabel
pointer “struct” [2].
p=(node*)malloc(sizeof(node));

“node” pada contoh diatas merupakan nama “struct”.


b. Menambah Node Baru
Adapun algoritma yang dilakukan untuk menambahkan node baru
adalah sebagai berikut :
1) Mendeklarasikan penunjuk bantu yang merujuk ke elemen baru yang
akan ditambah serta deklarasi list elemennya.
2) Mengarahkan penunjuk bantu (next) elemen (node baru) ke
elemen/node yang ingin ditambahkan. Ada 4 cara menambah node
antara lain :
a) Menambah node baru sebagai node awal.
b) Menambah node baru setelah node tertentu.
c) Menambah node baru sebelum node tertentu.
d) Menambah node baru sebagai node akhir.

PRAKTIKUM ALGORITMA DAN STRUKTUR DATA I-2


MODUL 1 SINGLE LINKED LIST DAN ARRAY
3) Mengarahkan penunjuk head ke elemen pertama/awal dan penunjuk
tail ke elemen terakhir dari indeks tersebut.
c. Menghapus Node
1) Delete first (L), operasi penghapusan simpul pertama dari list L.
2) Delete last (L), operasi penghapusan simpul terakhir dari list L.
3) Delete after (L, prev N), operasi penghapusan setelah node tertentu prev
N di-list L.
4) Penghapusan simpul tertentu
a) Delete node (L,N), operasi penghapusan simpul N dari list L.
b) Delete K node (L,K), operasi penghapusan simpul dengan key K dari
list L [2].

PRAKTIKUM ALGORITMA DAN STRUKTUR DATA I-3


MODUL 1 SINGLE LINKED LIST DAN ARRAY
1.3 PERMASALAHAN
1. Membuat program untuk menghitung hasil penjumlahan matriks menggunakan
array 2 dimensi, ukuran array dimasukkan secara dinamis.
2. Membuat program berdasarkan kejadian berikut.
Narto dan Saskeh adalah seorang sahabat, suatu hari ia dan 18 teman
lainnya pergi ke sebuah gunung angker. Narto dan temannya berjalan
membentuk sebuah barisan sejumlah 20 orang berada di barisan ke-3 dan
Saskeh berada di barisan ke-2. Ditengah perjalanan tiba-tiba orang yang berada
di barisan paling depan dan paling belakang menghilang dan akhirnya
menyebabkan barisan tersebut menjadi dua kubu. Kubu pertama dipimpin oleh
Narto terdiri dari orang yang berada pada barisan ganjil dan sisanya berada di
kubu Saskeh. Kemudian mereka melanjutkan perjalanan pada gunung tersebut
secara terpisah kemudian tanpa disadari terdapat seorang di kubu Narto pindah
ke kubu Saskeh dan sebaliknya, akibat hal tersebut kubu Narto dan Saskeh
mulai mengalami kesusahan untuk melanjutkan perjalanan karena konflik
semakin melebar, mereka mulai putus asa hingga akhirnya Narto dan Saskeh
memutuskan untuk bergabung untuk melakukan pendakian kembali, dalam
perjalanannya mereka menemukan 2 orang yang hilang dalam perjalanan tadi,
kemudian 2 orang tersebut kembali masuk ke tengah barisan dan akhirnya
mereka berhasil mencapai puncak gunung tersebut dengan anggota
lengkap.(70)

PRAKTIKUM ALGORITMA DAN STRUKTUR DATA I-4


MODUL 1 SINGLE LINKED LIST DAN ARRAY
1.4 HASIL DAN PEMBAHASAN
1.4.1 Membuat Array 2 Dimensi
1. Algoritma
a. Memasukkan jumlah batas yang diinginkan.
b. Mendeklarasikan array dengan indeks 10 baris dan 10 kolom pada array.
c. Mendeklarasikan array dengan indeks 10 baris dan 10 kolom pada Array.
d. Mendeklarasikan array dengan indeks 10 baris dan 10 kolom pada Hasil.
e. Memasukkan nilai pada tiap indeks pada masing-masing matriks.
f. Melakukan penjumlahan matriks A dan matriks B dengan cara
menjumlahkan nilai tiap indeks pada baris dan kolom yang sama.
g. Menampilkan hasil dari penjumlahan matriks A dan matriks B.
h. Selesai.
2. Source Code
import java.util.Scanner;
public class Modul1No1 {
public static void main (String[]args){
Scanner scan = new Scanner (System.in);

System.out.print("Masukkan Kolom : ");


int Kolom = scan.nextInt();
System.out.print("Masukkan Baris : ");
int Baris = scan.nextInt();
System.out.print("Masukkan Batas : ");
Batas = scan.nextInt();

int [][] array = new int [Baris][Kolom];


int [][] Array = new int [Baris][Kolom];
int [][] Hasil = new int [Baris][Kolom];
for(int i=0; i<Baris; i++){
for(int j=0; j<Kolom; j++){
System.out.print("Masukkan Nilai Matriks A ke
["+i+"]["+j+"] :");
array[i][j]=scan.nextInt();
}
}
for(int i=0; i<Baris; i++){
for(int j=0; j<Kolom; j++){
System.out.print("Masukkan Nilai Matriks B ke
["+i+"]["+j+"] :");
Array[i][j]=scan.nextInt();
}
}
System.out.println("Hasil Penjumlahan Matriks A dan B");
for(int i=0; i<Baris; i++){
for(int j=0; j<Kolom; j++){
Hasil[i][j]=array[i][j]+Array[i][j];
}
}
for(int i=0; i<Baris; i++){
for(int j=0; j<Kolom; j++){

PRAKTIKUM ALGORITMA DAN STRUKTUR DATA I-5


MODUL 1 SINGLE LINKED LIST DAN ARRAY
System.out.print(Hasil[i][j] + " ");
}
System.out.println();
}
}
}

2. Hasil Program

Gambar 1.2 Tampilan hasil run program penjumlahan array


1.4.2 Program Kejadian Mendaki Gunung
1. Algoritma
2. Source Code
public class Modul1No2{
class Node {
public int data;
public Node next;

public Node (int d){


data = d;
next = null;
}
}

public Node head, tail;


int size = 0;

public boolean isEmpty() {


return head == null;
}

public void addFirst(int newData){


Node newest = new Node (newData);
if (isEmpty()){
head = tail = newest;
}
else {
newest.next = head;
head = newest;
}
size++;
}
public void addLast(int newData){
Node newest = new Node (newData);
if (isEmpty()){
head = tail = newest;
}

PRAKTIKUM ALGORITMA DAN STRUKTUR DATA I-6


MODUL 1 SINGLE LINKED LIST DAN ARRAY
else{
tail.next = newest;
tail = newest;
}
size++;
}

public void addAfter(int newData, int afterData){


if (isEmpty()){
System.out.println("Masih kosong");
}
else {
Node current = head;
while(current!=null){
if(current.data==afterData){
break;
}
current=current.next;
}
if(current!=null){
Node newest = new Node (newData);
newest.next = current.next;
current.next = newest;
}
else{
addFirst(newData);
}
}
size++;
}

public void removeData(int rmvData){


if(isEmpty()){
}
else {
Node current=head;
Node temp=null;
while(current!=null){
if(current.next!=null &&current.next.data ==
rmvData){
temp=current.next;
break;
}
current=current.next;
}

if(temp==null){
}
else if(temp.data==tail.data){
tail=current;
tail.next=null;
}

else{
current.next=temp.next;
temp=null;
}
}
size--;
}

PRAKTIKUM ALGORITMA DAN STRUKTUR DATA I-7


MODUL 1 SINGLE LINKED LIST DAN ARRAY

public void removeFirst(){


Node current=head;
head=current.next;
current=null;
size--;
}

public int getInd (int index){


Node current=head;
int currentIndex=0;
while(current!=null){
if(currentIndex==index){
return current.data;
}
current=current.next;
currentIndex++;
}
return 0;
}

public int size(){


return size;
}

public void display(){


Node current = head;
while (current != null){
System.out.print(current.data + " ");
current = current.next;
}
}

public static void main(String[]args){


Modul1No2 link = new Modul1No2(); //Sasuke
Modul1No2 link1 = new Modul1No2(); //Naruto

for(int i=1; i<21; i++){


link.addLast(i);
}
System.out.println("Semua");
link.display();

System.out.println("\n\nPaling Depan dan Belakang


Menghilang");

link.removeFirst();
link.removeData(20);
link.display();

System.out.println("\n\nMenjadi Dua Kubu");


System.out.println("Kubu Naruto");
for(int i=3; i<20; i+=2){
link1.addLast(i);
link.removeData(i);
}

link1.display();
System.out.println("\nKubu Sasuke");
link.display();
System.out.println("\n\nKubu Naruto dan Sasuke

PRAKTIKUM ALGORITMA DAN STRUKTUR DATA I-8


MODUL 1 SINGLE LINKED LIST DAN ARRAY
Berpindah Pindah");
link1.addAfter(4,7);
link.removeData(4);
link1.addAfter(8,11);
link.removeData(8);
System.out.print("Kubu Naruto\n");
link.addAfter(5,10);
link1.removeData(5);
link.addAfter(9,12);
link1.removeData(9);
link1.display();
System.out.println("\nKubu Sasuke");
link.display();

System.out.println("\n\nSemua Kubu Menjadi Satu");


link1.tail.next=link.head;
link1.display();

System.out.println("\n\nSetelah Ketemu Yang Hilang");


link1.addAfter(1,18);
link1.addAfter(20,1);
link1.display();
}
}

3. Hasil program

Gambar 1.3 Tampilan hasil run program narto dan saske

PRAKTIKUM ALGORITMA DAN STRUKTUR DATA I-9


MODUL 1 SINGLE LINKED LIST DAN ARRAY
1.5 ANALISIS DATA
1.5.1 Program Array 2 Dimensi
import java.util.Scanner;
Script “import java.util.Scanner;” digunakan untuk mengaktifkan
fungsi “Scanner” untuk mengambil input-an dari keyboard.
public class Modul1No1 {
public static void main (String[]args){
Scanner scan = new Scanner (System.in);
Script “public class Modul1No1 {” merupakan nama dari class utama
dari program. Script “public static void main (String[]args){”

merupakan class main dimana class main adalah kelas yang akan dieksekusi
program. Script “Scanner scan = new Scanner (System.in);” berfungsi
untuk mendeklarasikan variabel “scan” agar menjadi variabel yang menyimpan
data baru.
int Batas;
Script “int Batas; ” merupakan pendekarasian suatu variabel yang
bernama “Batas” dengan tipe data “int”.
System.out.print("Masukkan Batas : ");
Batas = scan.nextInt();
Script “System.out.print("Masukkan Batas : ");” berfungsi untuk
menampilkan kalimat yang berada diantara tanda petik yaitu “Masukkan Batas
:”. Script “Batas = scan.nextInt();” berfungsi untuk menampung nilai dari
“scan.nextInt()” pada variabel “Batas” yang akan menjadi batas dari matriks.
int [][] array = new int [10][10];
int [][] Array = new int [10][10];
int [][] Hasil = new int [10][10];
Script “int [][] array = new int [10][10];” ini digunakan sebagai
cara untuk mendeklarasikan array dua dimensi, dimana tanda “[10][10]”
digunakan untuk menentukan nilai kolom dan baris sebuah matriks.
Script “int [][] Array = new int [10][10];” ini digunakan sebagai
cara untuk mendeklarasikan array dua dimensi, dimana tanda “[10][10]”
digunakan untuk menentukan nilai kolom dan baris sebuah matriks.
Script “int [][] Hasil = new int [10][10];” ini digunakan sebagai
cara untuk mendeklarasikan array dua dimensi, dimana tanda “[10][10]”
digunakan untuk menentukan nilai kolom dan baris sebuah matriks.

PRAKTIKUM ALGORITMA DAN STRUKTUR DATA I-10


MODUL 1 SINGLE LINKED LIST DAN ARRAY
for(int i=0; i<Batas; i++){
for(int j=0; j<Batas; j++){
System.out.print("Masukkan Nilai Matriks A ke
["+i+"]["+j+"] :");
array[i][j]=scan.nextInt();
}
}
Script “for(int i=0; i<Batas; i++){” dan script “for(int i=0;

i<Batas; i++){” digunakan sebagai perulangan untuk variabel “Batas”. Script


“System.out.print("Masukkan Nilai Matriks A ke["+i+"] ["+j+"]

:");” berfungsi untuk menampilkan kalimat yang berada diantara tanda petik
yaitu “Masukkan Nilai Matriks A ke :” kemudian diikuti dengan nilai
variabel “i” dan “j”. Script “array[i][j]=scan.nextInt();”digunakan untuk
meng-input nilai dari variabel “array[i][j]”.
for(int i=0; i<Batas; i++){
for(int j=0; j<Batas; j++){
System.out.print("Masukkan Nilai Matriks B ke
["+i+"]["+j+"] :");
Array[i][j]=scan.nextInt();
}
}
Script “for(int i=0; i<Batas; i++){” dan script “for(int i=0;

i<Batas; i++){” digunakan sebagai perulangan untuk variabel “Batas”. Script


“System.out.print("Masukkan Nilai Matriks B ke["+i+"] ["+j+"]

:");” berfungsi untuk menampilkan kalimat yang berada diantara tanda petik
yaitu “Masukkan Nilai Matriks B ke :” kemudian diikuti dengan nilai
variabel “i” dan “j”. Script “Array[i][j]=scan.nextInt();”digunakan untuk
meng-input nilai dari variabel “Array[i][j]”.
System.out.println("Hasil Penjumlahan Matriks A dan B");
for(int i=0; i<Batas; i++){
for(int j=0; j<Batas; j++){
Hasil[i][j]=array[i][j]+Array[i][j];}
}
Script “System.out.println("Hasil Penjumlahan Matriks A dan

B");” berfungsi untuk menampilkan kalimat yang berada diantara tanda petik
yaitu “Hasil Penjumlahan Matriks A dan B”. Script “for(int i=0;
i<Batas; i++){” dan script “for(int i=0; i<Batas; i++){” digunakan
sebagai perulangan untuk variabel “Batas”. Script “Hasil[i][j] =

array[i][j] + Array[i][j];” digunakan untuk menyimpan hasil penjumlahan


“array[i][j]” dengan “Array[i][j]” pada variabel “Hasil[i][j]”.

PRAKTIKUM ALGORITMA DAN STRUKTUR DATA I-11


MODUL 1 SINGLE LINKED LIST DAN ARRAY
for(int i=0; i<Batas; i++){
for(int j=0; j<Batas; j++){
System.out.print(Hasil[i][j] + " ");
}
System.out.println();
}
}
Script “for(int i=0; i<Batas; i++){” dan script “for(int i=0;
i<Batas; i++){” digunakan sebagai perulangan untuk variabel “Batas”. Script
“System.out.print(Hasil[i][j] + " ");” berfungsi untuk menampilkan
nilai dari variabel “Hasil[i][j]”. Script “System.out.println();” berfungsi
untuk membuat line baru pada program.

1.5.2 Program Narto dan Saske


public class Modul1No2{
class Node {
public int data;
public Node next;
Script “public class Modul1No2{” bla bla
Script “class Node {” bla bla
Script “public int data;” bla bla
Script “public Node next; ” bla bla
public Node (int d){
data = d;
next = null;
}
}
Script “public Node (int d){” bla bla
Script “data = d;” bla bla
Script “next = null;” bla bla
public Node head, tail;
int size = 0;
Script “public Node head, tail;” bla bla
Script “int size = 0; bla bla
public boolean isEmpty() {
return head == null;
}
Script “public boolean isEmpty() {” bla bla
Script “return head == null;” bla bla
public void addFirst(int newData){
Node newest = new Node (newData);
if (isEmpty()){
head = tail = newest;
}
Script “public void addFirst(int newData){” bla bla
Script “Node newest = new Node (newData);” bla bla
Script “if (isEmpty()){” bla bla
Script “head = tail = newest;” bla bla
else {
newest.next = head;
head = newest;}

PRAKTIKUM ALGORITMA DAN STRUKTUR DATA I-12


MODUL 1 SINGLE LINKED LIST DAN ARRAY
size++;
}
Script “else {newest.next = head;” bla bla
Script “head = newest;” bla bla
Script “next = null;” bla bla
Script “size++;” bla bla
public void addLast(int newData){
Node newest = new Node (newData);
if (isEmpty()){
head = tail = newest;
}
Script “public void addLast(int newData){” bla bla
Script “Node newest = new Node (newData);” bla bla
Script “if (isEmpty()){” bla bla
Script “head = tail = newest;” bla bla
else{
tail.next = newest;
tail = newest;
}
size++;
}
Script “else{ tail.next = newest;” bla bla
Script “tail = newest;” bla bla
Script “size++;” bla bla
public void addAfter(int newData, int afterData){
if (isEmpty()){
System.out.println("Masih kosong");
}
Script “public void addAfter(int newData, int afterData){” bla
bla
Script “if (isEmpty()){” bla bla
Script “System.out.println("Masih kosong");” bla bla
else {
Node current = head;
while(current!=null){
if(current.data==afterData){
break;
}
current=current.next;
}
Script “else { Node current = head;” bla bla
Script “while(current!=null){” bla bla
Script “if(current.data==afterData){ break;}” bla bla
Script “current=current.next;” bla bla
if(current!=null){
Node newest = new Node (newData);
newest.next = current.next;
current.next = newest;
}
Script “if(current!=null){” bla bla
Script “Node newest = new Node (newData);” bla bla
Script “newest.next = current.next;” bla bla
Script “current.next = newest;” bla bla
else{

PRAKTIKUM ALGORITMA DAN STRUKTUR DATA I-13


MODUL 1 SINGLE LINKED LIST DAN ARRAY
addFirst(newData);
}
}
size++;
}
Script “else{ addFirst(newData)” bla bla
Script “size++;” bla bla
public void removeData(int rmvData){
if(isEmpty()){
}
Script “public void removeData(int rmvData){” bla bla
Script “if(isEmpty()){” bla bla
else {
Node current=head;
Node temp=null;
while(current!=null){
if(current.next!=null &&current.next.data==rmvData){
temp=current.next;
break;
}
current=current.next;
}
Script “else { Node current=head;” bla bla
Script “Node temp=null;” bla bla
Script “while(current!=null){” bla bla
Script “if(current.next!=null &&current.next.data==rmvData){”
bla bla
Script “temp=current.next;” bla bla
Script “break;” bla bla
Script “current=current.next;” bla bla

PRAKTIKUM ALGORITMA DAN STRUKTUR DATA I-14


MODUL 1 SINGLE LINKED LIST DAN ARRAY
1.6 KESIMPULAN
Berdasarkan hasil praktikum yang telah dilakukan, dapat disimpulkan bahwa :
1. Array atau larik adalah kumpulan elemen data yang mempunyai susunan
tertentu yang teratur. Jumlah elemen array terbatas, dan semua elemennya
mempunyai tipe yang sama. Sedangkan single linked list merupakan sebuah
list yang elemennya hanya menyimpan informasi elemen setelahnya (next) dan
hanya memiliki pengait ke elemen berikutnya, yaitu 1 pengait. Sehingga jalan
pengaksesan list hanya dapat dilakukan secara maju, oleh karena itu hanya
dapat mengakses elemen berikutnya.
2.

DAFTAR PUSTAKA

PRAKTIKUM ALGORITMA DAN STRUKTUR DATA I-15


MODUL 1 SINGLE LINKED LIST DAN ARRAY
[1] A. S, Rosa. 2010. Modul Pembelajaran Struktur Data. Bandung: Modula.

[2] Friyadi. 2005. Panduan Pemrograman C++. Jakarta: Andi.

[3] Heriyanto, Abdul Kadir. 2005. Algoritma Pemrograman Menggunakan


C++. Yogyakarta: Andi.
[4] Nugroho, Adi. 2008. Algoritma dan Struktur Data Dalam Bahasa Java.
Yogyakarta: Andi.
[5] Rachmat C, Antonius. 2010. Algoritma dan Pemrograman dengan C.
Yogyakarta: Andi.

[6] Utama, Didit N, dan Riya Widayati. 2014. Algoritma dan Pemrograman
dengan Borland C++. Yogyakarta: Andi.

PRAKTIKUM ALGORITMA DAN STRUKTUR DATA I-16

Anda mungkin juga menyukai