Anda di halaman 1dari 17

KI141307 Struktur Data (SD)

4 sks/Semester 2/ Tahun Akademik 2014-


2015

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]

data list 0x00990

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

Benar atau salahkah pernyataan berikut dan jika salah tunjukkan


pernyataan yang benar untuk:
(i) listData->next == ptr1, (ii) ptr1->next->info == 60 , (iii) ptr2->next
== NULL , (iv) listData->info == 25
Valid atau tidak validkah pernyataan berikut dan jika salah tunjukkan
pernyataan yang valid untuk:
(i) listData->next = ptr1->next; (ii) listData->next = *(ptr2->next); (iii)
*listData = ptr2;
(iv) ptr2 = ptr1->next->info; (v) ptr1->info = ptr2->info; (vi) ptr2 = ptr2-
>next->next;
Tulis hanya satu baris program untuk melakukan:
(i) buat listData menunjuk ke node 45. (ii) buat ptr2 menunjuk ke node
4
terakhir. (iii) buat listData menunjuk ke empty list. (iv) set node dengan
typedef struct nd{
int data;
struct nd* link;
}node;
node* insert_last(node* back, int num){
node* temp; temp = (node*)malloc(sizeof(node));
if(back==NULL){
a)__________________????
b)__________________????
back=temp;
}else{
c)__________________????
d)__________________????
e)__________________????
back=temp;
} Fungsi
}
return(back); insert_last
int main(){ adalah fungsi
node *back=NULL; int num;
...
yang
back = insert_last(back,num); menambahkan
...}
suatu node
5
ke
Lingkaran ketua kelas
Pada kegiatan orientasi, salah satu senior meminta
dari N mahasiswa baru ditunjuk satu ketua kelas
Aturan penunjukkan sbb. N maba membentuk
sebuah lingkaran dinomori urut 1N searah jarum
jam
Maba 1 menunjuk maba di posisi X setelahnya.
Maba tertunjuk keluar dari lingkaran.
Lalu maba yang saat ini berposisi setelah nomor 1
akan menunjuk maba di posisi X setelahnya
Dan seterusnya sampai tersisa 1 maba sebagai
ketua kelas

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

Anda mungkin juga menyukai