TM-03 Linked-List
Ilustrasi linked-list
Isi l.first 0x00135
Tipe data mahasiswa
Isi dari 0x00135
[nrp] [nama]
[mhslain
001 diana pur
0x0013
[email] [usia]
0
dp@its.ac.id
30
]
typedef struct mhs{
Isi dari 0x00130
char nrp[10],nama[50],email[100];
int usia; faris a
002
0x0099
struct mhs* mhslain;
0
}mahasiswa; fa@its-sby.edu
typedef struct{ 8
mahasiswa* first; Isi dari 0x00990
}listku;
int main(){ 003 nanik s
null
listku l;
ns@its-sby.edu
40
2
Ilustrasi konsep linked-list
0x00135
0x00130
Variabel l [data diana]
Nilai l = 0x00135
0x00130
0x00990
Operasi akses struktur [data faris]
NULL
[data nanik]
Kosongkan list
Hitung jumlah data dalam
NULL
list
Ambil data dari list
Tambah data ke list
Hapus data dari list
3
Contoh Kasus Linked-List
6
Lingkaran ketua kelas
Format input:
Baris pertama berisi sejumlah T test-
case (1<=T<=10)
Untuk setiap test-case, terdapat 2 baris.
Baris pertama N (1<=N<=1000) dan
baris kedua X (1<=X<=1000).
T, N, dan X merupakan bilangan bulat.
7
Lingkaran ketua kelas
Format output: untuk setiap test-
case
Baris pertama adalah urutan maba yang
keluar dari lingkaran, dipisahkan spasi,
diakhiri karakter '@'
Baris kedua adalah maba yang menjadi
ketua kelas
8
Lingkaran ketua kelas
INPUT OUTPUT
2
4 243@
1 1
5 3521@
2 4
9
Ilustrasi proses pada problem
lingkaran ketua kelas
Parsing input ke daftar berisi id mahasiswa
Misal kasus pertama: 4 1 dan output 2 4 3 @ 1
berarti ada 4 orang mahasiswa dan
bola panas jadi ketua kelas dilemparkan ke 1
orang disebelah
Iterasi 1: 1 2 3 4
Pemegang bola: mhs 1
Dilempar ke mhs 2, mhs 2 keluar dari lingkaran
Urutan mhs menjadi 1 3 4
Pemegang bola berikut: sebelah mhs 1 yaitu mhs 3
10
Ilustrasi proses pada problem
lingkaran ketua kelas
Iterasi 2: 1 3 4
Pemegang bola: mhs 3
Dilempar ke mhs 4, mhs 4 keluar dari lingkaran
Urutan mhs menjadi 1 3
Pemegang bola berikut: sebelah mhs 3 yaitu mhs 1
Iterasi 3: 1 3
Pemegang bola: mhs 1
Dilempar ke mhs 3, mhs 3 keluar dari lingkaran
Urutan mhs menjadi 1
Pemegang bola terakhir: mhs 1 jadi ketua kelas
11
Ilustrasi proses pada problem
lingkaran ketua kelas
Parsing input ke daftar berisi id mahasiswa
Misal kasus kedua: 5 2 dan output 3 5 2 1 @ 4
berarti ada 5 orang mahasiswa dan
bola panas jadi ketua kelas dilemparkan ke 2
orang disebelah
Iterasi 1: 1 2 3 4 5
Pemegang bola: mhs 1
Dilempar ke mhs 3, mhs 3 keluar dari lingkaran
Urutan mhs menjadi 1 2 4 5
Pemegang bola berikut: sebelah mhs 1 yaitu mhs 2
12
Ilustrasi proses pada problem
lingkaran ketua kelas
Iterasi 2: 1 2 4 5
Pemegang bola: mhs 2
Dilempar ke mhs 5, mhs 5 keluar dari lingkaran
Urutan mhs menjadi 1 2 4
Pemegang bola berikut: sebelah mhs 2 yaitu mhs 4
Iterasi 3: 1 2 4
Pemegang bola: mhs 4
Dilempar ke mhs 2, mhs 2 keluar dari lingkaran
Urutan mhs menjadi 1 4
Pemegang bola berikut: sebelah mhs 4 yaitu mhs 1
13
Ilustrasi proses pada problem
lingkaran ketua kelas
Iterasi 4: 1 4
Pemegang bola: mhs 1
Dilempar ke mhs 1, mhs 1 keluar dari
lingkaran
Urutan mhs menjadi 4
Pemegang bola terakhir: mhs 4 jadi
ketua kelas
14
Algoritma problem lingkaran ketua
kelas
Lakukan selama mahasiswa dalam lingkaran > 1
Pemegang bola melempar bola sejumlah langkah
Penerima bola keluar dari lingkaran
Cetak mahasiswa yang keluar
Tandai mahasiswa yang keluar
Pemegang bola memberikan bola ke mhs sebelah
Jika mhs sebelah akan keluar maka pemegang bola baru
adalah sebelahnya mhs sebelah
Jika mhs sebelah tidak keluar maka pemegang bola baru
adalah mhs sebelah
Keluarkan mahasiswa dari lingkaran (free alokasi
memori)
15
Struktur data untuk problem
lingkaran ketua kelas
Jika representasi penyimpanan adalah array
Diawal dibutuhkan alokasi tempat sebanyak 1000
Contoh: int mahasiswa[1000];
Namun jika input mhs dlm lingkaran terlalu kecil, mis 4,
maka akan alokasi terbuang percuma
Dibutuhkan nilai berbeda untuk menunjukkan
alokasi data pada array
berisi mahasiswa (a[i] = i+1), atau mahasiswa keluar
(a[i] = -1), atau tidak digunakan (a[i] = 0)
Saat akan oper bola, worst case lakukan looping
>900 kali untuk mengetahui mhs penerima
operan bola
16
Struktur data untuk problem
lingkaran ketua kelas
Solusi: representasi
array tidak
memungkinkan
Lebih baik gunakan
representasi linked-
list
17