Anda di halaman 1dari 11

Linked List

Linked List atau dikenal juga dengan sebutan senarai berantai adalah struktur
data yang terdiri dari urutan record data dimana setiap record memiliki field yang
menyimpan alamat/referensi dari record selanjutnya (dalam urutan). Elemen data
yang dihubungkan dengan link pada Linked List disebut Node. Biasanya didalam
suatu linked list, terdapat istilah head dan tail.

• Head adalah elemen yang berada pada posisi pertama dalam suatu linked list
• Tail adalah elemen yang berada pada posisi terakhir dalam suatu linked list

Ada beberapa macam Linked List, yaitu :


1. Single Linked List
2. Double Linked List
3. Circular Linked List
4. Multiple Linked List
Single Linked List
Single Linked List merupakan suatu linked list yang hanya memiliki satu variabel
pointer saja. Dimana pointer tersebut menunjuk ke node selanjutnya. Biasanya
field pada tail menunjuk ke NULL.
contoh :

contoh codingannya :

struct Mahasiswa{
char nama[25];
int usia;
struct Mahasiswa *next;
}*head,*tail;
Double Linked List
Double Linked List merupakan suatu linked list yang memiliki dua variabel pointer
yaitu pointer yang menunjuk ke node selanjutnya dan pointer yang menunjuk ke
node sebelumnya. Setiap head dan tailnya juga menunjuk ke NULL.
contoh :

contoh codingannya :

struct Mahasiwa{
char nama[25];
int usia;
struct Mahasiswa *next,*prev;
}*head,*tail;
Circular Linked List
Circular Linked List merupakan suatu linked list dimana tail (node
terakhir) menunjuk ke head (node pertama). Jadi tidak ada pointer yang
menunjuk NULL. Ada 2 jenis Circular Linked List, yaitu :
Circular Single Linked List

Circular Double Linked List


Multiple Linked List
Multiple Linked List merupakan suatu linked list yang memiliki lebih dar 2 buat
variabel pointer. contoh :

Header Linked List


Selain ke-4 jenis Linked List diatas, ada juga jenis lain yaitu header linked list.
Header linked list merupakan header spesial yang terdiri dari node headernya.
Jadi, linked list jenis ini tidak menunjuk pada node pertama (head) namun hanya
menyimpan alamat dari node headernya.
Bubble Sort

Bubble Sort merupakan cara pengurutan yang sederhana. Konsep dari ide dasarnya adalah seperti
“gelembung air” untuk elemen struktur data yang semestinya berada pada posisi awal. Cara kerjanya
adalah dengan berulang-ulang melakukan traversal (proses looping) terhadap elemen-elemen struktur
datayang belum diurutkan. Di dalam traversal tersebut, nilai dari dua elemen struktur data
dibandingkan. Jika ternyata urutannya tidak sesuai dengan “pesanan”, maka dilakukan pertukaran
(swap). Algoritma sortingini disebut juga dengan comparison sort dikarenakanhanya mengandalkan
perbandingan nilai elemen untuk mengoperasikan elemennya.

Algoritma bubble sort dapat diringkas sebagai berikut, jika N adalah panjang elemen struktur data,
dengan elemen-elemennya adalah T1, T2, T3, …, TN-1,TN, maka:

1. Lakukan traversal untuk membandingkan dua elemen berdekatan. Traversal ini dilakukan dari
belakang.

2. Jika elemen pada TN-1 > TN , maka lakukan pertukaran (swap). Jika tidak, lanjutkan ke proses
traversal berikutnya sampai bertemu dengan bagian struktur data yang telah diurutkan.

3. Ulangi langkah di atas untuk struktur data yang tersisa.

Pseudocode dari bubble Sort adalah sebagai berikut;

For I = 0 to N - 2

For J = 0 to N - 2

