irfan fatahuddin- linked list

17
PEMROGRAMAN DAN STRUKTUR DATA “LINKED LIST” DISUSUN OLEH IRFAN FATAHUDDIN (D41113035) JURUSAN ELEKTRO

Upload: irfan-fathuddin

Post on 02-Feb-2016

27 views

Category:

Documents


0 download

DESCRIPTION

memuat materi linked list sebagai dasar dari pemrograman

TRANSCRIPT

Page 1: Irfan Fatahuddin- Linked List

PEMROGRAMAN DAN STRUKTUR DATA

“LINKED LIST”

DISUSUN OLEH

IRFAN FATAHUDDIN

(D41113035)

JURUSAN ELEKTRO

FAKULTAS TEKNIK UNIVERSITAS HASANUDDIN

TAHUN AJARAN 2014/2015

Page 2: Irfan Fatahuddin- Linked List

BAB I

PENDAHULUAN

A. LATAR BELAKANG

Kajian struktur data merupakan kajian yang sangat penting dalam bidang elektro dan

informatika. Dan di zaman sekarang ini yang teknologinya semakin berkembang, dibutuhkan

struktur data yang efisien yang dapat meningkatkan kinerja program.

Salah satu bentuk struktur data yang berisi kumpulan data yang tersusun secara

sekuensial, saling bersambungan, dinamis dan terbatas adalah linked list (senarai berkait).

Suatu linked list adalah suatu simpul (node) yang dikaitkan dengan simpul yang lain dalam

suatu urutan tertentu. Suatu simpul dapat berbentuk suatu struktur atau class. Simpul harus

mempunyai satu atau lebih elemen struktur atau class yang berisi data.

Secara teori, linked list adalah sejumlah node yang dihubungkan secara linier dengan

bantuan pointer. Dikatakan single (singly) linked apabila hanya ada satu pointer yang

menghubungkan setiap node. single artinya field pointer-nya hanya satu buah saja dan satu

arah.

Linked list adalah struktur data yang paling dasar. Linked list terdiri atas sejumlah unsur-

unsur dikelompokkan, atau terhubung, bersama-sama di suatu deret yang spesifik. Linked list

bermanfaat di dalam memelihara koleksi-koleksi data, yang serupa dengan array.

Bagaimanapun juga, linked list dan array mempunyai perbedaan. Pada makalah ini, kita akan

membahas secara umum tentang linked list.

B. TUJUAN

1. Memahami defenisi dari linked list

2. Memahami jenis-jenis linked list

3. Memahami operasi-operasi pada linked list

4. Mampu membuat program yang berhubungan dengan linked list

C. BATASAN MASALAH

Bahasa pemrograman yang digunakan pada makalah ini adalah C++.

Page 3: Irfan Fatahuddin- Linked List

BAB II

ISI

A. PENGERTIAN LINKED LIST

Linked List (senarai berantai) adalah suatu struktur data linier. Berbeda dengan array yang

juga merupakan struktur data linier dan tipe data komposit, linked list dibentuk secara

dinamik. Pada saat awal program dijalankan elemen linked list belum data. Elemen linked

list (disebut node) dibentuk sambil jalan sesuai instruksi. Apabila setiap elemen array dapat

diakses secara langsung dengan menggunakan indeks, sebuah node linked list diakses dengan

menggunakan pointer yang mengacu (menunjuk) ke node tersebut.

B. JENIS-JENIS LINKED LIST

a. Single Linked List

Tempat yang disediakan pada satu area memori tertentu untuk menyimpan data dikenal

dengan sebutan node atau simpul. Setiap node memiliki pointer yang menunjuk ke

simpul berikutnya sehingga terbentuk satu untaian, dengan demikian hanya diperlukan

sebuah variabel pointer. Susunan berupa untaian semacam ini disebut Single Linked List

(NULL memilik nilai khusus yang artinya tidak menunjuk ke mana-mana. Biasanya

Linked List pada titik akhirnya akan menunjuk ke NULL).

Pembuatan Single Linked List dapat menggunakan 2 metode:

- LIFO (Last In First Out), aplikasinya : Stack (Tumpukan)

- FIFO (First In First Out), aplikasinya : Queue (Antrean)

b. Double Linked List

Salah satu kelemahan single linked list adalah pointer (penunjuk) hanya dapat bergerak

