Algoritma dan Struktur Data. Ramos Somya

dokumen-dokumen yang mirip
# EIGHT ADT (Abstract Data Type) dan Stack Array

Algoritma dan Struktur Data. Ramos Somya, S.Kom., M.Cs.

Algoritma dan Struktur Data. Ramos Somya, S.Kom., M.Cs.

Algoritma dan Struktur Data. Ramos Somya

STRUKTUR DATA, ADT, dan STRUCT

# NINE Queue dengan Array

QUEUE (ANTREAN) Prinsip Antrean : FIFO (First In First Out) FCFS (First Come First Serve) Yang Tiba lebih awal Maka akan dilayani Terlebih Dahulu

STACK atau TUMPUKAN. Pertemuan 5 STACK (TUMPUKAN)

Seharusnya. if (antrian.tail==max-1) return 0;

ALGORITMA DAN STRUKTUR DATA ARRAY STACK DAN QUEUE

Masukan Judul... Infotype àsebuah tipe terdefinisi yang menyimpan informasi sebuah elemen list

Bahasa Pemrograman SAHID CHESTERLIZER.

Struktur Data Array. Rijal Fadilah S.Si

STACK dan QUEUE MODUL PRAKTIKUM STRUKTUR DATA 09 UNIVERSITAS KRISTEN DUTA WACANA. Daftar Isi: Stack dan Queue. Latihan soal. Guided.

STACK DAN QUEUE (Muhammad Fachrie, STMIK Amikom Yogyakarta)

Algoritma Dan Struktur Data II. Queue

LAPORAN PRAKTIKUM RESMI QUEUE

QUEUE (ANTREAN) Pertemuan 6 PENGERTIAN QUEUE (ANTREAN)

STRUKTUR DATA POKOK BAHASAN - 7 STACK ( TUMPUKAN )

Pertemuan 7. REVIEW dan QUIS

Algoritma Dan Struktur Data II

E STRUKTUR DATA & E PRAKTIK STRUKTUR DATA. Stack using Array. Alfa Faridh Suni, S.T., M.T. PTIK

STRUKTUR DATA POKOK BAHASAN - 8 QUEUE ( ANTRIAN)

S TA C K Sunu Wibirama

PRAKTIKUM ALGORITMA DAN STRUKTUR DATA

Antrian (Queue) Susunan koleksi data dimana proses penambahan data (add) dilakukan dari belakang dan penghapusan data (delete) dilakukan dari depan.

Tumpukan (Stack) Stack bersifat LIFO (Last In First Out) LIFO Data yang terakhir masuk ke dalam stack menjadi data yang pertama keluar dari stack

STACK DAN QUEUE. Pengertian Stack Dan Queue. stack & queue. Last saved by KENKEINA Created by KENKEINA

Modul Praktikum Algoritma dan Struktur Data

MAKALAH STRUKTUR DATA. DOSEN PEMBIMBING Nisa miftachurohmah, S.kom., M.Si PENYUSUN SITI JAMILATUL MU ADDIBAH ( )

MODUL IV STACK A. TUJUAN

Praktikum Algoritma dan Struktur Data

STRUKTUR DATA Pertemuan 1 s.d 8

STACK (Tumpukan) Tumpukan Koin. Tumpukan Kotak

KONSEP POINTER DAN LINKED LIST

PRAKTIKUM STRUKTUR DATA QUEUE. SULIDAR FITRI, M.Sc

BAB III. Stack. ( Tumpukan )

LAPORAN PRAKTIKUM IV. Oleh:

Algoritma Pemrograman & Struktur Data

KONSEP POINTER DAN LINKED LIST

KONSEP POINTER DAN LINKED LIST

Implementasi Queue menggunakan Array. Imam Fahrur Rozi

KONSEP POINTER DAN LINKED LIST

PRAKTIKUM ALGORITMA DAN STRUKTUR DATA MODUL KE-2 STACK DAN QUEUE

Materi 8 : STACK (TUMPUKAN) Dosen:

DIKTAT PRAKTIKUM ALGORITMA DAN STRUKTUR DATA

Pertemuan 3. Perubah Dinamis (Dinamic variable) Suatu perubah yang akan dialokasikan hanya pada saat diperlukan, yaitu setelah program dieksekusi.

