View
159
Download
5
Category
Preview:
Citation preview
STRUKTUR DATA
:: Fetty Tri Anggraeny ::
Tentang Saya
Fetty Tri Anggraeny, S.Kom HP : (031)83031803 Email :
fetty@upnjatim.ac.id atau fetty_ta@yahoo.com MK :
Bahasa Pemrograman, Struktur Data, Sistem Digital, Grafika Komputer Pengolahan Citra Digital Sistem Pakar atau Sistem Berbasis Pengetahuan
KONTRAK KULIAH
Toleransi keterlambatan 30 menit terhitung mulai pukul 10.00, berlaku bagi dosen dan mahasiswa
Pakaian SOPAN, berkerah, bebas rapi dan bersepatu.
NILAI : Tugas dan quiz : 20 % Final Project (Tim) : 20 % UTS : 30 % UAS : 30 %POIN PLUS :keaftifan dalam kelas maupun tugas
MATERI KULIAH
Fungsi Rekursi Review : Array, Struct, Pointer Sorting Searching Linked List Stack Queue Graph dan Tree
Satuan Acara Perkuliahan
1. Pengantar + Fungsi Rekursi 12. Fungsi Rekursi 23. Review Array dan Struct 4. Sorting 1 : Bubble dan Insertion 5. Sorting 2 : Selection6. Searching7. Review Pointer8. UTS9. Linked List 1 : Single Linked List10. Linked List 2 : Linked List Lanjut11. Stack 1 – Operasi Dasar12. Stack 2 – Contoh Penggunaan13. Queue14. Graph 15. Tree 16. UAS
Buku Referensi
Data Structures Using C and C++
2nd edition, Yedidyah Langsam, dkk Text book lain Internet www.google.com
What is programming?
PROGRAM = ALGORITMA + STRUKTUR DATA ALGORITMA :
SEQUENTIAL BRANCHING LOOPING/ REKURSI
STRUKTUR DATA : ARRAY STRUCT POINTER ADT : LINKED LIST, STACK, QUEUE, GRAPH, TREE,
DLL
MINGGU PERTAMA
Fungsi Rekursif
Definisi fungsi rekursif. Contoh 1 : Faktorial Contoh 2 : Perkalian Contoh 3 : Fibonacci Contoh 4 : Tower of Hanoi
Fungsi Rekursif
Fungsi biasa dipanggil oleh fungsi lain. Sedangkan fungsi rekursif dipanggil oleh dirinya sendiri.
A B C D A A A A
Fungsi Rekursif
Setara dengan proses looping/ iterasi faktorial, perkalian
Kadang rekursif lebih baik dari iterasi tower of hanoi
Terkadang sebaliknya fibonacci Komponen :
Way out if – else + return()Recursive call dengan value baru
Simple Example
#include<stdio.h>int main(void){
printf("Never ends\n");main();return 0;
}
FaktorialALGORITMA
n! = 1 if n == 0n! = n * ( n – 1 )! if n > 04! = 4 x 3! 3! = 3 x 2! 2! = 2 x 1! 1! = 1 x 0! 0! = 1
SOURCE CODE
int factorial ( int n ){ int x, y; if ( n == 0 ) return ( 1 ); x = n – 1; y = factorial ( x ); return ( n * y );}
Latihan tracing rekursi
Perkalian
ALGORITMA
a * b = a if b == 1a * b = a * ( b – 1 ) + a if b > 16 x 3 = ( 6 x 2 ) + 6 = ( 6 x 1 ) + 6 + 6 = 6 + 6 + 6 = 18
SOURCE CODE
int mult ( int a, int b ){ int c, d, sum; if ( b == 1 ) return ( a ); c = b – 1; d = mult ( a, c ); sum = d + a; return ( sum );}
Latihan tracing rekursi
Minggu Kedua
Fibonacci
The Fibonacci series fn≥0 is a famous series defined by:
f0 :≡ 0, f1 :≡ 1, fn≥2 :≡ fn−1 + fn−2
f2 = f0 + f1 = 0 + 1 = 1
f3 = f1 + f2 = 1 + 1 = 2
f4 = f2 + f3 = 1 + 2 = 3
f5 = f3 + f4 = 2 + 3 = 5 …. Leonardo Fibonacci
1170-1250
FibonacciALGORITMAfibo( n ) = n if n == 0 or n == 1fibo( n ) = fibo(n – 2) + fibo( n – 1 ) if n >= 2fibo( 4 ) = fibo( 3 ) + fibo( 2 ) = fibo( 2 ) + fibo ( 1 ) + fibo( 2 ) = fibo(1) + fibo(0) + fibo(1) + fibo(2) = 1 + fibo(0) + fibo(1) + fibo(2) = 1 + 0 + fibo(1) + fibo(2) = 1 + fibo(1) + fibo(2) = 1 + 1 + fibo(2) = 2 + fibo(2) = 2 + fibo(1) + fibo(0) = 2 + 1 + fibo(0) = 2 + 1 + 0 = 2 + 1 = 3
SOURCE CODE
int fibo ( int n ){ int x, y; if ( n <= 1 ) return ( n ); x = fibo ( n – 1); y = fibo ( n – 2); return ( x + y );}
Tracing Fibonacci
fibo (4) = ? F(4)
F(2)
F(1) F(0)
F(3)
F(1)F(2)
F(1) F(0)
1
0
1+0=1 1
1+1=2
1 0
1+0=1
2+1=3
Towers of HanoiALGORITMA1. If n == 1, move the single disk from A to C and stop.2. Move the top n – 1 disks from A to B, using C as auxiliary.3. Move the remaining disk from A to C.4. Move the n – 1 disks from B to C, using A as auxiliary.
SOURCE CODEvoid towers( int n, char from, char to, char aux){ if ( n == 1 ) { printf(“\nmove disk 1 from %c to %c”, from, to); return; } towers( n – 1, from, aux, to ); printf(“\nmove disk %d from %c to %c”, n, from, to); towers( n – 1, aux, to, from );}
Tracing Towers of Hanoi
towers(3, A, C, B) = ?
Tugas Rumah : TRACING
towers(4, A, C, B) = ? fibo(6) = ? factorial(5)=? mult(3,5)=?
Minggu Ketiga
Array dan Struct
Review struktur data dasarArrayStruct
Contoh analisa program
ARRAY
Tipe data turunan. Contoh deklarasi : int x[20]; SATU variabel untuk menyimpan BANYAK data
dengan TIPE data yang SAMA. Mempunyai INDEKS.
Struktur data : Alokasi memori bersifat statis/ tetap. Konsep : string, array multidimensi
4 3 2 1 7
Contoh program
Program menghitung rata-rata nilai. Algoritma :
Deklarasikan variabel array untuk menyimpan data-data nilai.
Input data nilai dengan perintah looping. Akses elemen dengan operator kurung siku ([]).
Hitung penjumlahan data-data nilai.Hitung rata-rata = jumlah total/ jumlah data.
STRUCT
Tipe data turunan. Contoh deklarasi :
struct {
int jari_jari;
float luas;
float keliling;
} lingkaran;
STRUCT Contd.
SATU variabel bisa menyimpan BANYAK data yang BERBEDA TIPE datanya. Mempunyai ELEMEN.
Struktur data :
Konsep : struct of struct (nested struct).
10
314.0
62.8
Contoh program
Program tentang lingkaran. Algoritma :
Inventarisasi atribut-atribut yang dimiliki oleh sebuah objek lingkaran.
Akses masing-masing elemen dengan memakai operator tanda titik (.).
ARRAY OF STRUCT
Struktur data berupa array yang setiap elemennya bertipe struct.
Contoh deklarasi :struct {
int NPM;char nama[30];float IPK;
} mhs[100];
Array of Struct Contd.
Struktur data :
Untuk akses elemen dimulai dari indeks array kemudian diikuti nama elemennya mhs[3].NPM = 1234;
100
Abdullah
3.80
101
Budi
3.45
102
Candra
3.22
103
Daud
3.17
Contoh Program
Program data mahasiswa. Program tabel fungsi kuadrat.
Minggu Keempat
Sorting
Tujuan : memahami proses tracing algoritma pengurutan.
Beberapa jenis algoritma sorting :Bubble sortSelection sort Insertion sort
Bubble Sort
void bubble ( int X [ ], int n ){
int hold, j, pass;for ( pass = 0; pass < n-1; pass++)
for ( j = 0; j < n-pass-1; j++)if ( X[j] > X[j+1] ){
hold = X[j];X[j] = X[j+1];X[j+1] = hold;
}}
Insertion Sort
void insertion ( int X [ ], int n ){
int i, k, y;for ( k = 1; k < n; k++){
y = X[k];for ( i = k-1; i >= 0 && y < X[i]; i--)
X[i+1] = X[i];X[i+1] = y;
}}
Minggu Kelima
Kuis kecilvoid urutkan ( int X [ ], int n ){
int temp, i, j;i=0;while(i<n-1){
for ( j = 0; j < n-i-1; j++){temp = X[j+1];if ( X[j] < X[j+1] ) {
X[j+1] = X[j];X[j] = temp;
}}i++;
}}
Selection Sort
void selection ( int X [ ], int n ){
int i, j, index, large;for ( i = n-1; i > 0; i--){
large = x[0];index = 0;for ( j = 1; j <= i; j++)
if ( X[j] > large ){
large = X[j];index = j;
}X[index] = X[i];X[i] = large;
}}
Tugas :
Algoritma dan contoh sortingnya :Quick SortMerge SortShell Sort
Minggu Keenam
Searching
Tujuan : memahami proses tracing algoritma pencarian.
Jenis algoritma searching :Sequential search Indexed sequential searchBinary search
Sequential Searchint SequentialSearch(int key, int data[], int n){
int i;for (i = 0; i < n; i++)
if (key == data[i])return (i);
return (-1);}
Indexed Sequential Searchint IndexSequential( int key, int k[], int n, int kindex[], int pindex[], int indxsize ){
int i, j, lowlim, hilim;for ( i = 0; i < indxsize && kindex[ i ] <= key; i++ );if ( i == 0 )
lowlim = 0; //set lowlimelse
lowlim = pindex[i-1];if ( i == indxsize )
hilim = n – 1; //set hilimelse
hilim = pindex[i] – 1;for ( j = lowlim; j <= hilim && k[ j ] != key; j++ );if ( j > hilim )
return (-1);else
return ( j );}
Latihan tracing
Binary Search
int BinarySearch(int key, int data[], int n){
int low, high, middlelow = 0;high = n – 1;while (low <= high){
middle = (low + high)/2;if (key == data[middle]
return(middle);if (key < data[middle]
high = middle – 1;else
low = middle + 1;}return(-1);
}
Latihan tracing
Minggu Ketujuh
POINTER
Adalah TIPE DATA TURUNAN Contoh deklarasi : int *pointerX; Variabel bertipe pointer digunakan untuk
menyimpan ALAMAT sebuah data, BUKAN NILAI datanya.
Operator yang sering dipakai:& mendapatkan alamat memori* mengakses nilai dari sebuah pointer
#include “stdio.h”void main(){int data, *pointer_data;data = 100;pointer_data = &data;printf(“Data = %d di alamat %p\n”, data, pointer_data);
}
POINTER KE ARRAY
#include “stdio.h”void main(){int data[5] = {2,4,3,1,5};int *pdata;pdata = &data[0];for(int i=0; i<5; i++)
printf(“%d\t”, *(pdata + i));}
POINTER KE STRUCT
#include “stdio.h”void main(){ struct {
int jari_jari;float luas;
}lingkaran, *pdata;pdata = &lingkaran;pdata->jari_jari = 10;pdata->luas = 314;printf(“Jari jari = %d\tLuas = %f\n”, pdata->jari_jari, pdata->luas);
}
Minggu Kedelapan
Ujian Tengah Semester
Minggu Kesembilan
(Single) Linked List
Definisi linked list Operasi dasar Contoh program
Ilustrasi Singly Linked ListData 1
Next node
Data 1 Data 2
Next node
Data 2 Data 3
Next node
Data 3
Data 4
NO NEXT
Data 4
In this linked list example, each node has two pieces of data. Each node also has a pointer to the next node.
So, we need two things to form a linked list: a way to combine various datatypes and variables together into one datatype and a way to “point” to the next one of these combination datatypes.
So…how can we accomplish this?
The first goal, combining various datatypes and variables into one datatype, is easily handled with a structure.
The second goal, being able to “point” to the next structure is easily handled using pointers.
So, we have all of the components we need in order to construct a linked list.
Linked List
Struktur data yang terdiri dari beberapa simpul (node) dimana setiap simpulnya saling terhubung (linked).
Simpul berupa struct, sedangkan link berupa komponen simpul yang bertipe pointer ke simpul.
Bersifat dinamis. Memakai perintah malloc() dan free(). Umumnya memiliki pointer head untuk menunjukkan
alamat simpul terdepan dan pointer tail untuk menunjukkan simpul terakhir.
Operasi penambahan/ penghapusan sebuah simpul akan meng-update nilai pointer link-nya.
Pointer link simpul terakhir diberi nilai NULL (kecuali untuk circular linked list).
Linked List Sederhana
Deklarasi struktur data :
typedef struct simpul {
char nama[20];
float nilai;
struct simpul *next_simpul;
} simpulku;
void main()simpulku *simpul1, *simpul2, *simpul3;//alokasi memorisimpul1 = (simpulku *)malloc(sizeof(simpulku));simpul2 = (simpulku *)malloc(sizeof(simpulku));simpul3 = (simpulku *)malloc(sizeof(simpulku));//isi datastrcpy(simpul1->nama, “Amin”);strcpy(simpul2->nama, “Budi”);strcpy(simpul3->nama, “Citra”);simpul1->nilai=90; simpul2->nilai=20;simpul3->nilai=100;//sambungkan link-nyasimpul1->next_simpul = simpul2;simpul2->next_simpul = simpul3;simpul3->next_simpul = NULL;
Citra
NULL
100
Alamat = 2370
2370
Budi
2370
20
Alamat = 1080
1080
Amin
1080
90
Alamat = 1000
1000
simpul1 simpul3simpul2
Citra
NULL
100
Alamat = 2370
Budi
2370
20
Alamat = 1080
Amin
1080
90
Alamat = 1000
1000
simpul1Pointer Head
Pointer Tail
Ilustrasi Inserting a Node
Citra
NULL
100
Alamat = 2370
Budi
8460
20
Alamat = 1080
Amin
1080
90
Alamat = 1000
1000
simpul1
2370
Alamat = 8460
Dewi
98
update
T
New
New->next = T->nextT->next = New
Ilustrasi Deleting a Node
Citra
NULL
100
Alamat = 2370
Budi
2370
20
Alamat = 1080
Amin
2370
90
Alamat = 1000
1000
simpul1
free()
update
P T
P->next = T->nextfree(T)
Contoh Program Linked List
#include "stdio.h"#include "stdlib.h"#include "conio.h"
struct node{int info;struct node *next;
};typedef struct node *simpul;
void main(){
simpul baru, head=NULL, tail=NULL, temp;int pilih;do{
printf("MENU\n");printf("1. Insert\n");printf("2. View\n");printf("3. Search\n");printf("4. Delete\n");printf("PILIH: ");scanf("%d", &pilih);switch(pilih){ ………}
}while (pilih!=5);}
Insert Node
case 1:int data;printf("Data Masuk: "); scanf("%i", &data);baru = (simpul) malloc(sizeof (struct node));baru->info = data;baru->next = NULL;if (head == NULL) //list masih kosong{ //simpul yg pertama kali head = baru; tail = baru;}else{ tail->next = baru; tail = baru;}break;
Show All Node
case 2:temp = head;while(temp!=NULL){ printf("%i ", temp->info); temp = temp->next;}printf("\n");break;
Search a Node
case 3:int cari;printf("Cari Angka: ");scanf("%i", &cari);temp = head;while((temp!=NULL)&&(temp->info!=cari)){ temp = temp->next;}if(temp != NULL && temp->info == cari)
printf("Data Ditemukan");else //if(temp == NULL)
printf("Data Tidak Ditemukan");printf("\n");break;
Delete a Node
case 4:int hapus;char jwb;simpul prev = NULL;printf("Hapus Angka: ");scanf("%i", &hapus);
//temukan dulu node yang akan dihapustemp = head;while((temp!=NULL)&&(temp->info!=hapus)){ prev = temp; temp = temp->next;}
//bersambung…
if(temp != NULL && temp->info == hapus) //ditemukan{ printf("Yakin Dihapus? (y/t)"); flushall(); jwb=getch(); if(jwb == 'y') { if(temp->next != NULL && temp != head)
prev->next = temp->next;else if (temp->next == NULL)
prev->next = NULL; else if (temp == head && head->next == NULL)
head = NULL; else if (temp == head && head->next != NULL)
head = head->next;free(temp); //hapus node-nya
}else
printf("Batal Dihapus");}else
printf("Data Tidak Ditemukan");printf("\n");break;
Capture Program
Minggu Kesepuluh
Macam-macam List
Singly linked list Doubly linked list Singly circular linked list Doubly circular linked list
Singly and Doubly A linked list node containing a single forward pointer
may be declared as follows
struct Node {int data; /* or whatever */struct Node *next_in_line;
};
struct Node {int data; /* or whatever */struct Node *next_in_line;
};
pointer to next Node structure
A linked list node containing a forward and a A linked list node containing a forward and a backward pointer may be declared as followsbackward pointer may be declared as follows
struct Node {int data;struct Node *next_in_line;struct Node *previous_in_line;
};
struct Node {int data;struct Node *next_in_line;struct Node *previous_in_line;
};pointer to previous Node structure
pointer to next Node structure
Circular Linked List
Minggu Kesebelas
Stack
Definisi Stack Operasi-operasi dasar Stack
PushPop
Contoh program operasi dasar Stack menggunakan array
STACK (TUMPUKAN)
Kumpulan items yang teratur dimana items baru akan dimasukkan ke dan sebuah items akan dikeluarkan dari satu ujung yang sama, yaitu dari TOP sebuah stack.
Struktur data linier dimana hanya bagian TOP-nya saja yang bisa diakses.
Bersifat LIFO = Last In First Out. Bisa diimplementasikan menggunakan array
atau Linked List.
Last In First Out
Penggunan Stack
History pada web browser. Undo Log pada text editor. Pemrosesan struktur bersarang (nested) :
loop, rekursi, fungsi, dll. Algoritma back tracking – Artificial
Intelegence
Operasi Dasar Stack
Push : memasukkan sebuah item baru ke dalam stack.
Pop : mengeluarkan sebuah item dari stack. Operasi lain : Is_Empty, Is_Full
Note : pop dan push dilakukan melalui ujung yang sama (TOP)
Visualisasi Operasi Stack
X
A
EX
A
BX
A
TOP
remove: “POP”
TOP
insert ‘B’: PUSH ‘B’
TOP
D
K
D
K
P
D
K
P
O
D
K
P
D
K
D D
T
D
T
R
D
T
R
W
D
T
R
W
Y
a b c d e f g h i j
Deklarasi Struktur Data Stack
#define maxsize 100// mendefinisikan maks ukuran data// dlm stacktypedef struct {int top; // indeks TOPchar items [ maxsize ] // array
} stack;// nama tipe data baru yg dibuat// adalah stack
Deklarasi Fungsi-Fungsi Stack
void initialize ( stack *s) void pop ( stack *s, char *x ) void push ( stack *s, char x ) void show ( stack *s )
Fungsi Initialize
void initialize ( stack *s)
// operasi initialize dg parameter
// s bertipe pointer stack
{ s -> top = -1;
// top = -1 stack dlm kondisi empty
}
Fungsi Push
void push ( stack *s, char x ){if (s->top > maxsize) // stack is full
printf("\nERROR: the stack is full!");else {
s->top = s->top + 1; s->items [ s->top ] = x;printf("\nPUSH SUCCEED");
}}
Fungsi Pop
void pop ( stack *s, char *x ){if (s->top < 0) // stack is empty
printf("\nERROR: the stack is empty!");else {
*x = (s->items [ s->top ]);s->top = s->top - 1;printf("\nPOP SUCCEED");
}}
Fungsi Show
void show( stack *s )
{
printf("\nISI STACK :\n");
for(int i=s->top; i>=0; i--)
printf("\t%c\n", s->items[i]);
printf("\n");
}
Fungsi Main
void main(){
stack *my_stack, s;char item, *x;my_stack = &s;x = &item;initialize(my_stack);push(my_stack, 'A'); push(my_stack, 'R');push(my_stack, 'I'); push(my_stack, 'F');show(my_stack);pop(my_stack, x); pop(my_stack, x);show(my_stack);pop(my_stack, x); pop(my_stack, x);show(my_stack);
}
Output Program
Stack – Linked List
Jika sebuah linked list SELALU menambahkan node baru dan menghapus node lama dari salah SATU ujungnya saja (posisi Head ataukah Tail) STACK.
TOP = head untuk single linked list. TOP = tail untuk double linked list. HOW?
Push Operation
Pop Operation
Minggu Keduabelas
Pengecekan Tanda Kurung
valid = trues = the_empty_stackwhile ( we_have_not_read_the_entire_string ){ read the next symbol (symb) of the string
if ( symb == ‘(‘ || symb == ‘[‘ || symb == ‘{‘ )push ( s, symb )
if ( symb == ‘)‘ || symb == ‘]‘ || symb == ‘}‘ ){if ( empty ( s ) ) valid = falseelse{ k = pop ( s );
if ( k is_not_the_matching_opener_of_symb )valid = false
} // end else }} // end whileif ( ! empty ( s ) ) valid = falseif ( valid ) output ( “the string is valid” )else output ( “the string is not valid” );
Example Case
Cek apakah string di bawah ini valid!
1. (a+b)}
2. (h-(j-(k-[l-n]))
3. {x+(y-[a+b])*c-[(d+e)]}
Evaluasi Postfix
Postfix adalah bentuk persamaan matematika dimana operator ditulis setelah kedua operannya.
Contoh :AB+CDE*-FG/H+
Latihan : Ubah ke postfix((A+B)*C – (D – E))^(F+G)
Algoritma Infix Postfix
Tambahkan tanda kurung untuk mengelompokkan operasi.
Keluarkan operator ke sebelah kanan tanda kurung untuk setiap kelompok satu per satu.
Hilangkan semua tanda kurung.
Algoritma Evaluasi Postfix
opndstck = the_empty_stack/* scan the input string, one by one element, into symbwhile ( not_end_of_input_string ){ symb = next_input_character
if ( symb_is_an_operand )push ( opndstck, symb )else /* symb is an operator */{ opnd2 = pop ( opndstck )
opnd1 = pop ( opndstck )value = opnd1 (symb) opnd2push ( opndstck, value )
} /* end else */} /* end while */return ( pop ( opndstck ) )
Latihan :
Jika A = 1, B = 2, C = 3, hitunglah :
1. AB+C–
2. ABC+–
3. AB*CD+^
Minggu Ketigabelas
Queue
Definisi Queue Operasi-operasi dasar Queue
Insert/ enqueue Remove/ dequeue
Contoh program operasi dasar Queue menggunakan array
Queue
Sequence of items. Items dimasukkan dari ujung belakang,
dikeluarkan dari ujung depan. Bersifat FIFO (First In First Out).
Jenis Queue
Normal queue. Circular queue. DE-queue (double ended).
Ex. High and low priority policy Priority queue.
Penggunaan Queue
Waiting list – birokrasi. Simulasi sistem antrian. Antrian printer jobs. Antrian proses multitasking dalam CPU. Antrian playlist winamp.
Operasi Dasar
EnqueueMemasukkan item ke dalam queue.
DequeueMengeluarkan item dari queue.
Is_FullMengecek apakah queue penuh.
Is_EmptyMengecek apakah queue kosong.
InitializeMembuat queue untuk pertama kali.
Deklarasi Struktur Data Queue
#define maxsize 100typdef struct {
int jumlah; //jumlah dataint depan; //ujung depanint belakang; //ujung belakangchar data [ maxsize ]; //array isi
queue}queue;
Initialize
void initialize ( queue *q )
{
q -> jumlah = 0;
q -> depan = 0;
q -> belakang = 0;
}
Is_Empty
int Is_Empty ( queue *q )
{
if (q -> jumlah == 0)
return (1);
else
return (0);
}
Is_Full
int Is_Full ( queue *q )
{
if (q -> jumlah == maxsize)
return (1);
else
return (0);
}
Enqueue
void enqueue ( char X, queue *q ) {if ( Is_Full(q) )
printf(“\nERROR: queue sudah penuh\”);else {
q->data[q->belakang] = X;q->belakang = (q->belakang+1)%maxsize;++(q->count);
}}
Dequeue
void dequeue ( queue *q, char X ) {if ( Is_Empty(q) )
printf(“\nERROR: queue sudah kosong\”);else {
X = q->data[q->depan];q->depan = (q->depan+1)%maxsize;--(q->count);
}}
Show_Queue
void show_queue(queue *q)
{
printf("\nIsi Queue:\n");
for(int i=q->depan; i<q->belakang; i++)
printf("%c ", q->data[i]);
printf("\n");
}
Note: script ini khusus untuk normal queue
void main()
queue kyu, *q; char x, *px;q = &kyu; px = &x;inisialisasi(q);enqueue('Q', q); show_queue(q); enqueue('U', q); show_queue(q);enqueue('E', q); show_queue(q); enqueue('U', q); show_queue(q);enqueue('E', q); show_queue(q);dequeue(q,px); show_queue(q); dequeue(q,px); show_queue(q);dequeue(q,px); show_queue(q);dequeue(q,px); show_queue(q);dequeue(q,px); show_queue(q);
Output
Queue – Linked List
Jika sebuah linked list SELALU menambahkan node baru di ujung Tail dan SELALU menghapus node lama dari ujung Head QUEUE.
Front = head. Rear = tail. Single atau Double linked list?
Enqueue Operation
Dequeue Operation
Minggu Keempatbelas
Graph
Macam struktur data
LINIERElemen data tersusun secara berurutan.Contoh : stack dan queue
HIRARKIElemen data tersusun secara bertingkat.Contoh : tree
KOMPLEKElemen data tersusun secara kombinasional.Contoh : graph
Graph & Tree
Struktur data non-linier. Penambahan atau penghapusan elemen data
tidak mengakibatkan strukturnya tumbuh atau menyusut secara linier (garis lurus).
Strukturnya bersifat hierarkis multidimensi 2 dimensi atau lebih.
Umumnya diimplementasikan dengan array multidimensi atau linked list multilink.
Pengenalan Graph
Komponen penyusun : Vertices (node) Edges (arc/ link)
Jenis : Weighted/ non weighted graph Directed/ non directed graph
Traversal (penelusuran) : DFS (Depth First Search) BFS (Breadth First Search)
Contoh kasus : path lintasan terpendek
Contoh Struktur Data# define MAXNODES 50
struct node{/* informasi sebuah node */
};Struct arc{
int adj;/* informasi sebuah arc */
};Struct graph{
struct node nodes[MAXNODES];struct arc arcs[MAXNODES][MAXNODES];
};Struct graph g;
DFS
Pencarian dilakukan dari node awal (root) lalu ke simpul anak hingga yang paling akhir (leaf)
Jika tujuan yang diinginkan belum tercapai maka pencarian dilanjutkan ke cabang sebelumnya
BFS
Pencarian dilakukan dengan mengunjungi setiap node pada level yang sama sampai mencapai tujuan atau sampai node terakhir
Minggu Kelimabelas
Presentasi Tree
Pengenalan Tree
Tree nodes contain two or more links All other data structures we have discussed only
contain one
Binary trees All nodes contain two links
None, one, or both of which may be NULL
The root node is the first node in a tree. Each link in the root node refers to a child A node with no children is called a leaf node
Struktur Data
#define NUMNODES 500
Struct nodetype{
int info;
int left;
int right;
int father;
};
Struct nodetype node[NUMNODES];
Struct nodetype{
int info;
struct nodetype *left;
struct nodetype *right;
struct nodetype *father;
};
Struct nodetype *NODEPTR;
Tree traversals
Inorder traversal1. Traverse the left subtree with an inorder traversal2. Process the value in the node (i.e., print the node value)3. Traverse the right subtree with an inorder traversal
Preorder traversal1. Process the value in the node2. Traverse the left subtree with a preorder traversal3. Traverse the right subtree with a preorder traversal
Postorder traversal1. Traverse the left subtree with a postorder traversal2. Traverse the right subtree with a postorder traversal3. Process the value in the node
Binary Tree Search
p = tree;
while ( p != null && key != pinfo)
if (key < pinfo)
p = pleft;
else
p = pright;
return (p);
Minggu Keenambelas
Ujian Akhir Semester
Recommended