Struktur Data - Catatan Yoga Prihastomo

advertisement
Modul Struktur Data STRUKTUR DATA Pertemuan 1 s.d 8 Sasaran: Meningkatkan: ƒ pemahaman pengetahuan tentang teori dasar struktur data dan penanganan data ƒ serta pembuatan algoritma dan penggunaan strukturd dalam pemrograman Materi : 1. Konsep dan Definisi - Tipe dan definisi - Operasi Data 2. Stack dan Queue - Operasi dan aplikasi Stack - Operasi dan aplikasi Queue dan Deque 3. Linked List - Konsep pointer dari Linked List - Operasi pointer dari Linked List - Jenis Linked List Single dan Double 4. Tree dan Graph - Terminologi, karakteristik dan struktur hirarkhi Tree - Terminologi, Representasi dan Traversal dari Graph Halaman 1 Modull Struktur Datta Konsep dan Definisi Definiisi Data Adalah
h fakta ataau kenyataaan tercataat mengen
nai suatu o
obyek Pengeertian dataa ini men
nyiratkan suatu nillai bisa daalam benttuk konsttanta atau
u variab
bel Tipe D
Data Tipe Daata
Sedeerhana
Reaal
Terstrukttur
Ordinal
String
Flat
Integerr
Record
Double
Characteer
array
Boolean
n
File
Set
Tipe daata sederhaana:
Hanya dimungkinnkan untukk menyimpan satu nilaai dalam saatu variabeel
m
yaaitu:
Ada 5 macam,
1. bilaangan bulatt (integer)
2. bilaangan real presisi
p
tungggal
bilaangan real presisi
p
gannda
3. karaakter
4. tak bertipe (unnsign)
5. booolean (operrator logik))
Halaman 2 Modul Struktur Data Tipe data terstrukrur Adalah tipe data dimana satu variabel dapat menyimpan lebih dari satu nilai data Masing‐masing nilai data disebut komponen. Ada 5 macam, yaitu: 1. Data String Data yang berisi sederetan karakter dimana banyaknya karakter bisa berubah‐
ubah sesuai kebutuhan Bentuk umum : char nama­ variabel[ukuran] Contoh : char nama[30] 2. Larik (array) dimana variabel larik hanya bisa menyimpan 1tipe data saja Bentuk umum : Tipe data nama­variabel[ukuran] Contoh : float X[5] int datax[10] 3. Record terdiri dari beeberapa variabel dimana masing‐masing variabel bisa mempunyai tipe yang berbeda Bentuk umum : struct nama_tipe_struct { tipe field‐1; tipe field‐2; ................... tipe field‐n; } var_ struct Contoh : struct data_tanggal { int tanggal; int bulan; int tahun; } struct data_mhs { char nama[25]; struct data_tanggal; } info_mhs;
Halaman 3 Modul Struktur Data nama_mhs tanggal info_mhs data_tanggal
bulan tahun 4. Set (himpunan) Memungkinkan suatu lokasi memori ditempati oleh satu atau lebih variabel yang tipenya bisa berlainan. 1. union Bentuk umum: Union nama_union; Contoh: union { unsigned int data_int; unsigned char data_char[20]; } bil_x; 2. enumerius merupakan himpunan dari konstanta integer yang diberi nama Bentuk umum: enum nama_enum { konstanta_1, jonstanta_2; konstanta_n; } var_1, var_2; Contoh: enum manusia { pria, wanita }; enum manusia jenis_kelamin; Bila jenis_kelamin diisi pria maka nilai jenis kelamin=0 dan sebaliknya bila diisi wanita nilai jenis_kelamin=1 Halaman 4 Modull Struktur Datta 5. Fille Filee merupak
kan organ
nisasi darii sejumlah
h record seejenis. Maasing‐masiing record
d terrdiri dari ssatu atau leebih field d
dan field terdiri darii satu atau
u lebih karrakter. File
e
Re
ecord
Field
Charr
Record Field
C
Char
Tipe d
data Pointter Variabel pointerr berisi alaamat dari suatu obyek lain (yaaitu obyek
k yang ditu
unjuk oleh
h pointerr tersebutt) Bentuk
k umum: tipe *nama
a_ponter Contoh
h: in
nt *pa; paa = &x; ( ‘&’ berartii alamat)
Artinya poin
nter pa meenunjuk allamat x Algoritm
ma dan Pem
mrogram
man Perm
masalahan
nnya adalaah bagaim
mana suatu
u masalah
h dapat d
diselesaikaan dengan
n algo
oritma yan
ng tepat. Dasaar‐dasar A
Algoritma: elementerr; dan ƒ Statement S
ƒ Statement S
kontrol Stateement elementer terdiri dari: ƒ Asignment A
t (X=5, X=Y
Y) ƒ Compariso
C
n ƒ Arithmatic
A
c Statemen
nt Halaman 5 Modul Struktur Data Statement kontrol terdiri dari: ƒ Alternatif ƒ Pengulangan ƒ Percabangan Statement elementer: a. assignment Untuk memberikan nilai ke variabel yang telah diseklarasikan. Bentuk pernyataannya adalah Contoh: total = 100; b. comparison Untuk keperluan pengambilan keputusan diperlukan operator relasi seperti > , < dll. , operasi aritmatik, operator Boolean. c. statement I/O Untuk memasukkan nilai ke komputer menggunakan: scanf(), getch() Untuk mengeluarkan nilai menggunakan: printf(), puts() STACK DAN QUEUE Stack (tumpukan) dan Queue (antrian) merupakan alokasi memory dalam bentuk array 1 dimensi atau lebih. Aplikasi penggunaan array adalah : ƒ Stack (tumpukan) ƒ Queue (antrian) ƒ Dequeue (antrian 2 pintu) Pada Stack berlaku konsep LIFO (Last In First Out), Pada Queue berlaku konsep FIFO (First In First Out), atau FCFS (First Come First Serve) Pemilihan ke 3 cara tersebut disesuaikan dengan permasalahan yang ada: STACK Adalah suatu list yang penambahan (insert) atau penghapusan (deletion), elemennya dilakukan di satu ujung (Top) Ada 3 kondisi pada stack, yaitu : Awal Top = 0 Kosong Top = 0 Penuh Top = N Halaman 6 Modul Struktur Data Proses yang dapat dilakukan pada stack adalah : 1. push: untuk memasukkan data ke dalam Stack Langkah yang diperlukan ƒ cek apakah Top < N ƒ bila ya, tambahkan top dengan 1 ƒ isikan data ke stack 2. pop: mengeluarkan (delete) data dari Stack Langkah yang diperlukan : ƒ cek apakah Top masih > 0 ƒ Bila ya, copy data ke suatu variabel ƒ kurangkan Top dengan 1 Algoritma PUSH dan POP #include <stdio.h>
void push(void);
void pop(void);
int x, top;
int s[5], N=5;
main()
{
char pilih;
clrBarloop;
{
clrscr();
gotoxy(25,7); puts(“coba stack”) ;
gotoxy(25,10); puts(“1. push”);
gotoxy(25,13); puts(“2. pop”);
gotoxy(25,16); puts(“3. exit”);
gotoxy(25,19); prinyf(“Pilih :”);
scanf(“ %x
“, &pilih);
switch(pilih)
{
case 1: printf(“\n masukkan data x =;
scanf(“ “);
push(); getch(); break;
case 2: pop(); getch(); break;
case 3: exit(0);
}
goto clrBaarloop;
}
}
void pop(void)
{
If (top > 0)
{
x = s[top];
pritf (“\n\r x = %d top = %d”, x, top);
top = top – 1;
Halaman 7 Modul Struktur Data }
}
else { printf(“\n\r
stack
kosong”); }
Soal: buat fungsi PUSH Aplikasi stack antara lain : 1. Dalam sistem operasi, pada saat aktivitas call dan return 2. Pada proses kompilasi, untuk melakukan pengecekan kelengkapan pasangan tanda kurung, kurung kotak, dll. QUEUE (antrian) Prinsip: FIFO (First In First Out) atau FCFS (First Come First Serve) Ada 2 macam pointer, yaitu: F(Front) dan R(Rear) ƒ Untuk pengambilan data menggunakan pointer F sedang untuk pemasukkan data menggunakan pointer R ƒ Bila kondisi kosong F=0 dan R=0 sedang kondisi penuh R=N maka syarat antrian adalah: F <= R Proses yang dapat dilakukan adalah: 1. INSERT, untuk memasukkan ke antrian; 2. DELETE, untuk mengeluarkan data dari antrian. Kondisi yang perlu diperhatikan adalah kondisi penuh tapi kosong yaitu F=R=N Subroutine insert: void insert(void)
{
if ( R< N )
{
R = R+ 1;
Q[R] = x;
printf(“ R = %d x = %d “, R, x);
}
else
printf(“antrian penuh”);
}
Soal: buat prosedur DELETE - Cek F < R - F = F + 1 - X = Q[F] - If (f=N) { F=0 ; R= 0 } Halaman 8 Modul Struktur Data STRUKTUR DATA Pertemuan 9 s.d 18 Linked List Pengelolaan memori secara dinamis artinya tidak perlu mengalokasikan memori lebih awal secara fixed. Pengelolaan memori secara dinamis dapat dilakukan: ƒ alokasi memori; dan ƒ dealokasi memori Alokasi memori: void * malloc ( jumlah byte ) Dealokasi memori: void free(void *nama_pointer) contoh: char *ptr; ptr = (char *) malloc(500 * sizeof (char)); free(ptr); Ada 2 bagian pada setiap record Linked List, yaitu: ƒ bagian data atau info; dan ƒ bagian alamat record next Ada 4 macam proses yaitu: ƒ Linier Singly Linked List 1000 H Record1
2100 H Record2
2100 H 1000 H
2100 H
ƒ Linier Doubly Linked List
Halaman 9 Modul Struktur Data FIRST = 1100 H NIL A100 H 1100 H 1100 H NIL A100 H ƒ Circular Singly Linked List FIRST A100 H B100 H
A100 H
C100 H
C100 H B100 H
ƒ Circular Doubly Linked List HEAD = B100 H A100 H A100 H B100 H B100 H B100 H A100 H LINIER SINGLY LINKED LIST Ada 2 bagian utama dari record Linier Singly Linked List, yaitu: 1. bagianyang berisi data/info ; dan 2. bagian yang berusu record next Deklarasi record baru: struct simpul *p; p = (struct simpul *) malloc (sizeof simpul)); Proses yang dapat dilakukan adalah: ƒ insert record baru ƒ delete record Halaman 10
Modul Struktur Data Insert: - awal - tengah - akhir Delete: - awal - tengah - akhir format record : struct simpul {
char nama[20];
struct simpul *link;
}
void insert_awal(void)
{
struct simpul *p;
P = (struct simpul *) malloc(sizeof(struct simpul));
strcpy(p-> nama, nama);
*strcpy=string Copy
if (first != NULL)
* != tidak sama dgn
{
p->link = first;
first = p;
printf(“\n sisip awal”);
}
else
{
p->link = NULL;
first = p;
printf(“\n create file”);
}
}
void insert_tengah(void)
{
struct
simpul *p , *q, *k;
p = (struct simpul *) malloc(sizeof(struct simpul));
strcpy(p->nama, nama);
if (first != NULL)
{
q = first;
while (q-> nama < nama)
{
k = q;
q = q->link;
}
p->link = q;
Halaman 11
Modul Struktur Data k->link = p;
printf(“\n sisip
tengah “);
}
else
{
insert_awal()}
}
}
void delete_awal(void)
{
struct simpul *p;
if (first != NULL)
{
p = first;
first = first->link;
p->link = NULL;
strcpy(nama,p->nama);
free(p);
printf(“\n nama = % s”,nana);
}
else
{
printf(“\n list kosong“);
}
}
void delete_akhir(void)
{
struct simpul *p, *q;
if (first !=NULL)
{
p = first;
While (p->link != NULL)
{
q = p;
p = p->link;}
q->link = NULL;
strcpy(nama, q->nama);
printf(“\n
nama =5s “, nama);
free(p);
}
}
}
Halaman 12
Modul Struktur Data Circular Doubly Linked List Kondisi kosong : head‐>right = head; head‐>left = head; H
Kondisi isi: ƒ Record‐1 : head‐>right ƒ Record head tidak berisi data void insert_tengah(void)
{
struct simpul *p, *q;
p = (struct simpul *) malloc(sizeof(struct
strcpy(p->nama,nama);
if (head->right) != head) {
q = head-> right;
while (q->nama < nama) {
q = q->right;
}
p->right = q
p->left = q->left;
q->left->right = p;
q->left = p;
printf(“ \n sisip tengah”);
} else {
p->right = head;
p->left = heat;
head->right = p;
head->left = p;
printf(“ \n
create file”);
}
}
simpul);
Halaman 13
Modul Struktur Data Circular Doubly Linked List Kondisi kosong: Head ‐> right = head; Head ‐> left = head; Head Kondisi isi: Record‐1: head‐>right; Record head tidak berisi data; Head Head
void insert_tengah(void)
{ struct simpul *p, *q;
p = (struct simpul *) malloc(sizeof(struct
strcpy(p->nama,nama);
if (head->right) != head){
q = head-> right;
while (q->nama < nama) {
q = q->right;
}
p->right = q
p->left = q->left;
q->left->right = p;
q->left = p;
printf(“sisip tengah”);
} else {
p->right = head;
p->left = heat;
head->right = p;
head->left = p;
printf(“create file”); }
}
simpul);
Halaman 14
Modul Struktur Data STRUKTUR DATA NON‐LINIER Terdiri dari : ƒ Struktur Pohon ƒ Graph STRUKTUR POHON Definisi dari pohon adalah: Susunan dari satu atau lebih simpul (node) yang terdiri dari satu simpul sebagai akar (root) dan sisanya membentuk subtree dari akar. Gambar pohon secara umum adalah sebagai berikut: Level 1 A
B C
C D
F
J G
K
H
Level 2 I
Level 3 L
Level 4 Akar dari pohon ini adalah A Satu simpul berisi: ƒ data atau info ƒ alamat simpul yang dihubungkan dengan link Jumlah subtree dari satu simpul disebut derajat (degree) ƒ A berderajat 3 ƒ B ,, 1 ƒ D ,, 3 Struktur pohon yang terkenal adalah struktur pohon Biner, dimana setiap simpul maksimum derajatnya adalah 2. Halaman 15
Modul Struktur Data A
B D
C
E G F
H
I
Proses dalam struktur data akan mudah digambarkan bila diketahui: ƒ n = jumlah simpul ƒ k = derajat pohon maka : ƒ Jumlah link = n . k ƒ Jumlah null‐link = n (k‐1) +1 ƒ Jumlah non‐zero link = n‐1 Dari pohon biner diatas terlihat : n = 9 k = 2 maka : jumlah link = 9 . 2 = 18 jumlah null‐link = 9 . (2 – 1) +1 = 10 jumlah non‐zero link = 9 – 1 = 8 Penelusuran Pohon Biner Adalah suatu ide untuk melakukan penelusuran (traversing) atau kunjungan (visiting) masing‐masing simpul sebanyak 1 kali. Penelusuran ini akan menghasilkan urutan linier dari informasi Ada 3 cara penelusuran, yaitu: ƒ inorder ƒ preorder ƒ postorder Penelusuran inorder: ƒ Telusuri subtree kiri dalam inorder ƒ Proses simpul akar ƒ Telusuri subtree kanan dalam inorder Halaman 16
Modul Struktur Data +
*
/
D
**
A
B
E
C
Hasil penelusuran dari pohon di atas adalah : A / B ** C * D + E Penelusuran Preorder: ƒ Proses simpul akar ƒ Telusuri subtree kiri dalam Preorder ƒ Telusuri subtree kanan dalam ƒ Preorder Lihat gambar di atas maka hasil penelusuran Preorder adalah: + * / A ** B C D E Penelusuran Postoeder: ƒ Telusuri subtree kiri dalam postorder ƒ Telusuri subtree kanan dalam postoeder ƒ Proses simpul akar Hasil penelusuran dari pohon di atas adalah: A B C ** / D * E + Halaman 17
Download