Algoritma
Pemrogram
an &
Struktur
Data
Review
07
Fasilkom Sistem Informasi 87031 Yuwan Jumaryadi, S.Kom.,MM
Abstract Kompetensi
Modul ini berisi materi pertemuan 3 s/d Mahasiswa mampu menerapkan Stack
6 dan Quee dan Sorting sederhana dalam
solusi pemecahan masalah
15 Basis Data
2 Yuwan Jumaryadi,S.Kom.,MM
Pusat Bahan Ajar dan eLearning
http://www.mercubuana.ac.id
LINKED LIST
Linked List : struktur data yg terdiri dr bbrp node yang saling dikaitkan secara linear
dengan bantuan pointer
15 Basis Data
3 Yuwan Jumaryadi,S.Kom.,MM
Pusat Bahan Ajar dan eLearning
http://www.mercubuana.ac.id
p->next = NULL;
- Pengaitan ke awal LL
p->next = head;
head = p;
Misalkan ada node baru p
Maka LL menjadi
15 Basis Data
4 Yuwan Jumaryadi,S.Kom.,MM
Pusat Bahan Ajar dan eLearning
http://www.mercubuana.ac.id
Penyisipan Pada Pointer List
p->next = list->next;
list->next = p;
Penghapusan node
curr = head;
while (curr->next != list) curr=curr->next;
curr->next = list->next;
free(list);
15 Basis Data
5 Yuwan Jumaryadi,S.Kom.,MM
Pusat Bahan Ajar dan eLearning
http://www.mercubuana.ac.id
Circular Single Linked List
Variabel a & b bisa scr tdk langsung diisi (indirect assignment) melalui pointernya :
*pa= 30; *pb=20;
15 Basis Data
6 Yuwan Jumaryadi,S.Kom.,MM
Pusat Bahan Ajar dan eLearning
http://www.mercubuana.ac.id
Multiple Linked List
Cara Akses
Cara Access Link List
SEQUENTIAL
Tiga pointer yang umumnya digunakan :
HEAD : Pointer yg menunjuk elemen pertama.
CURRENT : Pointer yg menunjuk elemen sedang aktif.
TAIL : Pointer yg menunjuk elemen terakhir.
Operasi
Create();
Untuk menciptakan Linked List yang baru dan kosong.
Insert(type e)
Untuk menambahkan 1 elemen/data ke dalam Linked List.
int Empty()
Untuk mengecek apakah Linked List masih kosong atau sudah berisi data.
Retrieve (type *e)
Untuk mengubah isi elemen yang ditunjuk oleh pointer current dengan isi dari variable
yang dikirim (variable e).
Find_First()
15 Basis Data
7 Yuwan Jumaryadi,S.Kom.,MM
Pusat Bahan Ajar dan eLearning
http://www.mercubuana.ac.id
Untuk mencari elemen pertama : yaitu dengan memposisikan pointer Current ke posisi
HEAD.
Find_Next()
Untuk mencari elemen berikut yang ditunjuk oleh Pointer Current.
Delete()
Untuk menghapus elemen yang ditunjuk oleh Pointer Current.
STACK
Stack adalah salah satu struktur data yang memiliki sistem kerja Last In First Out (LIFO),
yang terakhir masuk pertama keluar dapat di gambarkan seperti:
1. Misal Sate, si pembuat sate menusukan (memasukan) daging sate ke tusukan satu per
satu dari ujung tusukan (ujung yang runcing) menuju/mendekati batas pangkal, jika telah
dimasak, maka si pemakan sate akan mengeluarkan (memakan) sate satu persatu dari
ujung (yang akhir-akhir dimasukan si pembuat, itulah yang awal-awal dimakan).
2. seorang anak yang sedang mencuci piring, piring yang di cuci pertama pasti akan
diletakan di bawah dan akan terus berlanjut sampai tumpukan piring yang terahir di cuci.
15 Basis Data
8 Yuwan Jumaryadi,S.Kom.,MM
Pusat Bahan Ajar dan eLearning
http://www.mercubuana.ac.id
dan ketika semua piring sudah di cuci kemudian piring pasti akan di taruh di rak piring.
cara penaruhanya pun pasti yang paling terahir di ambil lebih dahulu.dan piring yang
pertama di cuci justru paling akhir yang di ambil.
3. tumpukan batu bata yang sedang turun dari mobil pasti yang diturunkan pertama pasti
akan di susun menjadi tembok paling akhir. dan masih banyak lagi contoh dari steck
yang bisa kita dapat dalam kehidupan sehari-hari. ini adalah contoh kecil dari sekian
banyak contoh penerapan steck yang kita lakukan. mengapa demikian itu karena Stack
memiliki sistem kerja Last In First Out (LIFO), yang terakhir masuk pertama keluar
Stack merupakan tipe data abstrak yang banyak digunakan dalam berbagai algoritma,
diantaranya adalah:
Algoritma konversi infix ke postfix
Algoritma evaluasi postfix
MENGENAL ADT
Abstract Data Type (ADT)
Adalah konsep abstrak yang diciptakan manusia untuk mempermudah perhitungan
sebuah proses melalui abstraction
ADT tidak secara langsung dikenali oleh processor komputer, tapi bahasa
pemrograman tingkat tinggi bisa dipakai untuk implementasi ADT
Contoh ADT
Stack
Queue
Tree
Graph
15 Basis Data
9 Yuwan Jumaryadi,S.Kom.,MM
Pusat Bahan Ajar dan eLearning
http://www.mercubuana.ac.id
Operasi dalam Stack
1. Create() Menciptakan stack baru dalam keadaan kosong
2. Push(e) Memasukkan data baru dari variabel e ke dalam stack
3. Pop(*e) Mengambil data dari stack untuk disimpan di variabel e
4. Empty() Memeriksa apakah stack dalam keadaan kosong
5. Full() Memeriksa apakah stack dalam keadaan penuh
6. Clear() Menghapus semua data yang ada dalam stack
Operasi Stack
Sebuah stack dalam pemrograman komputer memiliki 3 operasi yang dapat dilakukan :
PUSH X (yaitu menambahkan data X ke dalam tumpukan)
POP (yaitu mengambil elemen paling atas dari tumpukan)
EMTPY (yaitu mengosongkan tumpukan)
Ilusttasi Stack
15
1 Basis Data
Yuwan Jumaryadi,S.Kom.,MM
Pusat Bahan Ajar dan eLearning
http://www.mercubuana.ac.id
0
Proses Pop(*e)
15
1 Basis Data
Yuwan Jumaryadi,S.Kom.,MM
Pusat Bahan Ajar dan eLearning
http://www.mercubuana.ac.id
1
Implementasi Stack dengan Linked List
Operasi Push() menggunakan insert depan
Operasi Pop() menggunakan delete dibagian Head
Pointer Head berfungsi sebagai TOP
15
1 Basis Data
Yuwan Jumaryadi,S.Kom.,MM
Pusat Bahan Ajar dan eLearning
http://www.mercubuana.ac.id
2
+ [x A B] C [A B x] C + (A + B) x C - D [+AB] x C - D [AB+] x C - D
+xABC ABxC+ [+AB] x C - D [[AB+] C x] - D
[+AB] x C - D [[AB+] C x] D -
[+AB] x C - D AB+ C xD-
Infix Prefix Postfix
Apabila ekspresi sudah berada dalam notasi postfix, maka membuat algoritma evaluasi
postfix akan menjadi sangat mudah , yaitu dengan menggunakan Stack.
Contoh
1. Notasi infix: 5 x 12 8
Notasi Postfix : 5 12 x 8
Ada 5 simbol yang harus dibaca
15
1 Basis Data
Yuwan Jumaryadi,S.Kom.,MM
Pusat Bahan Ajar dan eLearning
http://www.mercubuana.ac.id
3
X 20 Pop(A); A = 3
Pop(B); B = 20
60 Push(B x A)
11 60 11 Push(11)
+ 60 Pop(A); A = 11
Pop(B); B = 60
71 Push(B x A)
Selesai, hasil evaluasi 71
Aplikasi Stack
Skema Evaluasi Infix
15
1 Basis Data
Yuwan Jumaryadi,S.Kom.,MM
Pusat Bahan Ajar dan eLearning
http://www.mercubuana.ac.id
4
}}
6. Selesai
Algoritma Konversi Infix ke Postfix hanya dapat dijalankan dengan bantuan daftar precedence
Operator Nilai
Prcd(^ , x) True
Prcd(x , +) True
Prcd(x , x) True
Prcd(+ , +) True
Prcd(+ , -) True
Prcd(- , -) True
Prcd(x , ^) False
Prcd(+ , x) False
Prcd(- , +) False
Prcd(- , x) False
Dst.
Keterangan:
^ = tanda pangkat
Bila operator tidak terdefinisi, maka
nilainya false, contoh:
Prcd(( , +) = False
15
1 Basis Data
Yuwan Jumaryadi,S.Kom.,MM
Pusat Bahan Ajar dan eLearning
http://www.mercubuana.ac.id
5
Contoh
Notasi Postfix : 6 2 2 x 72 8 / + +
Simbol Isi Stack Keterangan
6 6 Push(6)
2 6 2 Push(2)
2 6 2 2 Push(2)
x 6 2 Pop(A); A = 2
6 Pop(B); B = 2
6 4 Push(B x A)
72 6 4 72 Push(72)
8 6 4 72 8 Push(8)
/ 6 4 72 Pop(A); A=8
6 4 Pop(B); B= 72
6 4 9 Push(B/A)
+ 6 4 Pop(A); A=9
6 Pop(B); B=4
6 13 Push(B + A)
+ 6 Pop(A); A = 13
Pop(B); B = 6
19 Push(B + A)
Selesai, hasil evaluasi 19
15
1 Basis Data
Yuwan Jumaryadi,S.Kom.,MM
Pusat Bahan Ajar dan eLearning
http://www.mercubuana.ac.id
6
data_Type data[MAX];
int TOS;
}STACK;
data_Type item[MAX], temp, x;
int pilih, i, n;
char lagi='y';
void inisialisasi(STACK *s){
s->TOS = 0;
}
int full(STACK *s){
return (s->TOS == n);
}
int empty(STACK *s){
return (s->TOS == 0);
}
void push(data_Type x, STACK *s){
if(full(s))
puts("Stack is Full!");
else {
s->data[s->TOS] = x;
(s->TOS)++;
}
}
data_Type pop(STACK *s){
data_Type tampung;
if(empty(s))
puts("Stack is Empty!");
else {
(s->TOS)--;
tampung = s->data[s->TOS];
}return tampung;
}
void tampil(STACK *s){
for(i=s->TOS-1; i>=0; i--) {
printf("%d ", s->data[i]);
}puts("");
}
15
1 Basis Data
Yuwan Jumaryadi,S.Kom.,MM
Pusat Bahan Ajar dan eLearning
http://www.mercubuana.ac.id
7
main(){
STACK s;
inisialisasi(&s);
printf("Masukkan jumlah tumpukan : ");
scanf("%d", &n);
while((lagi == 'y') || (lagi == 'Y')){
puts("MENU");
puts("1. Push");
puts("2. Pop");
printf("What do you want?: ");
scanf("%d", &pilih);
switch(pilih) {
case 1:
printf("Enter data: ");
scanf("%d", &x);
push(x, &s);
break;
case 2:
pop(&s);
break;
default :
puts("Invalid Input!");
break;
}
tampil(&s);
fflush(stdin);
printf("Try again [y/t]? ");
scanf("%c", &lagi);
puts("");
}
}
QUEUE
Sistem penyimpanan data dengan mekanisme First In First Out (FIFO). Queue
merupakan tipe data abstrak yang banyak digunakan dalam printer spooler dan berbagai
algoritma untuk simulasi
15
1 Basis Data
Yuwan Jumaryadi,S.Kom.,MM
Pusat Bahan Ajar dan eLearning
http://www.mercubuana.ac.id
8
Bentuk umum Queue:
A merupakan elemen yang pertama masuk dan akan menjadi elemen yang pertama keluar
Operasi dalam Queue
1. Create() Menciptakan Queue baru dalam keadaan kosong
2. Push(e) Memasukkan data baru dari variabel e ke dalam Queue
3. Pop(*e) Mengambil data dari Queue untuk disimpan di variabel e
4. Empty() memeriksa apakah Queue dalam keadaan kosong
5. Full() Memeriksa apakah Queue dalam keadaan penuh
6. Clear() Menghapus semua data yang ada dalam Queue
15
1 Basis Data
Yuwan Jumaryadi,S.Kom.,MM
Pusat Bahan Ajar dan eLearning
http://www.mercubuana.ac.id
9
printf("Queue penuh!\n");
break;
case 2: //dequeue
//apakah queue belum kosong?
if (depan <= belakang)
{
printf("Data keluar = %d\n,queue[depan]);
depan++;
}
else
printf("Queue kosong!\n");
break;
case 3:
for(i=depan; i<=belakang; i++)
printf("%d", queue[i]);
printf("\n");
break;
}
}while (pilihan != 4);
}
Proses Enqueue
Keadaan awal, setelah create()
15
2 Basis Data
Yuwan Jumaryadi,S.Kom.,MM
Pusat Bahan Ajar dan eLearning
http://www.mercubuana.ac.id
0
Proses Dequeue
Pada posisi diatas Enqueue(G) tidak dapat dilakukan karena queue sudah dianggap
penuh. Untuk memperbaiki keadaan diatas, maka pada setiap operasi dequeue, seluruh
elemen digeser ke arah posisi 1, dengan demikian posisi pointer FRONT tetap berada di
posisi 1.
Priority Queue
Mekanisme prioriy queue adalah: Highest Prioity In First Out (HPIFO)
Elemen yang berada didepan adalah elemen yang memiliki nilai prioritas tertinggi,
dengan demikian waktu kedatangan tidak menjadi penentu
Priority Queue dibedakan atas dua tipe:
1. Ascending Priority
Queue diurutkan dengan prioritas yang menaik
2. Descending Priority
Queue diurutkan dengan prioritas yang menurun
Representasi Priority Queue
1. Set
Data dimasukkan kedalam Queue (Enqueue) berupa pasangan nilai elemen atau informasi
dan nilai prioritasnya
15
2 Basis Data
Yuwan Jumaryadi,S.Kom.,MM
Pusat Bahan Ajar dan eLearning
http://www.mercubuana.ac.id
1
Proses Dequeue : lama, karena harus mencari elemen dengan prioritas tertinggi
3. Linked List
Proses Enqueue: lama, karena perlu mencari posisi sesuai dengan prioritasnya.
Proses Dequeue: cepat, karena elemen paling depan adalah elemen dengan prioritas
tertinggi
15
2 Basis Data
Yuwan Jumaryadi,S.Kom.,MM
Pusat Bahan Ajar dan eLearning
http://www.mercubuana.ac.id
2
SORTING
Sorting adalah proses mengurutkan data sesuai aturan tertentu
Ascending atau nondecreasing
Descending atau nonincreasing
Internal sorting, seluruh data diletakkan di memory
External sorting, data berada pada secondary storage
Data yang terurut mempercepat pencarian (searching)
Putaran ke-3:
15
2 Basis Data
Yuwan Jumaryadi,S.Kom.,MM
Pusat Bahan Ajar dan eLearning
http://www.mercubuana.ac.id
3
Putaran ke-4:
Putaran ke-5:
Apa yang terjadi bila ternyata data sudah dalam keadaan terurut sejak semula?
Proses pembandingan tetap dilakukan secara lengkap (n-1 putaran)
Tambahkan flag. Pada awal putaran diberi nilai tertentu. Bila terjadi pertukaran maka
ganti flag tersebut. Bila pada akhir putaran nilai flag tidak berubah berarti data telah
terurut
Selection sort
Pada putaran pertama cari data terkecil dan dipertukarkan dengan data posisi pertama
(pada[0]), pertukaran data hanya dilakukan setelah putaran selesai
Kompleksitas algoritma 0.5n2 + O(n)
Putaran ke-1:
15
2 Basis Data
Yuwan Jumaryadi,S.Kom.,MM
Pusat Bahan Ajar dan eLearning
http://www.mercubuana.ac.id
4
Putaran ke-2:
Putaran ke-5:
Insertion Sort
Pada putaran pertama urutkan 2 data pertama. Pengurutan ini bersifat relatif, artinya
kedua data ini belum tentu 2 data terkecil dari seluruh data
Kompleksitas algoritma O(n2)
Putaran ke-1:
15
2 Basis Data
Yuwan Jumaryadi,S.Kom.,MM
Pusat Bahan Ajar dan eLearning
http://www.mercubuana.ac.id
5
Putaran ke-2:
Putaran ke-5:
15
2 Basis Data
Yuwan Jumaryadi,S.Kom.,MM
Pusat Bahan Ajar dan eLearning
http://www.mercubuana.ac.id
6
Daftar Pustaka
Connolly, Thomas dan Begg, Carolyn. Database system: A Practical approach to design,
implementation and management. Addison Wesley