If (A(J) > A(J + 1)

Temp = A(J)

A(J) = A(J + 1)

A(J + 1) = Temp

End-If

End-For

End-For

2.2. Selection Sort

Selection Sort adalah sort yang melakukan beberapa kali pass untuk melakukan penyeleksian elemen
struktur data. Untuk sorting ascending (menaik), elemen yang paling kecil di antara elemen-elemen yang
belum urut, disimpan indeksnya, kemudian dilakukan pertukaran nilai elemen dengan indeks yang
disimpan tersebut dengan elemen yang paling depan yang belum urut. Sebaliknya, untuk sorting
descending (menurun), elemen yang paling besar yang disimpan indeksnya kemudian ditukar.
Algoritma selection sort dapat dirangkum sebagai berikut:

1. Temukan nilai yang paling minimum (atau sesuai keinginan) di dalam struktur data. Jika ascending,
maka yang harus ditemukan adalah nilai yang paling minimum. Jika descending, maka temukan nilai
yang paling maksimum.

2. Tukar nilai tersebut dengan nilai pada posisipertama di bagian struktur data yang belum diurutkan.

3. Ulangi langkah di atas untuk bagian struktur datayang tersisa.

Pseudocode dari selection Sort adalah sebagai berikut;

For I = 0 to N-1 do:

Smallsub = I

For J = I + 1 to N-1 do:

If A(J) < A(Smallsub)

Smallsub = J

End-If

End-For

Temp = A(I)

A(I) = A(Smallsub)

A(Smallsub) = Temp

End-For

2.3. Insertion Sort

Metode pengurutan pada insertion sort adalah metode dengan cara menyisipkan elemen larik pada
posisi yang tepat.Cara kerja insertion sort, Pertama-tama, dilakukan iterasi, dimana di setiap iterasi
insertion sort memindahkan nilai elemen,kemudian menyisipkannya berulang-ulang sampai ketempat
yang tepat. Begitu seterusnya dilakukan. Dari proses iterasi, seperti biasa, terbentuklah bagian yang
telah di-sorting dan bagian yang belum di-sorting.

Algoritma Insertion Sort dapat dirangkum sebagai berikut:

1. Simpan nilai Ti kedalam variabel sementara, dengan i = 1.

2. Bandingkan nilainya dengan elemen sebelumnya.


3. Jika elemen sebelumnya (Ti-1) lebih besar nilainya daripada Ti, maka tindih nilai Ti dengan nilai Ti-1
tersebut. Decrement i (kurangi nilainya dengan 1).

4. Lakukan terus poin ke-tiga, sampai Ti-1 ≤ Ti.

5. Jika Ti-1 ≤ Ti terpenuhi, tindih nilai di Ti dengan variabel sementara yang disimpan sebelumnya.

6. Ulangi langkah dari poin 1 di atas dengan i di-increment (ditambah satu).

Pseudocode dari Insertion Sort adalah sebagai berikut;

procedure insertion;

var i,j,v: integer;

begin

for i:=2 to N do

begin

v:=a[i];j:=1;

while a[j-1] > v do

begin a[j]:=a[j-1]; j:=j-1 end;

a[j]:=v;

end

end;

2.4. Merge Sort

Algoritma Merge Sort ditemukan oleh John vonNeumann di tahun 1945. Merge Sort termasuk
paradigma algoritma divide and conquer (kurang lebih berarti: bagi dan atasi). Hal ini dikarenakan
algoritma ini melakukan pembagian struktur data sebelum kemudian dioperasi satu per satu. Intinya,
algoritma ini menggunakan dua ide utama sebagai berikut,

1. Sebuah list yang kecil membutuhkan langkah yang lebih sedikit untuk pengurutan daripada sebuah
list yang besar.

2. Untuk membentuk sebuah list terurut dari duabuah list terurut membutuhkan langkah yangl ebih
sedikit daripada membentuk sebuah list terurut dari dua buah list tak terurut. Contoh:hanya diperlukan
satu kali traversal untuk masing-masing list jika keduanya sudahterurut.

Algoritma Merge Sort sederhananya, dapat ditulis berikut:

1. Bagi list yang tak terurut menjadi dua sama panjang atau salah satunya lebih panjang satu elemen.

2. Bagi masing-masing dari 2 sub-list secara rekursif sampai didapatkan list dengan ukuran 1.
3. Gabung 2 sublist kembali menjadi satu list terurut.

Berikut ini adalah tiga proses di dalam menggunakan algoritma Merge Sort :

Divide : Bagi array A[l..r] dengan jumlah elemen n menjadi dua subarray dengan jumlah elemen
masing-masing subarray sebanyak n/2.

Conqueror : Urutkan masing--masing subarray secara rekursif menggunakan prosedur merge sort

Combine : Satukan subarray untuk menghasilkan elemen array A[l..r] yang terurut.

Berikut ini adalah algoritma untuk Merge Sort array A[l..r]:

Merge-Sort (A,l,r)

1. if l < r

2. then q := [(l+r) /2]

3. Merge-Sort(A,l,q)

4. Merge-Sort(A,q+1,r)

5. Merge(A,p,q,r)

Sedangkan algoritma untuk prosedure Merge adalah sebagai berikut :

MERGE ( A, l, q, r)

1. n1 ← q − l + 1

2. n2 ← r − q

3. create arrays L[1 . . n 1 + 1] and R[1 . . n 2 + 1]

4. for i ← 1 to n 1

5. do L[i] ← A[ l + i − 1]

6. for j ← 1 to n 2

7. do R[ j ] ← A[q + j ]

8. L[n 1 + 1] ← ∞

9. R[n 2 + 1] ← ∞

10. i ← 1

11. j ← 1

12. for k ← l to r

13. do if L[i] ≤ R[ j ]
14. then A[k] ← L[i]

15. i ←i +1

16. else A[k] ← R[ j ]

17. j ← j +1

2.5. Quick Sort

Quick Sort adalah algoritma sorting yang terkenal yang dirancang oleh C.A.R. Hoare pada tahun 1960
ketika bekerja untuk perusahaan manufaktur komputer saintifik kecil, Elliott Brothers. Algoritma ini
rekursif, dan termasuk paradigma algoritma divide and conquer.

Algoritma ini terdiri dari 4 langkah utama:

1. Jika struktur data terdiri dari 1 atau 0 elemen yang harus diurutkan, kembalikan struktur data itu
apa adanya.

2. Ambil sebuah elemen yang akan digunakansebagai pivot point (poin poros). (Biasanya elemen
yang paling kiri.)

3. Bagi struktur data menjadi dua bagian – satu dengan elemen-elemen yang lebih besar daripada
pivot point, dan yang lainnya dengan elemen-elemen yang lebih kecil dari pada pivot point.

4. Ulangi algoritma secara rekursif terhadap kedua paruh struktur data.

Berikut adalah tiga proses di dalam metode divide dan conqueror untuk algoritma Quick Sort:

Divide : Bagi array A[l..r] menjadi dua subarray A[l..pivot-1] dan A[pivot+1..r] sehingga setiap
elemen di dalam sub array A[l..pivot-1] bernilai lebih kecil atau sama dengan A[pivot]. Untuk
menghitung nilai pivot merupakan bagian dari prosedur partition.

Conqueror : Urutkan subarray A[l..pivot-1] dan A[pivot+1..r] secara rekursif ke prosedur quicksort

Combine : Karena subarray sudah terurut, maka array A[l..r] sudah terurut.

Pseudocode dari algoritma quick sort adalah sebagai berikut:

procedure quicksort(l,r:integer);

var pivot: integer;

begin

for r > l then

begin

pivot:=partition(l,r);
quicksort(l,pivot-1);

quicksort(pivot+1,r);

end

end;

Algoritma dari partisi array A[l..r] adalah :

x := A[r]

i := l-1

for j := l to r-1

do if A[j] <= x

then i := i + 1

exchange A[i] with A[j]

exchange A[i+1] with A[r]

return i+1

Anda mungkin juga menyukai