struktur data 07-08 v2

140
STRUKTUR DATA :: Fetty Tri Anggraeny ::

Upload: yuwahaj

Post on 03-Dec-2014

159 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: Struktur Data 07-08 v2

STRUKTUR DATA

:: Fetty Tri Anggraeny ::

Page 2: Struktur Data 07-08 v2

Tentang Saya

Fetty Tri Anggraeny, S.Kom HP : (031)83031803 Email :

[email protected] atau [email protected] MK :

Bahasa Pemrograman, Struktur Data, Sistem Digital, Grafika Komputer Pengolahan Citra Digital Sistem Pakar atau Sistem Berbasis Pengetahuan

Page 3: Struktur Data 07-08 v2

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

Page 4: Struktur Data 07-08 v2

MATERI KULIAH

Fungsi Rekursi Review : Array, Struct, Pointer Sorting Searching Linked List Stack Queue Graph dan Tree

Page 5: Struktur Data 07-08 v2

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

Page 6: Struktur Data 07-08 v2

Buku Referensi

Data Structures Using C and C++

2nd edition, Yedidyah Langsam, dkk Text book lain Internet www.google.com

Page 7: Struktur Data 07-08 v2

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

Page 8: Struktur Data 07-08 v2

MINGGU PERTAMA

Page 9: Struktur Data 07-08 v2

Fungsi Rekursif

Definisi fungsi rekursif. Contoh 1 : Faktorial Contoh 2 : Perkalian Contoh 3 : Fibonacci Contoh 4 : Tower of Hanoi

Page 10: Struktur Data 07-08 v2
Page 11: Struktur Data 07-08 v2

Fungsi Rekursif

Fungsi biasa dipanggil oleh fungsi lain. Sedangkan fungsi rekursif dipanggil oleh dirinya sendiri.

A B C D A A A A

Page 12: Struktur Data 07-08 v2

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

Page 13: Struktur Data 07-08 v2

Simple Example

#include<stdio.h>int main(void){

printf("Never ends\n");main();return 0;

}

Page 14: Struktur Data 07-08 v2

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 );}

Page 15: Struktur Data 07-08 v2

Latihan tracing rekursi

Page 16: Struktur Data 07-08 v2

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 );}

Page 17: Struktur Data 07-08 v2

Latihan tracing rekursi

Page 18: Struktur Data 07-08 v2

Minggu Kedua

Page 19: Struktur Data 07-08 v2

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

Page 20: Struktur Data 07-08 v2

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 );}

Page 21: Struktur Data 07-08 v2

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

Page 22: Struktur Data 07-08 v2

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 );}

Page 23: Struktur Data 07-08 v2

Tracing Towers of Hanoi

towers(3, A, C, B) = ?

Page 24: Struktur Data 07-08 v2

Tugas Rumah : TRACING

towers(4, A, C, B) = ? fibo(6) = ? factorial(5)=? mult(3,5)=?

Page 25: Struktur Data 07-08 v2

Minggu Ketiga

Page 26: Struktur Data 07-08 v2

Array dan Struct

Review struktur data dasarArrayStruct

Contoh analisa program

Page 27: Struktur Data 07-08 v2

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

Page 28: Struktur Data 07-08 v2

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.

Page 29: Struktur Data 07-08 v2

STRUCT

Tipe data turunan. Contoh deklarasi :

struct {

int jari_jari;

float luas;

float keliling;

} lingkaran;

Page 30: Struktur Data 07-08 v2

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

Page 31: Struktur Data 07-08 v2

Contoh program

Program tentang lingkaran. Algoritma :

Inventarisasi atribut-atribut yang dimiliki oleh sebuah objek lingkaran.

Akses masing-masing elemen dengan memakai operator tanda titik (.).

Page 32: Struktur Data 07-08 v2

ARRAY OF STRUCT

Struktur data berupa array yang setiap elemennya bertipe struct.

Contoh deklarasi :struct {

int NPM;char nama[30];float IPK;

} mhs[100];

Page 33: Struktur Data 07-08 v2

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

Page 34: Struktur Data 07-08 v2

Contoh Program

Program data mahasiswa. Program tabel fungsi kuadrat.

Page 35: Struktur Data 07-08 v2

Minggu Keempat

Page 36: Struktur Data 07-08 v2

Sorting

Tujuan : memahami proses tracing algoritma pengurutan.

Beberapa jenis algoritma sorting :Bubble sortSelection sort Insertion sort

Page 37: Struktur Data 07-08 v2

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;

}}

Page 38: Struktur Data 07-08 v2

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;

}}

Page 39: Struktur Data 07-08 v2

Minggu Kelima

Page 40: Struktur Data 07-08 v2

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++;

}}

Page 41: Struktur Data 07-08 v2

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;

}}