PRAKTIKUM ALGORITMA & PEMROGRAMAN III MODUL_06 Stack (Tumpukan)

KONSEP POINTER DAN LINKED LIST

LAPORAN PRAKTIKUM IV. Oleh :

Struktur Data. Tumpukan : Definisi & Operasi. Pertemuan 4 PROBLEM ALGORITHM DATA IMPLEMENTATION. Pert. 4b Struktur Data - FMIPA USD

KARAKTER DAN STRING, ARRAY, STRUCT DAN REVIEW PADA BAHASA C

ARNA FARIZA YULIANA SETIOWATI

Algoritma dan Struktur Data STACK

PRAKTIKUM ALGORITMA DAN STRUKTUR DATA DOUBLE LINKED LIST CIRCULAR

MODUL PRAKTIKUM STRUKTUR DATA DAN ALGORITMA STACK

IX. Implementasi ADT : Stacks & Queues. Operasi dasar Contoh kegunaan Implementasi Array-based dan linked list-based

04. Single Linked List

ALGORITMA DAN STRUKTUR DATA POINTER DAN FUNCTION

MI, KA-D3, SIA, SIB. ADI, S.Kom.

Tipe Data dan Operator

Data structure :Metode LINK LIST. Kusnawi, S.Kom, M.Eng STMIK AMIKOM Yogyakarta

A. TUJUAN PEMBELAJARAN

MODUL PRAKTIKUM STRUKTUR DATA. Dosen Pengampu M.Bahrul Ulum, S.Kom., M.Kom. Asisten Lab Mia Kastina PROGRAM STUDI TEKNIK INFORMATIKA

POINTER STACK DAN QUEUE. Institut Teknologi Sumatera

BAB IV Antrian(Queue)

Achmad Solichin.

A. TUJUAN PEMBELAJARAN

Praktikum 4. Tumpukan (Stack)

E STRUKTUR DATA & E PRAKTIK STRUKTUR DATA. Pointer & Function. Alfa Faridh Suni, S.T., M.T. PTIK

ARNA FARIZA YULIANA SETIOWATI

STACK (TUMPUKAN) Tumpukan uang koin Tumpukan kotak Tumpukan Buku. Gambar 1. Macam-macam tumpukan

MODUL PEMROGRAMAN 2. Queue (Antrian)

Pendahuluan Struktur Data. Nisa ul Hafidhoh

Struktur Dasar Bahasa C Tipe Data Dalam bahasa C terdapat lima tipe data dasar, yaitu :

05. Double Linked List

Tumpukan(Stack)!! " # $ %&' $ %& ( ) ( * +, / ( (

DOUBLE LINKED LIST. Danang Wahyu Utomo Danang Wahyu Utomo, M.Kom, M.CS

ALGORITMA DAN STRUKTUR DATA

Struktur Data II. Single Linked List - Non circular

elemen Dasar Bahasa Pemrograman C

PRAKTIKUM 2. perubah (variabel), konstanta, fungsi, atau obyek lain yang didefinisikan oleh

MODUL PRAKTIKUM STRUKTUR DATA FAKULTAS ILMU KOMPUTER UNIVERSITAS ESA UNGGUL

DIKTAT KULIAH ALGORITMA dan STRUKTUR DATA II. Tujuan Pembelajaran : Mahasiswa mampu menjelaskan teknik pemrograman menggunakan Stack.

Algoritma Dan Struktur Data II

MODUL 6 SINGLE & DOUBLE LINKED LIST

DIKTAT KULIAH ALGORITMA dan STRUKTUR DATA II. : Mahasiswa mampu menjelaskan teknik pemrograman menggunakan Queue.

*Sekumpulan elemen yang diatur secara terurut. *Linear List tidak sama dengan Connected-List

Struktur Data. Stack STMIK AMIKOM YOGYAKARTA. Bayu Setiaji, S.Kom

Struktur Data dan Algoritma

SATUAN ACARA PENGAJARAN

Algoritma dan Struktur Data. Linked List

Algoritma Pemrograman. Fery Updi,M.Kom

SINGLE LINKED LIST NON CIRCULAR (SENARAI BERANTAI TUNGGAL TIDAK BERPUTAR)

