LAPORAN ALGORITMA DAN STRUKTUR DATA II (6)

LAPORAN PRAKTIKUM
ALGORITMA DAN STRUKTUR DATA II
MODUL I
LINKED LIST

Disusun Oleh :
Syukur Jaya Mendrofa
201501072
Kelas: C

Dosen Pengampu :
Oskar Ika Adi Nugroho, ST., MT

JURUSAN SISTEM INFORMASI
SEKOLAH TINGGI ILMU KOMPUTER “YOS SUDARSO”
PURWOKERTO
2016

BAB I
Dasar Teori
SEJARAH SINGKAT LINK LIST

Dikembangkan tahun 1955-1956 oleh Allen Newell, Cliff Shaw dan Herbert Simon di
RAND Corporation sebagai struktur data utama untuk bahasa Information Processing
Language (IPL). IPL dibuat untuk mengembangkan program artificial intelligence, seperti
pembuatan Chess Solver.
PENGERTIAN LINK LIST
Linked list (list bertaut) adalah salah satu struktur data dasar yang sangat fundamental
dalam bidang ilmu komputer. Dengan menggunakan linked list maka programmer dapat
menimpan datanya kapanpun dibutuhkan. Linked list mirip dangan array, kecuali pada linked
list data yang ingin disimpan dapat dialokasikan secara dinamis pada saat pengoperasian
program (run-time).
JENIS-JENIS LINKED LIST


Singly linked list



Double linked list




Circular Linked List

Linked list (one way list) adalah suatu kumpulan elemen data (yang disebut sebagai node)
dimana urutannya ditentukan oleh suatu pointer.
Setiap elemen (node) dari suatu linked list terdiri atas dua bagian, yaitu :
o INFO, berisi informasi tentang elemen data yang bersangkutan.
o NEXT (link field/next pointer field), berisi alamat dari elemen (node) selanjutnya
yang dituju.
Berikut ini sebuah contoh linked list yang terdiri atas 4 node :
start

info

next

info

next


info

next

info

next
null

node ke-1

node ke-2

node ke-3

node ke-4

Pada node ke-4 field NEXT-nya berisi NULL, artinya node ke-4 tsb. adalah node terakhir.

BAB II

Pembahasan
Program 01 :
#include
#include
#include
using namespace std;
struct Node //tipe data abstrak “struct” dengan nama Node
{
int data; //nama dan tipe data dari member “Node”
struct Node* next; // nama dan tipe data dari member “Node”, menggunakan pointer.
};
struct Node* head; // variabel global yang bisa dipanggil dimana saja, didalam dan
diluar fungsi utama.
void Insert(int x){
struct Node* temp = (Node*)malloc(sizeof(struct Node)); // mengalokasikan memory yang
akan digunakan yaitu sesuai dengan jumlah atau nilai x yang akan di masukkan.
Node* temp sama artinya dengan new Node ( ); yaitu mengalokasikan memory node baru
yang akan masuk berikutnya.
temp->data = x;
temp->next = head;

head = temp;
}
void print(){
struct Node* temp = head;
printf("Senarainya adalah : ");
while (temp != NULL)
{
printf("%d", temp->data);
temp = temp->next;
}
printf("\n");

}
int main()
{
head = NULL; //listnya masih kosong
printf("Berapa panjang listnya? \n");
int n, i, x;
scanf("%d", &n);
for (i = 0; i < n; i++){

printf("Masukan bilangan listnya \n");
scanf("%d", &x);
Insert(x); //memanggil fungsi void Insert(int x)
print(); // memanggil fungsi void print( )
}
system("pause");
return 0;
}

Hasil Output :

