STRUKTURDATA
Pertemuan1s.d8
Sasaran:
Meningkatkan:
pemahaman pengetahuan tentang teori dasar struktur data dan penanganan
data
sertapembuatanalgoritmadanpenggunaanstrukturddalampemrograman
Materi:
1. KonsepdanDefinisi
- Tipedandefinisi
- OperasiData
2. StackdanQueue
- OperasidanaplikasiStack
- OperasidanaplikasiQueuedanDeque
3. LinkedList
- KonseppointerdariLinkedList
- OperasipointerdariLinkedList
- JenisLinkedListSingledanDouble
4. TreedanGraph
- Terminologi,karakteristikdanstrukturhirarkhiTree
- Terminologi,RepresentasidanTraversaldariGraph
Halaman1
ModullStrukturDatta
KonsepdanDefinisi
DefiniisiData
Adalahhfaktaataaukenyataaantercataatmengen naisuatuo obyek
Pengeertian dataa ini men
nyiratkan suatu nillai bisa daalam benttuk konsttanta atau
u
variab
bel
TipeD
Data
TipeDaata
Sedeerhana Terstrukttur
Boolean
n File
Set
Ada 5 macam,
m yaaitu:
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))
Halaman2
ModulStrukturData
Tipedataterstrukrur
Adalahtipedatadimanasatuvariabeldapatmenyimpanlebihdarisatunilaidata
Masingmasingnilaidatadisebutkomponen.
Ada5macam,yaitu:
1. DataString
Datayangberisisederetankarakterdimanabanyaknyakarakterbisaberubah
ubahsesuaikebutuhan
Bentukumum: charnamavariabel[ukuran]
Contoh: charnama[30]
2. Larik(array)
dimanavariabellarikhanyabisamenyimpan1tipedatasaja
Bentukumum:Tipedatanamavariabel[ukuran]
Contoh: floatX[5]
intdatax[10]
3. Record
terdiri dari beeberapa variabel dimana masingmasing variabel bisa
mempunyaitipeyangberbeda
Bentukumum:
structnama_tipe_struct
{
tipefield1;
tipefield2;
...................
tipefieldn;
}var_struct
Contoh:
structdata_tanggal
{
inttanggal;
intbulan;
inttahun;
}
structdata_mhs
{
charnama[25];
structdata_tanggal;
} info_mhs;
Halaman3
ModulStrukturData
nama_mhs
tanggal
info_mhs
data_tanggal bulan
tahun
4. Set(himpunan)
Memungkinkan suatu lokasi memori ditempati oleh satu atau lebih variabel
yangtipenyabisaberlainan.
1. union
Bentukumum:
Unionnama_union;
Contoh:
union
{
unsignedintdata_int;
unsignedchardata_char[20];
}bil_x;
2. enumerius
merupakanhimpunandarikonstantaintegeryangdiberinama
Bentukumum:
enumnama_enum
{
konstanta_1,jonstanta_2;
konstanta_n;
}var_1,var_2;
Contoh:
enummanusia{pria,wanita};
enummanusiajenis_kelamin;
Bilajenis_kelamindiisipriamakanilaijeniskelamin=0dansebaliknya
biladiisiwanitanilaijenis_kelamin=1
Halaman4
ModullStrukturDatta
5. Fille
Filee merupak kan organ
nisasi darii sejumlahh record seejenis. Maasingmasiing record
d
terrdiridarissatuatauleebihfieldd
danfieldterdiridariisatuatau ulebihkarrakter.
File
e
Re
ecord Record
Field Field
Charr C
Char
Tiped
dataPointter
Variabelpointerrberisialaamatdarisuatuobyeklain(yaaituobyek
kyangditu
unjukoleh
h
pointerrtersebutt)
Bentukkumum:
tipe*nama a_ponter
Contohh:
in
nt*pa;
paa=&x;(&berartiialamat)
Artinyapoin nterpameenunjukallamatx
Algoritm
madanPem
mrogram
man
Permmasalahannnya adalaah bagaim
mana suatu
u masalah
h dapat d
diselesaikaan dengan
n
algooritmayan
ngtepat.
DasaardasarA
Algoritma:
Statement
S elementerr;dan
Statement
S kontrol
Stateementelementerterdiridari:
Asignment
A t (X=5,X=YY)
Compariso
C n
Arithmatic
A cStatemennt
Halaman5
ModulStrukturData
Statementkontrolterdiridari:
Alternatif
Pengulangan
Percabangan
Statementelementer:
a. assignment
Untuk memberikan nilai ke variabel yang telah diseklarasikan. Bentuk
pernyataannyaadalah
Contoh:total=100;
b. comparison
Untukkeperluanpengambilankeputusandiperlukanoperatorrelasiseperti
>,<dll.,operasiaritmatik,operatorBoolean.
c. statementI/O
Untukmemasukkannilaikekomputermenggunakan:scanf(),getch()
Untukmengeluarkannilaimenggunakan:printf(),puts()
STACKDANQUEUE
Stack(tumpukan)danQueue(antrian)merupakanalokasimemorydalambentuk
array1dimensiataulebih.
Aplikasipenggunaanarrayadalah:
Stack(tumpukan)
Queue(antrian)
Dequeue(antrian2pintu)
PadaStackberlakukonsepLIFO(LastInFirstOut),
PadaQueueberlakukonsepFIFO(FirstInFirstOut),atau
FCFS(FirstComeFirstServe)
Pemilihanke3caratersebutdisesuaikandenganpermasalahanyangada:
STACK
Adalah suatu list yang penambahan (insert) atau penghapusan (deletion),
elemennyadilakukandisatuujung(Top)
Ada3kondisipadastack,yaitu:
Awal Top =0
Kosong Top=0
Penuh Top = N
Halaman6
ModulStrukturData
Prosesyangdapatdilakukanpadastackadalah:
1. push:untukmemasukkandatakedalamStack
Langkahyangdiperlukan
cekapakahTop<N
bilaya,tambahkantopdengan1
isikandatakestack
2. pop:mengeluarkan(delete)datadariStack
Langkahyangdiperlukan:
cekapakahTopmasih>0
Bilaya,copydatakesuatuvariabel
kurangkanTopdengan1
AlgoritmaPUSHdanPOP
#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;
Halaman7
ModulStrukturData
}
else { printf(\n\r stack kosong); }
}
Soal:buatfungsiPUSH
Aplikasistackantaralain:
1. Dalamsistemoperasi,padasaataktivitascalldanreturn
2. Pada proses kompilasi, untuk melakukan pengecekan kelengkapan pasangan
tandakurung,kurungkotak,dll.
QUEUE(antrian)
Prinsip: FIFO(FirstInFirstOut)
atau
FCFS(FirstComeFirstServe)
Ada2macampointer,yaitu:F(Front)danR(Rear)
UntukpengambilandatamenggunakanpointerFsedanguntukpemasukkandata
menggunakanpointerR
Bila kondisi kosong F=0 dan R=0 sedang kondisi penuh R=N maka syarat
antrianadalah:
F<=R
Prosesyangdapatdilakukanadalah:
1. INSERT,untukmemasukkankeantrian;
2. DELETE,untukmengeluarkandatadariantrian.
KondisiyangperludiperhatikanadalahkondisipenuhtapikosongyaituF=R=N
Subroutineinsert:
void insert(void)
{
if ( R< N )
{
R = R+ 1;
Q[R] = x;
printf( R = %d x = %d , R, x);
}
else
printf(antrian penuh);
}
Soal:buatprosedurDELETE
- CekF<R
- F=F+1
- X=Q[F]
- If(f=N)
{F=0;R=0}
Halaman8
ModulStrukturData
STRUKTURDATA
Pertemuan9s.d18
LinkedList
Pengelolaan memori secara dinamis artinya tidak perlu mengalokasikan memori
lebihawalsecarafixed.
Pengelolaanmemorisecaradinamisdapatdilakukan:
alokasimemori;dan
dealokasimemori
Alokasimemori:
void*malloc(jumlahbyte)
Dealokasimemori:
voidfree(void*nama_pointer)
contoh:
char*ptr;
ptr=(char*)malloc(500*sizeof(char));
free(ptr);
Ada2bagianpadasetiaprecordLinkedList,yaitu:
bagiandataatauinfo;dan
bagianalamatrecordnext
Ada4macamprosesyaitu:
LinierSinglyLinkedList
1000H Record1
Record2
2100H
2100H
1000H
2100H
Linier Doubly Linked List
Halaman9
ModulStrukturData
FIRST=1100H
1100H A100H
CircularSinglyLinkedList
FIRST
CircularDoublyLinkedList
HEAD=B100H
B100H A100H
LINIERSINGLYLINKEDLIST
Ada2bagianutamadarirecordLinierSinglyLinkedList,yaitu:
1. bagianyangberisidata/info;dan
2. bagianyangberusurecordnext
Deklarasirecordbaru:
structsimpul*p;
p=(structsimpul*)malloc(sizeofsimpul));
Prosesyangdapatdilakukanadalah:
insertrecordbaru
deleterecord
Halaman10
ModulStrukturData
Insert:
- awal
- tengah
- akhir
Delete:
- awal
- tengah
- akhir
formatrecord:
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;
Halaman11
ModulStrukturData
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);
}
}
}
Halaman12
ModulStrukturData
CircularDoublyLinkedList
Kondisikosong:
head>right=head;
head>left=head;
H
Kondisiisi:
Record1:head>right
Recordheadtidakberisidata
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);
}
}
Halaman13
ModulStrukturData
CircularDoublyLinkedList
Kondisikosong:
Head>right=head;
Head>left=head;
Head
Kondisiisi:
Record1:head>right;
Recordheadtidakberisidata;
Head
Head
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); }
}
Halaman14
ModulStrukturData
STRUKTURDATANONLINIER
Terdiridari:
StrukturPohon
Graph
STRUKTURPOHON
Definisidaripohonadalah:
Susunandarisatuataulebihsimpul(node)yangterdiridarisatusimpulsebagai
akar(root)dansisanyamembentuksubtreedariakar.
Gambarpohonsecaraumumadalahsebagaiberikut:
A Level1
B C D Level2
C F G H I Level3
J K
L Level4
AkardaripohoniniadalahA
Satusimpulberisi:
dataatauinfo
alamatsimpulyangdihubungkandenganlink
Jumlahsubtreedarisatusimpuldisebutderajat(degree)
Aberderajat3
B,,1
D,,3
Struktur pohon yang terkenal adalah struktur pohon Biner, dimana setiap simpul
maksimumderajatnyaadalah2.
Halaman15
ModulStrukturData
B C
D E F
G H I
Prosesdalamstrukturdataakanmudahdigambarkanbiladiketahui:
n=jumlahsimpul
k=derajatpohon
maka:
Jumlahlink=n.k
Jumlahnulllink=n(k1)+1
Jumlahnonzerolink=n1
Daripohonbinerdiatasterlihat:
n=9
k=2
maka:
jumlahlink=9.2=18
jumlahnulllink=9.(21)+1=10
jumlahnonzerolink=91=8
PenelusuranPohonBiner
Adalah suatu ide untuk melakukan penelusuran (traversing) atau kunjungan
(visiting)masingmasingsimpulsebanyak1kali.
Penelusuraniniakanmenghasilkanurutanlinierdariinformasi
Ada3carapenelusuran,yaitu:
inorder
preorder
postorder
Penelusuraninorder:
Telusurisubtreekiridalaminorder
Prosessimpulakar
Telusurisubtreekanandalaminorder
Halaman16
ModulStrukturData
* E
/ D
A **
B C
Hasilpenelusurandaripohondiatasadalah:
A/B**C*D+E
PenelusuranPreorder:
Prosessimpulakar
TelusurisubtreekiridalamPreorder
Telusurisubtreekanandalam
Preorder
LihatgambardiatasmakahasilpenelusuranPreorderadalah:
+*/A**BCDE
PenelusuranPostoeder:
Telusurisubtreekiridalampostorder
Telusurisubtreekanandalampostoeder
Prosessimpulakar
Hasilpenelusurandaripohondiatasadalah:
ABC**/D*E+
Halaman17