STRUKTUR DATA – TEKNIK INFORMATIKA S1 ADT STACK STRUKTUR DATA – TEKNIK INFORMATIKA S1
Struct Seorang mahasiswa memiliki atribut data berupa Nim, Nama, dan IPS Nim Nama IPS Tentukan tipe data tiap atribut data? Dan tipe data bentukan yang tepat?
Struct - Lanjut Seorang mahasiswa memiliki atribut data berupa Nim, Nama, dan IPS Nim (char) Nama (char) IPS (float) mahasiswa struct mahasiswa { char nim[13]; char nama[25]; float ips; }; NIM terdiri dari Kode Jurusan/Prodi Tahun Angkatan Nomor Urut (5 digit)
Struct - Lanjut Kode_jur (char) Thn_masuk (int) NIM terdiri dari Kode Jurusan/Prodi Tahun Angkatan Nomor Urut (5 digit) Kode_jur (char) Thn_masuk (int) No_urut (int) Nim struct Nim { char kode_jur[3]; int thn_masuk; int no_urut; };
Struct Bertingkat (Nested Struct) mahasiswa Nama (char) IPK (float) Nim (char) Nama (char) IPK (float) Kode_jur Thn_masuk No_urut Nim mahasiswa struct mahasiswa { struct Nim nim; char nama[25]; float ips; };
Cara Akses Member Nested Struct struct Nim { char kode_jur[3]; int thn_masuk; int no_urut; }; Cara Akses Member:: kode_jur mhs.nim.kode_jur Cara Akses Member:: thn_masuk mhs.nim.thn_masuk Cara Akses Member:: no_urut mhs.nim.no_urut struct mahasiswa { struct Nim nim; char nama[25]; float ips; }; Jika variabel pointer operator (.) diganti dengan anak panah (->)
Cara Akses Member Nested Struct struct mahasiswa mhs; printf("Masukkan Kode Jurusan : "); scanf("%s",&mhs.nim.kode_jur); printf("Masukkan Tahun Masuk : "); scanf("%d",&mhs.nim.thn_masuk); printf("Masukkan No Urut (5 digit) : "); scanf("%d",&mhs.nim.no_urut); printf("Masukkan Nama Lengkap : "); scanf("%s",&mhs.nama); printf("Masukkan IPS : "); scanf("%f",&mhs.ips); printf("Data Mahasiswa\n"); printf("NIM : %s.%d.%d \n",mhs.nim.kode_jur,mhs.nim.thn_masuk,mhs.nim.no_urut); printf("Nama Lengkap : %s \n",mhs.nama); printf("IPS : %f \n",mhs.ips);
ADT Suatu data jam dapat dibentuk menjadi suatu tipe data abstrak, dimana jam memiliki elemen-elemen pendukung seperti detik, menit dan jam itu sendiri. Serta dapat memuat fungsi-fungsi operasi dasar yang mendukung operasional data jam.
Header ADT Jam (jam.h) #include <stdio.h> #include <stdlib.h> typedef int time; typedef struct { time HH,MM,SS; }jam; void resetJam(jam *J); void tulisJam(jam *J,time hours,time minutes,time seconds);
Realisasi (Body) dari jam.h (jam.c) #include "jam.h" void resetJam(jam *J){ J->HH=0; J->MM=0; J->SS=0; } void tulisJam(jam *J,time hours,time minutes,time seconds){ J->HH=hours; J->MM=minutes; J->SS=seconds;
Main Program ADT Jam (main.c) #include "jam.h" int main() { jam WIB,WIT,WITA; tulisJam(&WIB,20,50,10); printf("Jam Waktu Indonesia Barat: %.2d:%.2d:%.2d \n",WIB.HH,WIB.MM,WIB.SS); resetJam(&WIB); printf("Reset Jam WIB %.2d:%.2d:%.2d",WIB.HH,WIB.MM,WIB.SS); return 0; }
Penggunaan Nested Struct (jam.h) typedef int time; typedef char * String; struct daerah{ String kota[20]; String provinsi[20]; }; typedef struct { struct daerah area; time HH,MM,SS; }jam;
Penggunaan Nested Struct (mjam.c) void tulisJamDaerah(jam *J,time hours,time minutes,time seconds,String k,String p) { J->HH=hours; J->MM=minutes; J->SS=seconds; strcpy(J->area.kota,k); strcpy(J->area.provinsi,p); }
Penggunaan Nested Struct (mjam.c) int main() { jam WIB,WITA,WIT; tulisJamDaerah(&WIB,20,50,1,"Semarang","Jawa Tengah"); printf("Jam WIB area %s provinsi %s %.2d:%.2d:%.2d \n",WIB.area.kota,WIB.area.provinsi,WIB.HH,WIB.MM,WIB.SS); resetJam(&WIB); printf("Reset Jam WIB %.2d:%.2d:%.2d \n",WIB.HH,WIB.MM,WIB.SS); return 0; }
ADT STACK
Pengertian STACK STACK berarti tumpukan. Konsep STACK digunakan dalam struktur data. A B C D TOP IN OUT Berlaku prinsip LIFO (Last In First Out)
Stack Stack dapat direpresentasikan menggunakan array satu dimensi. 25 12 1 17 2 15 33 3 4 5 6 7 8 9 S[10] TOP X
Kondisi Stack Kondisi Stack ditentukan oleh posisi atau isi TOP. Jika n adalah jumlah data array Kondisi Stack Posisi TOP KOSONG Top = -1 PENUH Top = n-1 BISA DIISI Top < n-1 ADA ISINYA Top > -1
Pembuatan Stack dengan Array of Struct Definisikan STACK dengan struct Definisikan konstanta (ex: MAX_STACK) untuk menyimpan maksimum isi elemen stack Menentukan elemen Struct Stack meliputi data array untuk menampung data stack dan top untuk menandakan posisi data teratas Buat variabel dari Struct Stack Tentukan operasi – operasi / function diatas
Program Stack #define MAX_STACK 10 Typedef struct { int top; char data[10][10]; } stack; stack tumpuk;
Operasi-operasi Dasar Stack Digunakan untuk menambah item pada stack pada tumpukan paling atas Push Digunakan untuk mengambil item pada stack pada tumpukan paling atas Pop Fungsi untuk mengecek apakah stack kosong IsEmpty Fungsi untuk mengecek apakah stack penuh IsFull
Inisialisasi Stack Top diisi dengan -1, karena array (dalam bahasa C) dimulai dari 0, yang berarti bahwa data stack kosong Top adalah variabel penanda dalam stack yang menunjukkan elemen teratas data stack (Top Of Stack)
Memeriksa Stack Penuh Fungsi isFull Apakah stack penuh ? Dengan cara memeriksa ToS, jika sudah sama dengan MAX_STACK–1 maka stack full, Jika masih kurang dari MAX_STACK–1 maka belum full
Memeriksa Stack Kosong Fungsi IsEmpty Apakah stack kosong ? Memeriksa ToS, jika masih -1 maka stack masih kosong
Menambah Data Stack Fungsi Push Memasukkan data ke stack Data yang diinput menjadi data teratas dari stack (ditunjuk oleh ToS) Jika data belum penuh, tambah satu (increment) nilai ToS lebih dahulu setiap kali ada penambahan ke dalam array data stack Isikan data baru ke stack berdasarkan index ToS yang telah di-increment
Mengambil Data Stack Fungsi Pop Mengambil data stack yang terletak paling atas (data yang ditunjuk ToS) Tampilkan terlebih dahulu nilai elemen teratas dengan mengakses index sesuai dengan ToS Decrement nilai ToS sehingga elemen stack berkurang
Terima Kasih