Analisa program 01
Program ini merupakan program untuk menyisipkan simpul baru, dimana simpul baru selalu
disisipkan pada awal senarai berantai atau setelah head senarai :
Masuk pada fungsi utama :
int main()
{
head = NULL
printf("Berapa panjang listnya? \n"); //memasukkan berapa panjang list yang akan dibuat,
di sini saya memasukkan 5


Sehingga memori mengalokasikan sebanyak 5. Jadi n = 5 sehingga pengulangan for akan
berhenti apabila i < n atau 0 < 0 False, jadi pengulangannya adalah 5,4,3,2,1 sebanyak 5 kali.
for (i = 0; i < n; i++){
printf("Masukan bilangan listnya \n");
scanf("%d", &x);
Insert(x);
print();

Proses memasukkan bilangan pertama yaitu angka 5.
Sehinga output menampilkan Senarainya adalah : 5

Proses menyisipkan bilangan 4.
Sehinga output menampilkan Senarainya adalah : 45

Proses menyisipkan bilangan 3.
Sehinga output menampilkan Senarainya adalah : 345

Proses menyisipkan bilangan 2.
Sehinga output menampilkan Senarainya adalah : 2345


Proses menyisipkan bilangan 1.
Sehinga output menampilkan Senarainya adalah : 12345

Fungsi void print ( ) merupakan fungsi untuk menampilkan tiap simpul dan senarai yang
telah dan akan dimasukkan:








struct Node* temp = head; yaitu memanggil/mengalokasikan alamat/link tiap simpul
yang baru akan disisipkan dimana alamat tersebut diinisialisasikan menjadi kepala atau
head.
while (temp != NULL) merupakan proses pengulangan yang akan memanggil data dari
link tiap simpul yang baru disisipkan.
printf("%d", temp->data) menampilkan data dari link-link semua simpul yang telah

disisipkan, ini merupakan bagian dari proses pengulangan while.
temp = temp->next; menginisialisasi alamat/link ke simpul berikutnya yang akan
dimasukkan, ini merupakan bagian dari proses pengulangan while.
printf("\n"); ketika fungsi while “False”.

Program 02 :
#include
#include
#include
using namespace std;
struct Node
{
int data;
struct Node* next;
};
struct Node* head;
void Insert(int data, int n){
Node* temp1 = new Node();
temp1->data = data;
temp1->next = NULL;

if (n == 1){
temp1->next = head;
head = temp1;
return;
}
Node* temp2 = head;
for (int i = 0; i < n - 2; i++){
temp2 = temp2->next;
}
temp1->next = temp2->next;
temp2->next = temp1;
}
void print(){
Node* temp = head;
while (temp != NULL){
printf("%d", temp->data);
temp = temp->next;

}
printf("\n");

}
int main()
{
head = NULL; //listnya masih kosong
Insert(2, 1);

//list : 2

Insert(3, 2);

//list : 2,3

Insert(4, 1);

//list : 4,2,3

Insert(5, 2);

//list : 4,5,2,3

print();
system("pause");
return 0;
}
Hasil Outputnya :

Analisa program 02








program ini merupakan program untuk menyisipkan 2 buah nilai, yaitu dari pertama
masuk angka 2, kemudian angka 3. Sehingga angka kedua yang akan dimasukkan
merupakan kepala/head.
Pertama sekali program masuk pada fungsi utama yaitu head = NULL; yaitu menyatakan
nilai dari head = null.
Kemudian memanggil fungsi void Insert(int data, int n) Insert(2, 1); dimana nilai
data=2 dan n=1. Angka 2 menjadi kepala sekaligus ekor pada tahap pertama ini. Karena
n=1.
Kemudian Insert(3, 2); dimana nilai data=3 dan n=2. Angka 2 menjadi kepala dan ekor
yaitu data=3 dari tahap pertama. Karena n=2.
Insert(4, 1); dimana nilai data=4 dan n=1. Angka 4 menjadi kepala Angka 3 menjadi
bagian tengah dan ekor yaitu data=2 dari tahap pertama. Karena n=1.



Kemudian Insert(5, 2); dimana nilai data=5 dan n=2. Angka 4 menjadi kepala dan posisi
tengah yaitu 5 dan 2, ekornya yaitu data=3 dari tahap pertama. Karena n=2.

BAB III
Kesimpulan
Linked List atau Struktur Berkait atau Senarai Berantai, yaitu cara menyimpan data secara
terstruktur sehingga programmer dapat secara otomatis menciptakan suatu tempat baru untuk
menyimpan data kapan saja diperlukan. Sebuah pointer menunjuk simpul terkiri dan setiap
simpul mempunyai pointer yang menunjuk ke simpul berikutnya. Pointer pada simpul
terakhir tidak menunjuk kemana-mana maka berisi NULL. Setiap node pada linked list
mempunyai field yang berisi pointer ke node berikutnya, dan juga memiliki field yang berisi
data. Node terakhir akan menunjuk ke NULL yang akan digunakan sebagai kondisi berhenti
pada saat pembacaan isi linked list.
Simpul pada linked list terdiri dari dua komponen utama yaitu:
1. Data yaitu bisa berupa satu elemen data atau beberapa elemen data.
2. Pointer yang menunjuk ke simpul lain.
Ada beberapa aturan yang didefinisikan pada operasi didalam linked list, yaitu :
Jika P adalah suatu variabel pointer, maka nilainya adalah alamat atau lokasi dari variabel lain
yang dituju.
Operasi yang didefinisikan pada suatu variabel pointer adalah :
1. Test apakah sama dengan NULL.
2. Test untuk kesamaan dengan variabel pointer lain.
3. Menetapkan sama dengan NULL.
4. Menetapkan menuju ke node lain.
Notasi yang didefinisikan sehubungan dengan operasi diatas adalah :
1. NODE(P), artinya node yang ditunjuk oleh pointer P.
2. INFO(P), artinya nilai INFO dari node yang ditunjuk pointer P.
Ada dua hal yang menjadi kerugian dengan representasi suatu data dengan linked list ini,
yaitu
 Diperlukan ruang tambahan untuk menyatakan/tempat field pointer.
 Diperlukan waktu yang lebih banyak untuk mencari suatu node dalam linked list.
Sedangkan keuntungannya adalah :
 Jenis data yang berbeda dapat di-link.
 Operasi REMOVE atau INSERT hanya dilakukan dengan mengubah pointer-nya Saja.