Anda di halaman 1dari 140

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 Final Project (Tim)

: 20 % : 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. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.

12.
13. 14. 15. 16.

Pengantar + Fungsi Rekursi 1 Fungsi Rekursi 2 Review Array dan Struct Sorting 1 : Bubble dan Insertion Sorting 2 : Selection Searching Review Pointer UTS Linked List 1 : Single Linked List Linked List 2 : Linked List Lanjut Stack 1 Operasi Dasar Stack 2 Contoh Penggunaan Queue Graph Tree 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.
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 :

out if else + return() Recursive call dengan value baru


Way

Simple Example
#include<stdio.h> int main(void) { printf("Never ends\n"); main(); return 0; }

Faktorial
ALGORITMA n! = 1 if n == 0 n! = n * ( n 1 )! if n > 0 4! = 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 == 1 a * b = a * ( b 1 ) + a if b > 1 6x3=(6x2)+6 =(6x1)+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 fn0 is a famous series defined by: f0 : 0, f1 : 1, fn2 : fn1 + fn2 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

Fibonacci
ALGORITMA fibo( n ) = n if n == 0 or n == 1 fibo( n ) = fibo(n 2) + fibo( n 1 ) if n >= 2 fibo( 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) = ?
1+1=2 F(3) 1+0=1 F(2) 1 F(1)

F(4)

2+1=3 1+0=1 F(2) 1 F(1) 0 F(0)

1 F(1) F(0) 0

Towers of Hanoi
ALGORITMA 1. 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 CODE void 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 dasar


Array Struct

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. 3 4 2 1 7 Struktur data : Alokasi memori bersifat statis/ tetap. Konsep : string, array multidimensi

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. 10 Struktur data :

314.0 62.8

Konsep : struct of struct (nested struct).

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 :
100 Abdullah 3.80 101 Budi 3.45 102 Candra 3.22 103 Daud 3.17

Untuk akses elemen dimulai dari indeks array kemudian diikuti nama elemennya mhs[3].NPM = 1234;

Contoh Program
Program data mahasiswa. Program tabel fungsi kuadrat.

Minggu Keempat

Sorting
Tujuan : memahami proses tracing algoritma pengurutan. Beberapa jenis algoritma sorting :

Bubble

sort Selection 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 kecil
void 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

Sort Merge Sort Shell Sort

Minggu Keenam

Searching
Tujuan : memahami proses tracing algoritma pencarian. Jenis algoritma searching :

Sequential

search Indexed sequential search Binary search

Sequential Search
int 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 Search


int 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 lowlim else lowlim = pindex[i-1]; if ( i == indxsize ) hilim = n 1; //set hilim else 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, middle low = 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 List


Data 1 Data 1 Next node Data 2 Data 2 Data 3 Data 3 Next node

Next node
Data 4

Data 4
NO NEXT

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. Sohow 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 memori simpul1 = (simpulku *)malloc(sizeof(simpulku)); simpul2 = (simpulku *)malloc(sizeof(simpulku)); simpul3 = (simpulku *)malloc(sizeof(simpulku)); //isi data strcpy(simpul1->nama, Amin); strcpy(simpul2->nama, Budi); strcpy(simpul3->nama, Citra); simpul1->nilai=90; simpul2->nilai=20; simpul3->nilai=100; //sambungkan link-nya simpul1->next_simpul = simpul2; simpul2->next_simpul = simpul3; simpul3->next_simpul = NULL;

Alamat = 1000
Amin

Alamat = 1080
Budi

Alamat = 2370
Citra

90
1080

20
2370

100
NULL

simpul1
1000

simpul2
1080

simpul3
2370

Alamat = 1000
Amin

Alamat = 1080
Budi

Alamat = 2370
Citra

90
1080

20
2370

100
NULL Pointer Tail

simpul1
1000
Pointer Head

Ilustrasi Inserting a Node


T update

Alamat = 1000
Amin

Alamat = 1080
Budi

Alamat = 2370
Citra

90
1080

20
8460

100
NULL

simpul1
1000
New

Alamat = 8460 Dewi 98


2370

New->next = T->next T->next = New

Ilustrasi Deleting a Node


P update T

Alamat = 1000
Amin

Alamat = 1080
Budi

Alamat = 2370
Citra

90
2370

20
2370 free()

100
NULL

simpul1
1000

P->next = T->next free(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 dihapus temp = 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 struct Node };

data; /* or whatever */ *next_in_line;


pointer to next Node structure

A linked list node containing a forward and a backward pointer may be declared as follows
struct Node { int struct Node struct Node };
data; *next_in_line; *previous_in_line;

pointer to next Node structure


pointer to previous Node structure

Circular Linked List

Minggu Kesebelas

Stack
Definisi Stack Operasi-operasi dasar Stack

Push Pop

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 TOPnya 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


E X A TOP remove: POP X A TOP insert B: PUSH B B X A TOP

Y
O P K K P K P K K T R T W R T W R T

D
a

D
b

D
c

D
d

D
e

D
f

D
g

D
h

D
i

D
j

Deklarasi Struktur Data Stack


#define maxsize 100 // mendefinisikan maks ukuran data // dlm stack typedef struct { int top; // indeks TOP char items [ maxsize ] // array } stack; // nama tipe data baru yg dibuat // adalah stack

Deklarasi Fungsi-Fungsi Stack


void void void void

initialize ( stack *s) pop ( stack *s, char *x ) push ( stack *s, char x ) 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 = true s = the_empty_stack while ( 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 = false else { k = pop ( s ); if ( k is_not_the_matching_opener_of_symb ) valid = false } // end else } } // end while if ( ! empty ( s ) ) valid = false if ( valid ) output ( the string is valid ) else output ( the string is not valid );

Example Case
1. 2. 3.

Cek apakah string di bawah ini valid! (a+b)} (h-(j-(k-[l-n])) {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 symb while ( 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) opnd2 push ( 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

Enqueue Memasukkan item ke dalam queue. Dequeue Mengeluarkan item dari queue. Is_Full Mengecek apakah queue penuh. Is_Empty Mengecek apakah queue kosong. Initialize Membuat queue untuk pertama kali.

Deklarasi Struktur Data Queue


#define maxsize 100 typdef struct { int jumlah; //jumlah data int depan; //ujung depan int belakang; //ujung belakang char 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

LINIER
Elemen data tersusun secara berurutan. Contoh : stack dan queue

HIRARKI
Elemen data tersusun secara bertingkat. Contoh : tree

KOMPLEK
Elemen 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 nodes contain two links
None, one, or both of which may be NULL

Binary trees
All

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 traversal
1. Traverse the left subtree with an inorder traversal 2. Process the value in the node (i.e., print the node value) 3. Traverse the right subtree with an inorder traversal

Preorder traversal
1. Process the value in the node 2. Traverse the left subtree with a preorder traversal 3. Traverse the right subtree with a preorder traversal

Postorder traversal
1. Traverse the left subtree with a postorder traversal 2. Traverse the right subtree with a postorder traversal 3. 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

Anda mungkin juga menyukai