STRUKTUR DATA (2) Single Linked List

PERTEMUAN KE 11. Linked List. Apa Itu Linked List?

BAB III QUEUE (ANTRIAN)

Tugas Studi Kasus. Linked List SLLNC dengan Head & Tail

Array VS Linked List

SILABUS STRUKTUR DATA ( TIF-104 ) PROGRAM STUDI TEKNIK INFORMATIKA UNIVERSITAS PEMBANGUNAN JAYA TANGERANG SELATAN

Transkripsi:

Algoritma dan Struktur Data Ramos Somya

Pointer (variabel penunjuk) adalah suatu variabel yang berisi alamat memori dari suatu variabel lain. Pointer merupakan variabel level rendah yang dapat digunakan untuk menunjuk nilai integer, character, float, double, atau single, dan bahkan tipe-tipe data lain yang didukung oleh bahasa C.

Mengapa harus menggunakan POINTER dalam bahasa C? Karena supaya dapat meningkatkan kinerja untuk operasi yang dilakukan secara berulang variabel pointer bersifat dinamis (dapat diubah-ubah lokasi penyimpannya dalam memory). Pada variabel biasa kita tidak perlu tahu alamat memory dari variabel tersebut. Untuk mengakses hanya perlu nama variabel tersebut. Tapi untuk struktur data dinamis (linked list, tree dsb) hal tersebut tidak bisa.

Bentuk Umum: tipe_data *nama_pointer; Contoh: int *nilai; char *huruf; Pendeklarasian variabel pointer menggunakan tanda * sebelum nama variabelnya. Sedangkan untuk menampilkan nilai yang ditunjuk oleh suatu variabel pointer, juga digunakan operator * Untuk menampilkan alamat tempat penyimpanan nilai yang ditunjuk oleh suatu variabel pointer, digunakan operator &

#include <stdio.h> void main() int i, j; int *p; /* pointer ke integer */ p = &i; *p=5; j=i; printf("%d %d %d\n", i, j, *p); Output?

#include <stdio.h> void main() int *p; /* a pointer to an integer */ printf("%d\n", *p); Output?

#include <stdio.h> void swap(int i, int j) int t; t = i; I = j; j = t; void main() int a,b; a = 5; b = 10; printf("%d %d\n", a, b); swap(a, b); printf("%d %d\n", a, b);

#include <stdio.h> void swap(int *i, int *j) int t; t = *i; *i = *j; *j = t; void main() int a,b; a = 5; b = 10; printf("%d %d\n", a, b); swap(&a,&b); printf("%d %d\n", a, b);

int nama fungsi (int *b) *b = *b + 1; main () int x=1; nama_fungsi (&x); printf ( %d, x); Output??

ADT adalah tipe data yang dibuat oleh programmer sendiri yang memiliki suatu nama tertentu. ADT dapat berupa tipe data dasar namun diberi nama baru atau berupa kumpulan tipe data berbeda yang diberi nama baru. Untuk pembuatan ADT digunakan keyword typedef.

#include <stdio.h> #include <conio.h> typedef int angka; typedef float pecahan; typedef char huruf; void main() clrscr(); angka umur; pecahan pecah; huruf h; huruf nama[10]; printf("\nmasukkan bilangan pecahan "); scanf("%f",&pecah); printf("bilangan pecahan %f",pecah); printf("\nmasukkan huruf : "); h=getche(); printf("\nhuruf anda %c",h); printf("\nmasukkan nama : "); scanf("%s",nama); printf("nama anda %s",nama); getch(); printf("masukkan umur anda : "); scanf("%d",&umur); printf("umur anda adalah %d",umur);

Struct adalah tipe data bentukan yang berisi kumpulan variabel-variabel yang bernaung dalam satu nama yang sama. Berbeda dengan array yang berisi kumpulan variabel yang bertipe data sama, struct dapat memiliki variabel-variabel yang bertipe data sama atau berbeda, bahkan bisa menyimpan variabel yang bertipe data array atau struct. Variabel-variabel yang menjadi anggota struct disebut dengan elemen struct.