satu arah saja, maju/mundur, atau kanan/kiri sehingga pencarian data pada single linked

list hanya dapat bergerak dalam satu arah saja. Untuk mengatasi kelemahan tersebut,

dapat menggunakan metode double linked list. Linked list ini dikenal dengan nama

Linked list berpointer Ganda atau Double Linked List.

C. OPERASI-OPERASI PADA LINKED LIST

a. Penyisipan

Penyisipan di belakang

Page 4: Irfan Fatahuddin- Linked List

Dalam hal ini simpul-simpul baru yang ditambahkan selalu akan menjadi simpul

terakhir. Ilustrasi penambahannya digambarkan pada gambar di bawah. Pointer awal

adalah pointer yang menunjuk ke simpul pertama, pointer akhir menunjuk ke simpul

terakhir dan pointer Baru adalah simpul yang akan ditambahkan (gambar a).

Untuk menyambung simpul yang ditunjuk oleh Akhir dan Baru, pointer pada

simpul yang ditunjuk oleh simpul Akhir dibuat sama dengan Baru (gambar b),

kemudian pointer Akhir dibuat sama dengan pointer Baru (gambar c). (Eva. 2013, hal

41)

Penyisipan di depan

Secara garis besar operasi penambahannya bisa dijelaskan sebagai berukut.

Pertama kali pointer pada simpul yang ditunjuk oleh pointer Baru dibuat sama dengan

Awal (gambar b). Kemudian Awal dibuat sama dengann Baru (gambar c). Dengan

demikian simpul baru akan selalu diperlakukan sebagai simpul pertama dalam senarai

berantai. (Eva. 2013, hal 42)

Page 5: Irfan Fatahuddin- Linked List

Penyisipan di tengah

Untuk menambah simpul ditengah senarai berantai, diperlukan bantuan sebuah

pointer lain, misalnya bantu. Dalam hal ini simpul baru akan diletakkan setelah

simpul yang ditunjuk oleh pointer bantu.

Pertama kali tentukan dimana simpul baru akan ditambahkan, yaitu dengan

menempatkan pointer Bantu pada suatu tempat. Kemudian pointer pada simpul yang

ditunjuk oleh Baru dibuat sama dengan pointer pada simpul yang ditunjuk oleh Bantu

(gambar b). Selanjutnya pointer pada simpul yang ditunjuk oleh simpul Bantu dibuat

sama dengan Baru (gambar c). (Eva. 2013, hal.44)

b. Penghapusan

Dalam menghapus simpul ada satu hal yang harus diperhatikan, yaitu bahwa simpul

yamg bisa dihapus adalah simpul yang berada sesudah simpul yang ditunjuk oleh suatu

pointer, kecuali untuk simpul pertama.

Menghapus simpul pertama

Untuk menghapus simpul pertama, maka pointer Bantu dibuat sama dengan pointer

Awal (gambar a). Kemudian pointer Awal dipindahkan ke simpul yang ditunjuk oleh

Page 6: Irfan Fatahuddin- Linked List

pointer pada simpul yang ditunjuk oleh pointer Bantu (gambar b). Selanjutnya simpul

yang ditunjuk oleh pointer Bantu di dispose (gambar c). (Eva.2013, hal.45)

Menghapus simpul di tengah atau terakhir

Untuk menghapus simpul yang ada ditengah senarai berantai, pertama kali

letakkan pointer Bantu pada simpul di sebelah kiri simpul yang akan dihapus. Simpul

yang akan dihapus ditunjuk dengan pointer lain, misalnya Hapus (gambar a).

Kemudian pointer pada simpul yang ditunjuk oleh Bantu ditunjukkan pada simpul

yang ditunjuk oleh pointer pada simpul yang akan dihapus (gambar b). Selanjutnya

simpul yang ditunjuk pointer Hapus di dispose (gambar c). (Eva.2013, hal 46)

D. CONTOH PROGRAM LINKED LIST

Flowchart

Page 7: Irfan Fatahuddin- Linked List

Tampilkan semua data

Stop

Tambahkan data di sebelah kiri

Hapus data paling depan

Hapus data paling belakang

Input data baru

START

Tampilkan OpsiInsert kiriInsert kananHapus depanHapus belakangTampilkanselesai

Input Pilihan