Page 42: Struktur Data 07-08 v2

Tugas :

Algoritma dan contoh sortingnya :Quick SortMerge SortShell Sort

Page 43: Struktur Data 07-08 v2

Minggu Keenam

Page 44: Struktur Data 07-08 v2

Searching

Tujuan : memahami proses tracing algoritma pencarian.

Jenis algoritma searching :Sequential search Indexed sequential searchBinary search

Page 45: Struktur Data 07-08 v2

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);}

Page 46: Struktur Data 07-08 v2

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 );}

Page 47: Struktur Data 07-08 v2

Latihan tracing

Page 48: Struktur Data 07-08 v2

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);

}

Page 49: Struktur Data 07-08 v2

Latihan tracing

Page 50: Struktur Data 07-08 v2

Minggu Ketujuh

Page 51: Struktur Data 07-08 v2

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

Page 52: Struktur Data 07-08 v2

#include “stdio.h”void main(){int data, *pointer_data;data = 100;pointer_data = &data;printf(“Data = %d di alamat %p\n”, data, pointer_data);

}

Page 53: Struktur Data 07-08 v2

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));}

Page 54: Struktur Data 07-08 v2

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);

}

Page 55: Struktur Data 07-08 v2

Minggu Kedelapan

Ujian Tengah Semester

Page 56: Struktur Data 07-08 v2

Minggu Kesembilan

Page 57: Struktur Data 07-08 v2

(Single) Linked List

Definisi linked list Operasi dasar Contoh program

Page 58: Struktur Data 07-08 v2

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

Page 59: Struktur Data 07-08 v2

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?

Page 60: Struktur Data 07-08 v2

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.

Page 61: Struktur Data 07-08 v2

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).

Page 62: Struktur Data 07-08 v2

Linked List Sederhana

Deklarasi struktur data :

typedef struct simpul {

char nama[20];

float nilai;

struct simpul *next_simpul;

} simpulku;

Page 63: Struktur Data 07-08 v2

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;

Page 64: Struktur Data 07-08 v2

Citra

NULL

100

Alamat = 2370

2370

Budi

2370

20

Alamat = 1080

1080

Amin

1080

90

Alamat = 1000

1000

simpul1 simpul3simpul2

Page 65: Struktur Data 07-08 v2

Citra

NULL

100

Alamat = 2370

Budi

2370

20

Alamat = 1080

Amin

1080

90

Alamat = 1000

1000

simpul1Pointer Head

Pointer Tail

Page 66: Struktur Data 07-08 v2

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

Page 67: Struktur Data 07-08 v2

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)

Page 68: Struktur Data 07-08 v2

Contoh Program Linked List

#include "stdio.h"#include "stdlib.h"#include "conio.h"

struct node{int info;struct node *next;

};typedef struct node *simpul;

Page 69: Struktur Data 07-08 v2

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);}

Page 70: Struktur Data 07-08 v2

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;

Page 71: Struktur Data 07-08 v2

Show All Node

case 2:temp = head;while(temp!=NULL){ printf("%i ", temp->info); temp = temp->next;}printf("\n");break;

Page 72: Struktur Data 07-08 v2

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;

Page 73: Struktur Data 07-08 v2

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…

Page 74: Struktur Data 07-08 v2

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;

Page 75: Struktur Data 07-08 v2

Capture Program

Page 76: Struktur Data 07-08 v2

Minggu Kesepuluh

Page 77: Struktur Data 07-08 v2

Macam-macam List

Singly linked list Doubly linked list Singly circular linked list Doubly circular linked list

Page 78: Struktur Data 07-08 v2

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

Page 79: Struktur Data 07-08 v2

Circular Linked List

Page 80: Struktur Data 07-08 v2

Minggu Kesebelas

Page 81: Struktur Data 07-08 v2

Stack

Definisi Stack Operasi-operasi dasar Stack

PushPop

Contoh program operasi dasar Stack menggunakan array

Page 82: Struktur Data 07-08 v2

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.

Page 83: Struktur Data 07-08 v2

Last In First Out

Page 84: Struktur Data 07-08 v2

Penggunan Stack

History pada web browser. Undo Log pada text editor. Pemrosesan struktur bersarang (nested) :

loop, rekursi, fungsi, dll. Algoritma back tracking – Artificial

Intelegence

Page 85: Struktur Data 07-08 v2

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)

Page 86: Struktur Data 07-08 v2

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

Page 87: Struktur Data 07-08 v2

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

Page 88: Struktur Data 07-08 v2

Deklarasi Fungsi-Fungsi Stack

void initialize ( stack *s) void pop ( stack *s, char *x ) void push ( stack *s, char x ) void show ( stack *s )

Page 89: Struktur Data 07-08 v2

Fungsi Initialize

void initialize ( stack *s)