Ilustrasi Struct : Struct bisa diumpamakan sebagai sebuah class, misalnya: Mahasiswa. Struct Mahasiswa memiliki property atau atribut atau variabel yang melekat padanya: NIM yaitu karakter sejumlah 8 Nama yaitu karakter IPK yaitu bilangan pecahan Struct hampir mirip dengan class pada Java, namun struct tidak memiliki method atau function. Struct dapat digunakan dengan cara membuat variabel (analogikan dengan obyek pada Java). Misalnya : obyek anton bertipe struct Mahasiswa obyek erick bertipe struct Mahasiswa Dengan demikian anton dan erick memiliki NIM, Nama, dan IPK masingmasing

Pendeklarasian typedef struct Mahasiswa char NIM[8]; char nama[50]; float ipk; ; Penggunaan Untuk menggunakan struct Mahasiswa dengan membuat variabel mhs dan mhs2 Mahasiswa mhs,mhs2; Untuk menggunakan struct Mahasiswa dengan membuat variabel array m; Mahasiswa m[100];

Pengaksesan elemen struct dilakukan secara individual dengan menyebutkan nama variabel struct diikuti dengan operator titik (.) Misalnya dengan struct mahasiswa seperti contoh di atas, kita akan akses elemenelemennya seperti contoh berikut: #include <stdio.h> #include <conio.h> void main() Mahasiswa mhs; clrscr(); printf("nim = "); scanf("%s",mhs.nim); printf("nama = "); scanf("%s",mhs.nama); printf("ipk = "); scanf("%f",&mhs.ipk); printf("data Anda : \n"); printf("nim : %s\n",mhs.nim); printf("nama : %s\n",mhs.nama); printf("ipk : %f\n",mhs.ipk); getch(); typedef struct Mahasiswa char NIM[9]; char nama[30]; float ipk; ;

Pendeklarasian : struct char NIM[8]; char nama[50]; float ipk; mhs; Penggunaan : Berarti kita sudah mempunyai variabel mhs yang bertipe data struct seperti diatas.

#include <stdio.h> #include <conio.h> #define phi 3.14 struct float jari2; float keliling; float luas; lingkaran; int main() clrscr(); printf("jari-jari = "); scanf("%f",&lingkaran.jari2); luaslingkaran(); lingkaran.keliling = kellingkaran(lingkaran.jari2); printf("\nkeliling lingkaran =%f",lingkaran.keliling); getch(); void luaslingkaran() lingkaran.luas = lingkaran.jari2 *lingkaran.jari2*phi; printf("\nluas lingkaran = %f",lingkaran.luas); float kellingkaran(float j) return 2*phi*lingkaran.jari2;

#include <stdio.h> #include <conio.h> typedef struct Date int dd; int mm; int yyyy;; typedef struct Time int h; int m; int s;; typedef struct Login int ID; Date tgllogin; Time waktulogin;; int main() Login user1; printf("user 1\n"); printf("id : ");scanf("%d",&user1.id); printf("tanggal Login\n"); printf("hari : ");scanf("%d",&user1.tgllogin.dd); printf("bulan : ");scanf("%d",&user1.tgllogin.mm); printf("tahun : ");scanf("%d",&user1.tgllogin.yyyy); printf("jam : "); scanf("%d",&user1.waktulogin.h); printf("menit : "); scanf("%d",&user1.waktulogin.m); printf("detik : "); scanf("%d",&user1.waktulogin.s); printf("terimakasih\n"); printf("data Anda :\n"); printf("id : %d\n",user1.id); printf("date : %d - %d -%d\n",user1.tgllogin.dd, user1.tgllogin.mm,user1.tgllogin.yyyy); printf("id :%d:%d:%d\n",user1.waktulogin.h, user1.waktulogin.m,user1.waktulogin.s); getch();