Tambahkan data di sebelah kiri

Input data baru

If pilihan =1

If pilihan =2

If pilihan =3

If pilihan =4

If pilihan =5

If pilihan =6

Page 8: Irfan Fatahuddin- Linked List

Listing Program

#include<iostream>

#include<conio.h>

#include<stdio.h>

#include<malloc.h>

using namespace std;

void buat_baru();

void insert_kiri();

void insert_kanan();

void hapus_depan();

void hapus_belakang();

void tampil();

struct simpul

{

int data;

struct simpul *next;

}

*baru,*awal=NULL, *akhir=NULL, *hapus, *temp;

int main()

{

int pilihan;

awal:

printf("\nMENU SINGLE LINKED LIST\n");

printf("1. Insert Kiri\n");

printf("2. Insert Kanan\n");

printf("3. Hapus Depan\n");

printf("4. Hapus Belakang\n");

printf("5. Tampilkan\n");

printf("6. Selesai\n");

printf("Pilihan Anda : ");

Page 9: Irfan Fatahuddin- Linked List

scanf("%d",&pilihan);

if (pilihan==1)

{

insert_kiri();

tampil();

}

if(pilihan==2)

{

insert_kanan();

tampil();

}

if(pilihan==3)

{

hapus_depan();

tampil();

}

if(pilihan==4)

{

hapus_belakang();

tampil();

}

if(pilihan==5)

{

tampil();

}

if(pilihan==6)

{

return 0;

}

goto awal;

}

void buat_baru()

Page 10: Irfan Fatahuddin- Linked List

{

baru=(simpul*)malloc(sizeof(struct simpul));

cout<<"Masukan Data : ";cin>>baru->data;

baru->next=NULL;

}

void insert_kanan()

{

buat_baru();

if(awal==NULL)

{

awal=baru;

}

else

{

akhir->next=baru;

}

akhir=baru;

akhir->next=NULL;

cout<<endl<<endl;

}

void insert_kiri()

{

buat_baru();

if(awal==NULL)

{

awal=baru;

akhir=baru;

akhir->next=NULL;

}

else

{

baru->next=awal;

Page 11: Irfan Fatahuddin- Linked List

awal=baru;

}

cout<<endl<<endl;

}

void hapus_depan()

{

if(awal==NULL)

cout<<"Kosong";

else

{

hapus=awal;

awal=awal->next;

free(hapus);

}

cout<<endl<<endl;

}

void hapus_belakang()

{

if(awal==NULL)

cout<<"Kosong";

else if(awal==akhir)

{

hapus=awal;

awal=awal->next;

free(hapus);

}

else

{hapus=awal;

while(hapus->next!=akhir)

hapus=hapus->next;

akhir=hapus;

hapus=akhir->next;

Page 12: Irfan Fatahuddin- Linked List

akhir->next=NULL;

free(hapus);

}

cout<<endl<<endl;

}

void tampil()

{

if(awal==NULL)

{

cout<<"kosong";

}

else

{

temp=awal;

while(temp!=NULL)

{

cout<<" Data : "<<temp->data<<"";

temp=temp->next;

}

}

getch();

}

Page 13: Irfan Fatahuddin- Linked List

BAB III

PENUTUP

A. KESIMPULAN

1. Linked List adalah salah satu bentuk struktur data, berisi kumpulan data (node) yang

tersusun secara sekuensial, saling sambung-menyambung, dinamis dan terbatas.

2. Ada 2 jenis linked list, yaitu single linked list dan double linked list.

3. Operas-operasi pada linked list yaitu Penyisipan (depan, belakang, tengah) dan

penghapusan (depan, belakang, tengah).

B. DAFTAR PUSTAKA

Yulianti, Eva. 2013. Satuan Acara Perkuliahan.

http://apriliyatiwen.blogspot.com/2013/04/linked-list.html

http://andriansukses.blogspot.com/2014/01/makalah-struktur-data-linked-list.html

http://windafandella.blogspot.com/2013/05/contoh-program-menu-linked-list-insert.html

Page 14: Irfan Fatahuddin- Linked List

LAMPIRAN

- Listing program yang ditampilkan pada makalah ini harus decompile menggunakan

aplikasi DEV C++. Apa bila kita compile dengan MINGW, hasilnya error (tidak bisa

tercompile).