// operasi initialize dg parameter

// s bertipe pointer stack

{ s -> top = -1;

// top = -1 stack dlm kondisi empty

}

Page 90: Struktur Data 07-08 v2

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");

}}

Page 91: Struktur Data 07-08 v2

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");

}}

Page 92: Struktur Data 07-08 v2

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");

}

Page 93: Struktur Data 07-08 v2

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);

}

Page 94: Struktur Data 07-08 v2

Output Program

Page 95: Struktur Data 07-08 v2

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?

Page 96: Struktur Data 07-08 v2

Push Operation

Page 97: Struktur Data 07-08 v2

Pop Operation

Page 98: Struktur Data 07-08 v2

Minggu Keduabelas

Page 99: Struktur Data 07-08 v2

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” );

Page 100: Struktur Data 07-08 v2

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)]}

Page 101: Struktur Data 07-08 v2

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)

Page 102: Struktur Data 07-08 v2

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.

Page 103: Struktur Data 07-08 v2

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

Page 104: Struktur Data 07-08 v2

Latihan :

Jika A = 1, B = 2, C = 3, hitunglah :

1. AB+C–

2. ABC+–

3. AB*CD+^

Page 105: Struktur Data 07-08 v2

Minggu Ketigabelas

Page 106: Struktur Data 07-08 v2

Queue

Definisi Queue Operasi-operasi dasar Queue

Insert/ enqueue Remove/ dequeue

Contoh program operasi dasar Queue menggunakan array

Page 107: Struktur Data 07-08 v2

Queue

Sequence of items. Items dimasukkan dari ujung belakang,

dikeluarkan dari ujung depan. Bersifat FIFO (First In First Out).

Page 108: Struktur Data 07-08 v2

Jenis Queue

Normal queue. Circular queue. DE-queue (double ended).

Ex. High and low priority policy Priority queue.

Page 109: Struktur Data 07-08 v2

Penggunaan Queue

Waiting list – birokrasi. Simulasi sistem antrian. Antrian printer jobs. Antrian proses multitasking dalam CPU. Antrian playlist winamp.

Page 110: Struktur Data 07-08 v2

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.

Page 111: Struktur Data 07-08 v2

Deklarasi Struktur Data Queue

#define maxsize 100typdef struct {

int jumlah; //jumlah dataint depan; //ujung depanint belakang; //ujung belakangchar data [ maxsize ]; //array isi

queue}queue;

Page 112: Struktur Data 07-08 v2

Initialize

void initialize ( queue *q )

{

q -> jumlah = 0;

q -> depan = 0;

q -> belakang = 0;

}

Page 113: Struktur Data 07-08 v2

Is_Empty

int Is_Empty ( queue *q )

{

if (q -> jumlah == 0)

return (1);

else

return (0);

}

Page 114: Struktur Data 07-08 v2

Is_Full

int Is_Full ( queue *q )

{

if (q -> jumlah == maxsize)

return (1);

else

return (0);

}

Page 115: Struktur Data 07-08 v2

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);

}}

Page 116: Struktur Data 07-08 v2

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);

}}

Page 117: Struktur Data 07-08 v2

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

Page 118: Struktur Data 07-08 v2

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);

Page 119: Struktur Data 07-08 v2

Output

Page 120: Struktur Data 07-08 v2

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?

Page 121: Struktur Data 07-08 v2

Enqueue Operation

Page 122: Struktur Data 07-08 v2

Dequeue Operation

Page 123: Struktur Data 07-08 v2

Minggu Keempatbelas

Graph

Page 124: Struktur Data 07-08 v2

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

Page 125: Struktur Data 07-08 v2

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.

Page 126: Struktur Data 07-08 v2

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

Page 127: Struktur Data 07-08 v2

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;

Page 128: Struktur Data 07-08 v2
Page 129: Struktur Data 07-08 v2
Page 130: Struktur Data 07-08 v2

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

Page 131: Struktur Data 07-08 v2

BFS

Pencarian dilakukan dengan mengunjungi setiap node pada level yang sama sampai mencapai tujuan atau sampai node terakhir

Page 132: Struktur Data 07-08 v2

Minggu Kelimabelas

Presentasi Tree

Page 133: Struktur Data 07-08 v2

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

Page 134: Struktur Data 07-08 v2

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;

Page 135: Struktur Data 07-08 v2
Page 136: Struktur Data 07-08 v2

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

Page 137: Struktur Data 07-08 v2
Page 138: Struktur Data 07-08 v2
Page 139: Struktur Data 07-08 v2

Binary Tree Search

p = tree;

while ( p != null && key != pinfo)

if (key < pinfo)

p = pleft;

else

p = pright;

return (p);

Page 140: Struktur Data 07-08 v2

Minggu Keenambelas

Ujian Akhir Semester