#include <stdio.h> #include <conio.h> typedef struct Dateint dd; int mm; int yyyy;; typedef struct Timeint h; int m; int s;; typedef struct Loginint ID; Date tgllogin; Time waktulogin;; printf("jam : ");scanf("%d",&user[i].waktulogin.h); printf("menit : ");scanf("%d",&user[i].waktulogin.m); printf("detik : ");scanf("%d",&user[i].waktulogin.s); printf("terimakasih Atas Pengisiannya\n"); printf("\ndata User ke-%d:\n",i+1); printf("login ID : %d\n",user[i].id); printf("login Date : %d - %d - %d\n",user[i].tgllogin.dd,user[i].tgllogin.mm,user[i].tgll ogin.yyyy); printf("login Time : %d:%d:%d\n",user[i].waktulogin.h,user[i].waktulogin.m, user[i].waktulogin.s); getch(); int main() Login user[3]; for(int i=0;i<3;i++) printf("\nuser ke-%d\n",i+1); printf("id : ");scanf("%d",&user[i].id); printf("tanggal Login\n"); printf("hari : ");scanf("%d",&user[i].tgllogin.dd); printf("bulan : ");scanf("%d",&user[i].tgllogin.mm); printf("tahun : "); scanf("%d",&user[i].tgllogin.yyyy); printf("waktu Login\n");

Stack atau tumpukan adalah suatu stuktur data yang penting dalam pemrograman Bersifat LIFO (Last In First Out) Benda yang terakhir masuk ke dalam stack akan menjadi benda pertama yang dikeluarkan dari stack

Push : digunakan untuk menambah item pada stack pada tumpukan paling atas Pop : digunakan untuk mengambil item pada stack pada tumpukan paling atas Clear : digunakan untuk mengosongkan stack IsEmpty : fungsi yang digunakan untuk mengecek apakah stack sudah kosong IsFull : fungsi yang digunakan untuk mengecek apakah stack sudah penuh

Definisikan Stack dengan menggunakan struct Contoh : typedef struct STACK int top; char data[10][10]; ; Definisikan MAX_STACK untuk maksimum isi stack Contoh : #define MAX_STACK 10 //hati-hati mulai dari 0 jadi 0-9 Buatlah variabel array data sebagai implementasi stack secara nyata Contoh : STACK tumpuk; Pada mulanya isi top dengan -1, karena array dalam C dimulai dari 0, yang berarti stack adalah KOSONG! Top adalah suatu variabel penanda dalam STACK yang menunjukkan elemen teratas stack sekarang. Top Of Stack akan selalu bergerak hingga mencapai MAX of STACK sehingga menyebabkan stack PENUH!

9 MAX_STACK 8 7 6 5 4 void inisialisasi() tumpuk.top = -1; 3 2 1 0 Top=-1

Untuk memeriksa apakah stack sudah penuh? Dengan cara memeriksa top of stack, jika sudah sama dengan MAX_STACK-1 maka full, jika belum (masih lebih kecil dari MAX_STACK-1) maka belum full. int IsFull() if(tumpuk.top == MAX_STACK-1) return 1; else return 0;

Untuk memeriksa apakah stack masih kosong? Dengan cara memeriksa top of stack, jika masih -1 maka berarti stack masih kosong! int IsEmpty() if(tumpuk.top == -1) return 1; else return 0;

Untuk memasukkan elemen ke stack, selalu menjadi elemen teratas stack Tambah satu (increment) nilai top of stack terlebih dahulu setiap kali ada penambahan elemen stack, asalkan stack masih belum penuh, kemudian isikan nilai baru ke stack berdasarkan indeks top of stack setelah ditambah satu (diincrement) void Push(char d[10]) tumpuk.top++; strcpy(tumpuk.data[tumpuk.top],d);

Untuk mengambil elemen teratas dari stack. Ambil dahulu nilai elemen teratas stack dengan mengakses top of stack, tampilkan nnilai yang akan diambil terlebih dahulu, baru didecrement nilai top of stack sehingga jumlah elemen stack berkurang void Pop() printf("data yang terambil = %s\n",tumpuk.data[tumpuk.top]); tumpuk.top--;

Untuk menampilkan semua elemen-elemen stack Dengan cara looping semua nilai array secara terbalik, karena kita harus mengaksesdari indeks array tertinggi terlebih dahulu baru ke indeks yang kecil! void TampilStack() for(int i=tumpuk.top;i>=0;i--) printf("data : %s\n",tumpuk.data[i]);

