LIST BERKAIT(LINKED LIST)
Pertemuan : 13-14
Dosen Pembina : Danang Junaedi
Program Studi Teknik Informatika – Universitas Widyatama
1 IF-UTAMA
Tujuan Instruksional
Pendahuluan
Pembentukan List Berkait
Menampilkan Data pada List Berkait
Studi Kasus
Tugas Individu
Overview
2 IF-UTAMATujuan Instruksional
Mahasiswa akan dapat
Menjelaskan pengertian dan manfaat list berkait
Menjelaskan
pengelolaan
list
berkait
(Membentuk,
Menampilkan data, Mencari dan Menghapus data)
Mengimplementasikan
pengelolaan
list
berkait
(Membentuk,
Menampilkan
data,
Mencari
dan
Menghapus data)
3IF-UTAMA
Pendahuluan (1)
List atau disebut juga Pointer
variabel yang berisi alamat memori sebagai nilainya.
berisi alamat dari variabel yang mempunyai nilai tertentu.
tidak secara langsung berisi suatu nilai tetapi berisi alamat memori
dari nilai tersebut
Cara pendeklarasian :
Algoritma :
<nama variabel list berkait/pointer> : ^Data
C/C++:
<tipe data> *<nama variabel list berkait/pointer>
Jenis List/Pointer :
List Tunggal (Single List) terdiri dari maksimum 1 komponen yaitu
komponen yang mencatat alamat dari suatu nilai
4Pendahuluan (2)
IF-UTAMA 5
Contoh List Tunggal (Single List)
int I = 5;
int *IPointer;
IPointer = &I;
I 5 I IPointer 5 IPointer Alamat di memori I 5 I IPointer 5 0012FED4 IPointer 0012FED4 0012FED6 0012FED6 0012FED4Pendahuluan (3)
6
Pada umumnya suatu linked list memiliki sejumlah elemen, di mana salah satu
elemen yang paling awal (elemen kepala atau head) bersifat agak khusus dan
tidak digunakan untuk menyimpan data.
List Berkait (Linked List) terdiri dari 2 komponen utama yaitu komponen nilai/info
dari list itu sendiri dan komponen yang mencatat alamat dari suatu nilai/list
berikutnya.
Gambar Elemen Dasar Sebuah Linked List
Informasi
Pointer
Struktur ini terdiri atas rangkaian elemen yang saling berhubungan /berkaitan,
dimana setiap elemen dihubungkan dengan elemen lainnya, oleh sebuah pointer.
Jadi setiap elemen dalam linked list selalu berisi/mengandung pointer.
Pointer adalah sebuah sel dalam suatu elemen yang berfungsi sebagai penunjuk
letak elemen yang lain (nilainya merupakan alamat elemen yang lain).
Pendahuluan (4)
Jenis List/Pointer (Lanjutan):
Single Linked List
Contoh
Double Linked List
Multiple Linked List
di bahas pada mata kuliah Struktur Data &
Circular Linked List
Algoritma Lanjut
NULL berarti komponen yang mencatat alamat list
berikutnya bernilai kosong
Info Next_List NULL (kosong/List terakhir)
7
Pendahuluan (5)
8
Gambar Contoh sebuah List yang Berisi Beberapa Elemen List
Head
Info Next
Berikut ini diberikan contoh penulisan suatu struktur data list :
Algoritma
Type simpul= ^mylist
mylist = record
Info :char
Next : simpul
End
C/C++
typedef struct{
Info : char;
Next : simpul;
} mylist ;
Mylist *simpul;
Pembentukan List Berkait (1)
Pendeklarasian List struct <Nama List>{
<tipe data> <Nama Info>; <Nama List> *<Nama Pointer>; }; Contoh : a. Struct List{ int Info; List Next; }; Atau b. Struct Simpul{ int No_Urut; char Nama[25]; float IPK; Simpul *Berikutnya; };
Nama Info Nama Pointer Berisi Nilai dari List
Berisi alamat dari list berikutnya
Info Next
Berisi Nilai dari List
Berisi alamat dari list berikutnya
No_Urut Nama IPK Berikutnya
Berisi Nilai dari List
Berisi alamat dari list berikutnya
9
IF-UTAMA
Pembentukan List Berkait (2)
Pembentukan List Baru
<Nama List Baru> = new <Nama List> Contoh berdasarkan pendeklarasian di atas a. Baru = new List //perintah untuk membuat list baru
Baru -> Info =25 atau cin>>Baru -> info //Masukan data ke Info
b.Simpul Anyar = new Simpul //perintah untuk membuat Simpul baru Simpul Anyar -> No_Urut = 001 atau cin>> Simpul Anyar -> No_Urut Simpul Anyar -> Nama = “Saya” atau cin>> Simpul Anyar -> Nama Simpul Anyar -> IPK = 3.56 atau cin>> Simpul Anyar -> IPK
Operator untuk menunjukan posisi komponen yang sedang aktif/digunakan Algoritma : ^.
C/C++ : ->
25 / Nilai yang di-input-kan
001 Saya 3.56
10
IF-UTAMA
Pembentukan List Berkait (3)
Penambahan List Baru ke dalam Elemen List List Kosong (Awal/Head = NULL)
List Isi Tambah di Awal 25 Awal/Akhir 25 1. Awal = Baru 2. Akhir = Baru 3. Baru -> Next = NULL Baru Awal 1 2 Akhir 3 Awal/Head Awal 35
25 1. Baru -> Next = Awal
2. Awal = Baru Baru 35 25 2 1 Baru Akhir Akhir 11 IF-UTAMA
Pembentukan List Berkait (4)
List Isi (lanjutan)
Tambah di Akhir
1. Akhir -> Next = Baru 2. Akhir = Baru 3. Baru -> Next = NULL 45 Baru 25 Awal 35 3 2 45 Baru 25 Awal 35 1 Akhir Akhir 12 IF-UTAMA
Pembentukan List Berkait (5)
List Isi (lanjutan)
Tambah di Tengah
1. Telusuri dari posisi awal sampai ditemukan posisi yang sesuai atau posisi paling akhir (NULL) & gunakan Psbl (Pointer sebelum) dan Pnow (Pointer saat ini) sebagai pointer bantu penelusuran
Psbl = NULL ; Pnow = Awal
while (Pnow != NULL && <Posisi belum Sesuai>) {Psbl = Pnow ;Pnow = Pnow -> Next} 2. Psbl = Baru
3. Baru -> Next = Pnow
Awal Awal 15 Baru 25 35 3 2 1 45 15 Baru 25 35 PSbl 45 Pnow Akhir Akhir 13 IF-UTAMA
Menampilkan Data pada List Berkait
Telusuri dari posisi awal sampai ditemukan posisi paling akhir (NULL), Tampilkan & gunakan Pnow (Pointer saat ini) sebagai pointer bantu penelusuran
Pnow = Awal while (Pnow != NULL) {
cout << Pnow -> Info Pnow = Pnow -> Next } Awal/Head 15 25 35 Pnow 45 Arah Penelusuran/Pergeseran 14 IF-UTAMA
Studi Kasus I
Buat Algoritma & Program (gunakan list berkait) untuk kasus di
bawah ini (pilih salah satu)
Data Nilai Mahasiswa
Data Barang
Data Penjualan
Dimana data harus terurut secara Ascending berdasarkan aturan
tertentu, kemudian tampilkan datanya
15
Pencarian Data pada List Berkait
Secara garis besar, proses untuk mencari data yang terdapat pada suatu list hampir sama dengan proses membaca isi list, tetapi perlu ditambah dengan test untuk menentukan apakah data yang dicari ada pada seranai. Ada 2 Kemungkinan Proses Pencarian
Awal 15 25 35 Pnow 45 Arah Penelusuran/Pergeseran
a. Data Tidak Terurut Pnow = Awal
while (Pnow != NULL && Cari_Data != Pnow -> Info) {Pnow = Pnow -> Next} if (Pnow != NULL)
cout<<“Data ditemukan
b. Data Terurut Pnow = Awal
while (Pnow != NULL && Cari_Data > Pnow -> Info) { Pnow = Pnow -> Next} if (Pnow->info == Cari_Data)
cout<<“Data ditemukan 16
Menghapus Data pada List Berkait (1)
Dari hasil pencarian data di atas, kemungkinan proses penghapusan data pada List
Berkait yaitu :
List Kosong (Awal/Head = NULL)
printf(“LIST KOSONG”);
List Isi dan hanya tersisa 1 data (Awal = Akhir)
1. Awal -> Next = NULL 2. Akhir = Awal Awal 25 Akhir Awal Akhir 2 1 17 IF-UTAMA
Menghapus Data pada List Berkait (2)
List Isi dan tersisa > 1 data
Hapus di Awal
1. HapusNow = Awal 2. Awal = HapusNow -> Next
45 25 Awal 35 2 Akhir 45 25 Awal 35 Akhir HapusNow 1 18 IF-UTAMA
Menghapus Data pada List Berkait (3)
List Isi dan tersisa > 1 data (lanjutan)
Hapus di Akhir Telusuri Sampai HapusNow->info == Data yang akan dihapus dan jika HapusNow == Akhir, maka langkah penghapusannya adalah :
1. HapusSbl -> Next = NULL 2. Akhir = HapusSbl 45 25 Awal 35 1 Akhir 45 25 Awal 35 Akhir HapusNow HapusSbl 2 19 IF-UTAMA
Menghapus Data pada List Berkait (4)
List Isi dan tersisa > 1 data (lanjutan)
Hapus di Tengah
Telusuri Sampai HapusNow->info == Data yang akan dihapus dan jika HapusNow != Akhir, maka langkah penghapusannya adalah :
1. HapusSbl -> Next = HapusNow -> Next 45 25 Awal 35 1 Akhir 55 45 25 Awal 35 Akhir HapusNow HapusSbl 55 20 IF-UTAMA
Studi Kasus II
Lanjutkan Studi Kasus I dengan menambahkan fungsi-fungsi
sebagai berikut:
Data Nilai Mahasiswa (data terurut & tidak terurut)
Mencari IPK tertinggi dan terendah kemudian tampilkan NIM-nya
Menghitung IPK rata-rata
Hapus Data Nilai Mahasiswa dengan IPK terendah
Data Barang (data terurut & tidak terurut)
Mencari Jumlah barang tertinggi dan terendah kemudian tampilkan kode barangnya
Menghitung Jumlah Barang rata-rata
Hapus Data Barang dengan jumlah barang terendah
Data Penjualan (data terurut & tidak terurut)
Mencari Jumlah Penjualan tertinggi dan terendah kemudian tampilkan kode
sales dan kode barangnya
Menghitung rata-rata penjualan
Hapus Data Penjualan dengan jumlah penjualan terendah
21
IF-UTAMA
Untuk bahan renungan bersama
Siapakah orang yang rugi?
Orang yang rugi adalah orang yang sudah sampai usia pertengahan namun masih berat untuk melakukan ibadat dan amal-amal kebaikan. Maka hargailah waktumu dan bersegeralah
Siapakah orang yang paling cantik/Tampan?
Orang yang paling cantik/Tampan adalah orang yang mempunyai akhlak yang baik. Maka peliharalah akhlakmu dari dosa dan noda
Siapakah orang yang mempunyai rumah yang paling luas?
Orang yang mempunyai rumah yang paling luas adalah orang yang mati membawa amal-amal kebaikan dimana kuburnya akan di perluaskan sejauh mata memandang. Maka beramal shalehlah selagi sempat dan mampu
Siapakah orang yang mempunyai rumah yang sempit lagi dihimpit ?
Orang yang mempunyai rumah yang sempit adalah orang yang mati tidak membawa amal-amal kebaikkan lalu kuburnya menghimpitnya. Maka ingatlah akan kematian dan kehidupan setelah dunia
Siapakah orang yang mempunyai akal ?
Orang yang mempunyai akal adalah orang-orang yang menghuni syurga kelak, karena telah menggunakan akal sewaktu di dunia untuk menghindari siksa neraka. Maka peliharalah akal sehatmu dan pergunakan semaksimal mungkin untuk mengharap ridho-Nya
22