Anda di halaman 1dari 27

MODUL PERKULIAHAN

Algoritma
Pemrogram
an &
Struktur
Data

Review

Fakultas Program Studi Tatap Muka Kode MK Disusun Oleh

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

Node dialokasikan secara dinamik


Tipe data node : struct
Jumlah pointer pengait node
1(satu): single linked list
2 (dua): double linked list
>2 (lebih dari dua) : multiple

Single Linked List (LL)


Contoh deklarasi tipe node
struct nodemhs {
char nama[10];
float ip;
struct nodemhs *next;
}
Contoh deklarasi pointer penunjuk Awal LL
struct nodemhs *head;
Pointer head digunakan untuk mengakses data dalam LL. Akses harus dimulai dari node
pertama (sequential)
Pointer head perlu diinisialisasi
head = NULL;

Pembentukan node baru


struct nodemhs *p, *curr;
//deklarasi variabel pointer
p = (struct nodemhs*)malloc(sizeof);
strcpy (p->nama, Dewi);
p->ip = 4.0;

15 Basis Data
3 Yuwan Jumaryadi,S.Kom.,MM
Pusat Bahan Ajar dan eLearning
http://www.mercubuana.ac.id
p->next = NULL;

Pengaitan node baru ke LL


Jika LL masih kosong
Pengaitan ke awal LL
Pengaitan ke akhir LL
Penyisipan pada posisi tertentu
Jika LL masih kosong
if (head ==NULL) head = p;

- 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

Pointer next di node terakhir selalu menunjuk ke node awal LL


POINTER
Tipe Data yang isinya berupa address dari data lain.
Alokasi pointer di memory bersifat DINAMIS.
OPERASI POINTER
Assignment =
Relational = = , < , >, <=, >=, !=
Dynamic new, delete (C++), malloc, free (C)
Contoh :

Jika alamat a=400 dan b=402, maka :

Variabel a & b bisa scr tdk langsung diisi (indirect assignment) melalui pointernya :
*pa= 30; *pb=20;

Komponen & Jenis LINKED LIST


Beberapa simpul/node yg terkait dg bantuan pointer.
Setiap simpul berisi :
Field Data / informasi
Field Pointer untuk menunjuk simpul berikutnya
Berdasarkan banyaknya POINTER, LINKED LIST dibedakan menjadi :
Single Linked List
Double Linked List

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.

Membangung Linked List


A. Single Linked list dapat dibangun dengan 3 cara:
Insert depan, node baru selalu berada didepan ( menjadi Head baru).
Insert belakang, node baru selalu berada di belakang (menjadi Tail baru).
Insert setelah posisi current pointer.

B. Double Linked list dapat dibangun dengan 2 cara:


InsertBefore, insert sebelum posisi Current.
InsertAfter, insert setelah posisi Current.

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.

Contoh Single Linked List


struct NODE {
char Nama[40];
struct NODE *next;
} *HEAD, *CURRENT, *TAIL;

Deklarasi dan alokasi memori :



NODE *P;
P = (NODE*) malloc( sizeof( struct NODE ) );
/* Set DATA dan POINTER */

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

Stack adalah ADT yang menggambarkan sebuah tumpukan data.


Stack mengikuti aturan LIFO (Last In First Out)
Implementasi dapat menggunakan array atau linked-list

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

Proses Push (35);

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

Dibandingkan implementasi dengan array, maka implementasi dengan linked list


mempunya:
Keuntungan:
1. Kapasitas stack hanya dibatasi oleh kapasitas memori komputer
2. Penggunaan memori tergantung dari banyaknya data
Kerugian:
1. Operasi clear memerlukan lebih banyak langkah
Aplikasi Stack
Evaluasi Infix
Notasi Infix
Notasi infix adalah suatu cara penulisan aritmatik, sebagai contoh: 12 + 5 x 10. evaluasi infix
adalah mendapatkan nilai dari ekspresi tersebut, hasil evaluasi (perhitungan) dari contoh
ekspresi diatas adalah 62.
Membuat algoritma untuk evaluasi dari ekspresi infix sangat sulit karena adanya
precedence, yaitu operator mana yang harus didahulukan evaluasinya.
Algoritma evaluasi infix dapat dengan mudah dibuat bila notasi infix diubah terlebih dahulu
ke notasi lain yaitu notasi Prefix dan Postfix