#include <stdio.h> #include <conio.h> #include <string.h> #define MAX_STACK 10 typedef struct STACK int top; char data[10][10]; ; STACK tumpuk; void inisialisasi() tumpuk.top = -1; int IsFull() if(tumpuk.top == MAX_STACK-1) return 1; else return 0; int IsEmpty() if(tumpuk.top == -1) return 1; else return 0; void Push(char d[10]) tumpuk.top++; strcpy(tumpuk.data[tumpuk.top],d); void Pop() printf("data yang terambil = %s\n",tumpuk.data[tumpuk.top]); tumpuk.top--; void Clear() tumpuk.top=-1; void TampilStack() for(int i=tumpuk.top;i>=0;i--) printf("data : %s\n",tumpuk.data[i]); int main() int pil; inisialisasi(); char dt[10]; do printf("1. push\n"); printf("2. pop\n"); printf("3. print\n"); printf("4. clear\n"); printf("5. exit\n"); printf("pilihan : "); scanf("%d",&pil); switch(pil) case 1: if(isfull()!= 1) printf("data = ");scanf("%s",dt); Push(dt); else printf("\nsudah penuh!\n"); break; case 2: if(isempty()!= 1) Pop(); else printf("\nmasih kosong!\n"); break; case 3: if(isempty()!= 1) TampilStack(); else printf("\nmasih kosong!\n"); break; case 4: Clear(); printf("\nsudah kosong!\n"); break; getch(); while(pil!= 5); getch();

Elemen yang pertama kali masuk ke antrian akan keluar pertama kalinya. DEQUEUE adalah mengeluarkan satu elemen dari suatu Antrian Terdapat satu buah pintu masuk di suatu ujung dan satu buah pintu keluar di ujung satunya Sehingga membutuhkan variabel Head dan Tail Deklarasi Queue : #define MAX 8 typedef struct int data[max]; int head; int tail; Queue; Queue antrian;

Create ( ) Untuk menciptakan dan menginisialisasi Queue Dengan cara membuat Head dan Tail = -1 void Create() antrian.head=antrian.tail=-1; IsEmpty ( ) Untuk memeriksa apakah Antrian sudah penuh atau belum Dengan cara memeriksa nilai Tail, jika Tail = -1 maka empty Kita tidak memeriksa Head, karena Head adalah tanda untuk kepala antrian (elemen pertama dalam antrian) yang tidak akan berubah-ubah Pergerakan pada Antrian terjadi dengan penambahan elemen Antrian kebelakang, yaitu menggunakan nilai Tail int IsEmpty() if(antrian.tail==-1) return 1; else return 0;

IsFull Untuk mengecek apakah Antrian sudah penuh atau belum Dengan cara mengecek nilai Tail, jika Tail >= MAX-1 (karena MAX-1 adalah batas elemen array pada C) berarti sudah penuh int IsFull() if(antrian.tail==max-1) return 1; else return 0; Enqueue (data) Untuk menambahkan elemen ke dalam Antrian, penambahan elemen selalu ditambahkan di elemen paling belakang. Penambahan elemen selalu menggerakan variabel Tail dengan cara increment counter Tail void Enqueue(int data) if(isempty()==1) antrian.head=antrian.tail=0; antrian.data[antrian.tail]=data; printf("%d masuk!",antrian.data[antrian.tail]); else if(isfull()==0) antrian.tail++; antrian.data[antrian.tail]=data; printf("%d masuk!",antrian.data[antrian.tail]);

Dequeue() Digunakan untuk menghapus elemen terdepan/pertama dari Antrian Dengan cara mengurangi counter Tail dan menggeser semua elemen antrian kedepan. Penggeseran dilakukan dengan menggunakan looping int Dequeue() int i; int e = antrian.data[antrian.head]; for(i=antrian.head;i<=antrian.tail-1;i++) antrian.data[i] = antrian.data[i+1]; antrian.tail--; return e;

Clear() Untuk menghapus elemen-elemen Antrian dengan cara membuat Tail dan Head = -1 Penghapusan elemen-elemen Antrian sebenarnya tidak menghapus arraynya, namun hanya mengeset indeks pengaksesan-nya void Clear() antrian.head=antrian.tail=-1; printf("data clear"); Tampil Untuk menampilkan nilai-nilai elemen Antrian Menggunakan looping dari head s/d tail void Tampil() if(isempty()==0) for(int i=antrian.head;i<=antrian.tail;i++) printf("%d ",antrian.data[i]); else printf("data kosong!\n");