Halaman 1
STRUKTUR DATA
Pertemuan s.d
Sasaran:
Meningkatkan:
pemahaman pengetahuan tentang teori dasar struktur data dan penanganan data
serta pembuatan algoritma dan penggunaan strukturd dalam pemrograman
Materi :
. Konsep dan Definisi
- Tipe dan definisi - Operasi Data
. Stack dan Queue
- Operasi dan aplikasi Stack
- Operasi dan aplikasi Queue dan Deque
. Linked List
- Konsep pointer dari Linked List
- Operasi pointer dari Linked List
- Jenis Linked List Single dan Double
. Tree dan Graph
- Terminologi, karakteristik dan struktur hirarkhi Tree
- Terminologi, Representasi dan Traversal dari Graph
Konsep
Tipe da Hanya
ertian data bel
Data
ata sederha dimungkin
macam, ya angan bulat angan real p angan real p
akter
bertipe (un
olean (oper
Rea
nkan untuk
aitu: t (integer) presisi tung presisi gan
nsign) rator logik)
Sede
al
Flat
Double
aan tercata
nyiratkan
k menyimp
ggal nda
)
erhana
at mengen
suatu nil
an satu nila
Tipe Da
lai bisa da
ai dalam sa
ata
r
er
n
obyek
alam bent
atu variabe
Terstrukt
Halaman
tuk konst
tanta atau
u
Halaman 3
Tipe data terstrukrur
Adalah tipe data dimana satu variabel dapat menyimpan lebih dari satu nilai data Masing‐masing nilai data disebut komponen.
Ada macam, yaitu: . Data String
Data yang berisi sederetan karakter dimana banyaknya karakter bisa berubah‐ ubah sesuai kebutuhan
Bentuk umum : char nama variabel[ukuran]
Contoh : char nama[ ]
. Larik array
dimana variabel larik hanya bisa menyimpan tipe data saja Bentuk umum : Tipe data namavariabel[ukuran]
Contoh : float X[ ] int datax[ ] . Record
terdiri dari beeberapa variabel dimana masing‐masing variabel bisa mempunyai tipe yang berbeda
Bentuk umum :
struct nama_tipe_struct {
tipe field‐ ; tipe field‐ ; ... tipe field‐n; } var_ struct
Contoh :
struct data_tanggal {
int tanggal; int bulan; int tahun; }
struct data_mhs {
Halaman 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[ ]; } bil_x;
2. enumerius
merupakan himpunan dari konstanta integer yang diberi nama Bentuk umum:
enum nama_enum {
konstanta_ , jonstanta_ ; konstanta_n;
} var_ , var_ ;
Contoh:
enum manusia { pria, wanita }; enum manusia jenis_kelamin;
Bila jenis_kelamin diisi pria maka nilai jenis kelamin= dan sebaliknya bila diisi wanita nilai jenis_kelamin=
info_mhs
nama_mhs
data_tanggal
tanggal
bulan
5. Fil
e merupak
rdiri dari s
data Point
el pointer r tersebut
k umum: pe *nama
Asignment Compariso
a_ponter
& berarti
nter pa me
mrogram
nnya adala ng tepat.
c Statemen Char
nisasi dari ebih field d
amat dari
i alamat
enunjuk al
man
ah bagaim
dan field t
suatu oby
lamat x
mana suatu
File
ecord
Char Fiel
h record se
erdiri dari
ek lain ya
u masalah
e
d
Record
ejenis. Ma i satu atau
aitu obyek
h dapat d
Halaman
asing‐masi
ing record
rakter.
unjuk oleh
an dengan
d
h
Halaman 6
Statement kontrol terdiri dari:
Alternatif
Pengulangan
Percabangan
Statement elementer:
a. assignment
Untuk memberikan nilai ke variabel yang telah diseklarasikan. Bentuk pernyataannya adalah
Contoh: total = ;
b. comparison
Untuk keperluan pengambilan keputusan diperlukan operator relasi seperti > , < dll. , operasi aritmatik, operator Boolean.
c. statement )/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 dimensi atau lebih.
Aplikasi penggunaan array adalah :
Stack tumpukan
Queue antrian
Dequeue antrian pintu
Pada Stack berlaku konsep L)FO Last In First Out ,
Pada Queue berlaku konsep F)FO First In First Out , atau
FCFS First Come First Serve
Pemilihan ke cara tersebut disesuaikan dengan permasalahan yang ada:
STACK
Adalah suatu list yang penambahan insert atau penghapusan deletion ,
elemennya dilakukan di satu ujung Top
Ada kondisi pada stack, yaitu : Awal Top =
Halaman 7
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
isikan data ke stack
. pop: mengeluarkan delete data dari Stack
Langkah yang diperlukan :
cek apakah Top masih >
Bila ya, copy data ke suatu variabel
kurangkan Top dengan
Algoritma PUS( 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];
Halaman 8
}
else { printf(“\n\r stack kosong”); } }
Soal: buat fungsi PUS(
Aplikasi stack antara lain :
. Dalam sistem operasi, pada saat aktivitas call dan return
. Pada proses kompilasi, untuk melakukan pengecekan kelengkapan pasangan tanda kurung, kurung kotak, dll.
QUEUE
antrian
Prinsip: F)FO First In First Out
atau
FCFS First Come First Serve
Ada 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= dan R= sedang kondisi penuh R=N maka syarat antrian adalah:
F <= R
Proses yang dapat dilakukan adalah:
. )NSERT, untuk memasukkan ke antrian;
. 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 + - X = Q[F] - )f f=N
{ F= ; R= }
Halaman 9
STRUKTUR DATA
Pertemuan s.d
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 * sizeof char ; free ptr ;
Ada bagian pada setiap record Linked List, yaitu:
bagian data atau info; dan
bagian alamat record next
Ada macam proses yaitu:
Linier Singly Linked List
Linier Doubly Linked List
( Record
(
(
( Record
Halaman 10
Circular Singly Linked List
Circular Doubly Linked List
LINIER SINGLY LINKED LIST
Ada bagian utama dari record Linier Singly Linked List, yaitu:
. bagianyang berisi data/info ; dan . 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
A ( (EAD = B (
A (
B (
B ( B (
A ( A (
F)RST
C (
B ( C (
A ( B (
N)L
F)RST = (
A ( ( N)L
Halaman 11
)nsert:
- 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; }
Halaman 12
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 13
Circular Doubly Linked List
Kondisi kosong : head‐>right = head; head‐>left = head;
Kondisi isi:
Record‐ : head‐>right
Record head tidak berisi data
void insert_tengah(void) {
struct simpul *p, *q;
p = (struct simpul *) malloc(sizeof(struct simpul); 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”); }
}
Halaman 14 Circular Doubly Linked List
Kondisi kosong:
(ead ‐> right = head; (ead ‐> left = head;
Kondisi isi:
Record‐ : head‐>right; Record head tidak berisi data;
void insert_tengah(void) { struct simpul *p, *q;
p = (struct simpul *) malloc(sizeof(struct simpul); 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”); } }
(ead
(ead
Halaman 15 STRUKTUR DATA NON‐L)N)ER
Terdiri dari :
Struktur Pohon
Graph
STRUKTUR PO(ON
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:
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
B ,,
D ,,
Struktur pohon yang terkenal adalah struktur pohon Biner, dimana setiap simpul maksimum derajatnya adalah .
A
C
B D
( )
G F
C
K J
L
Level
Level
Level
Halaman 16
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‐ +
Jumlah non‐zero link = n‐
Dari pohon biner diatas terlihat : n =
k = maka :
jumlah link = . =
jumlah null‐link = . – + = jumlah non‐zero link = – =
Penelusuran Pohon Biner
Adalah suatu ide untuk melakukan penelusuran traversing atau kunjungan
visiting masing‐masing simpul sebanyak kali.
Penelusuran ini akan menghasilkan urutan linier dari informasi
Ada cara penelusuran, yaitu:
inorder
preorder
postorder
Penelusuran inorder:
Telusuri subtree kiri dalam inorder
Proses simpul akar
Telusuri subtree kanan dalam inorder
A
B C
D E F
Halaman 17
(asil 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
(asil penelusuran dari pohon di atas adalah: A B C ** / D * E +
+
* E
/ D
A **