Infix Prefix Postfix AxB+C [x A B] + C [A B x] + C

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.

Algoritma Evaluasi Postfix (suffix)


1. Scan string postfix dari kiri ke kanan
2. Bila ketemu operand, Push (operand)
3. Bila ketemu operator, Pop dua kali yaitu Pop(x) dan Pop(y)
4. Z = Y operator x
5. Push Z(5)
6. Ulangi langkah 2 s/d 5 hingga selurus simbo daro string terbaca

Contoh
1. Notasi infix: 5 x 12 8
Notasi Postfix : 5 12 x 8
Ada 5 simbol yang harus dibaca

Simbol Isi Stack Keterangan


5 5 Push(5)
12 5 12 Push(2)
x 5 Pop(A); A = 12
Pop(B); B = 5
60 Push(B x A)
8 60 8 Push(8)
- 60 Pop(A); A = 8
Pop(B); B = 60
52 Push(B - A)
Selesai, hasil evaluasi 52

2. Notasi infix: (13 + 7) x 3 + 11


Notasi Postfix : 13 7 + 3 x 11 +
Ada 7 simbol yang harus dibaca

Simbol Isi Stack Keterangan


13 13 Push(13)
7 13 7 Push(7)
+ 13 Pop(A); A = 7
Pop(B); B = 13
20 Push(B x A)
3 20 3 Push(8)

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

Algoritma Konversi Infix ke Postfix


1. Create stack
2. Kosongkan string Postfix
3. Tambahkan simbol ) ke ujung string infix
4. Push (()
5. While(Not Empty Stack){
Baca simbol dari string infix
switch(simbol){
Case operand : Tambahkan simbol ke ujung string Postfix
Case operator: while(prcd(Stack[Top], simbol) == true){
Pop(x)
Tambahkan x ke ujung string Postfix
}Push(simbol)
case( : Push(simbol)
case) : while (stack[Top] !=(){
{Pop(x)
Tambahkan x ke ujung string postfix
} Pop(x) //Buang simbol (

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

Simbol Isi Stack String Postfix Keterangan


6 ( 6
+ ( + 6 Prcd( ( , + ) = F
2 ( + 62
x ( + + 62 Prcd( + , x ) = F
2 ( + + 622
+ ( + 622x Prcd( x , + ) = T
( + + 622x
72 ( + + 6 2 2 x 72
/ ( + + 6 2 2 x 72 Prcd( + , / ) = F
8 ( + + 6 2 2 x 72 8
) ( + + 6 2 2 x 72 8 /
( + 6 2 2 x 72 8 / +
( 6 2 2 x 72 8 / + +
6 2 2 x 72 8 / + + Pop(x)
END
Kemudian hasil konversi dievalusi dengan menggunakan algoritma Evaluasi Postfix

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

Implementasi Stack dengan mengunakan Array dalam C


#include<stdio.h>
#define MAX 50
typedef int data_Type;
typedef struct{

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

Implementasi Queue dengan mengunakan Array dalam C


#include <stdio.h>
void main()
{
int queue[5];
int depan = -1;
int belakang = -1;
int pilihan, data, i;
do{
printf("MENU\n");
printf("1. ENQUEUE\n2. DEQUEUE\n3. VIEW\n4. EXIT\n");
printf("Pilihan = "); scanf("%d", &pilihan);
switch (pilihan)
{
case 1:
if (belakang < 4 )
{
printf("Data Masuk = "); scanf("%d", &data);
queue[belakang+1] = data;
belakang++;
if (belakang == 0)
depan = 0;
}
else

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

Proses Enqueue : cepat, hanya diperlukan satu langkah

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

Representasi Priority Queue

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)

Bubble Sort (Exchange Sort)


Pada putaran pertama cari data terkecil dan ditempatkan pada posisi terdepan
(pada[0])
Bandingkan data terakhir ([n-1]) dengan data sebelumnya ([n-2]), jika data
sebelumnya lebih besar maka tukar kedua data tersebut
Jumlah data = n, jumlah putaran sorting = n-1. jika n-1 data telah terurut maka data
terakhir pasti data terbesar
Kompleksitas algoritma O(n2)

Bubble Sort (Exchange Sort)

Putaran ke-1: Putaran ke-2:

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-3: Putaran ke-4:

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-3: Putaran ke-4:

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

Anda mungkin juga menyukai