Your SlideShare is downloading. ×
Resume Struct & Stack 1Daftar IsiDaftar Isi .................................................................................
Resume Struct & Stack 2Bab I Struct1.1. Definisi StructStruct adalah tipe data bentukan yang berisi kumpulan variabel-vari...
Resume Struct & Stack 3float ip;int semester;} X,Y;1.3. Pengaksesan Elemen StructBentuk umum:<structure_variable>.<field_n...
Resume Struct & Stack 41.5. Kasus Struct1. Buatlah sebuah program data siswa dengan menggunakan struct dengan syarat berik...
Resume Struct & Stack 5Bab II Stack2.1. Definisi StackStack (tumpukan) sebenarnya adalah sebuah cara dalam mengorganisasik...
Resume Struct & Stack 6Dalam tulisan ini, sebuah stack didefinisikan dengan array berukuran MAX + 1,maksudnya adalah agar ...
Resume Struct & Stack 7Prosedur ini berfungsi untuk mengeluarkan/ menghapus nilai terakhir (yang berada padaposisi paling ...
Resume Struct & Stack 8Bab III Infix, Prefix, Postfix3.1. PendahuluanSalah satu kegunaan stack adalah untuk mengubah notas...
Resume Struct & Stack 9Jika kita diminta untuk menghitung soal seperti itu, maka kita tahu bahwa yang pertamakali harus ki...
Resume Struct & Stack 10A + B – C D E ^ x F /A + B – C D E ^ x F /A B + – C D E ^ x F /A B + – C D E ^ x F /A B + C D E ^ ...
Resume Struct & Stack 11Konversi Infix ke Postfix Menggunakan StackContoh : A ^ B / ( C – D )Keterangan :o Tanda kurung “(...
Resume Struct & Stack 123.3. Evaluasi EkspresiEVALUASIYang dimaksud dengan “Evaluasi” disini adalah mencari nilai akhir da...
Resume Struct & Stack 13Evaluasi Prefix Menggunakan StackLangkah-langkahnya :1. Scan Postfix dari kanan ke kiri.2. Jika be...
Upcoming SlideShare
Loading in...5
×

struct & stack

2,253

Published on

Tek Informatika UNUD

Published in: Technology, Economy & Finance
1 Comment
0 Likes
Statistics
Notes
  • Be the first to like this

No Downloads
Views
Total Views
2,253
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
87
Comments
1
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "struct & stack"

  1. 1. Resume Struct & Stack 1Daftar IsiDaftar Isi .................................................................................................................................................1Bab I Struct .............................................................................................................................................21.1. Definisi Struct...............................................................................................................................21.2. Deklarasi Struct ............................................................................................................................21.3. Pengaksesan Elemen Struct ..........................................................................................................31.4. Structure dan Fungsi.....................................................................................................................31.5. Kasus Struct..................................................................................................................................4Bab II Stack.............................................................................................................................................52.1. Definisi Stack................................................................................................................................52.2. Deklarasi Stack dalam Program....................................................................................................52.3. Operasi – operasi dasar dalam stack.............................................................................................6Bab III Infix, Prefix, Postfix ...................................................................................................................83.1. Pendahuluan..................................................................................................................................83.2. Konversi Notasi ............................................................................................................................93.3. Evaluasi Ekspresi........................................................................................................................123.4. Kasus Stack.................................................................................................................................13
  2. 2. Resume Struct & Stack 2Bab I Struct1.1. Definisi StructStruct adalah tipe data bentukan yang berisi kumpulan variabel-variabel yang bernaungdalam satu nama yang sama dan memiliki kaitan satu sama lain.Berbeda dengan array hanya berupa kumpulan variabel yang bertipe data sama, struct bisamemiliki variabel-variabel yang bertipe data sama atau berbeda, bahkan bisamenyimpan variabel yang bertipe data array atau struct itu sendiri.Variabel-variabel yang menjadi anggota struct disebut dengan elemen struct.1.2. Deklarasi StructStructure merupakan kumpulan dari satu atau beberapa variabel yang mempunyai tipesama atau berbeda (Heterogenous). Variabel dalam structure sering disebut dengan namakomponen, field, elemen atau members. Suatu struktur dinyatakan dengan kata kuncistruct, daftar pernyataan variable yang disebut anggota, yang terlampir dalam tandakurung { }. Tiap pernyataan anggota dan struktur harus berakhir dengan semicolon ( ; ).Bentuk umum deklarasi structure pada C:struct <struct_name>{<type> <elemen_name1>;<type> <elemen_name2>;} <structure_variable>;Contoh:struct Mahasiswa{char nama[20];float ip;int semester;};Untuk mendefinisikan variabel X dengan tipe struct Mahasiswa adalah sbb:struct Mahasiswa X;Satu atau beberapa variabel dapat juga didefinisikan pada saat structure tersebutdideklarasikan. Contoh: X dan Y adalah variabel bertipe struct Mahasiswastruct Mahasiswa{char nama[20];
  3. 3. Resume Struct & Stack 3float ip;int semester;} X,Y;1.3. Pengaksesan Elemen StructBentuk umum:<structure_variable>.<field_name><structure_pointer>→<field_name>Contoh:X.semester = 4;X.ip = 3.75;Mahasiswa *ptr = &X;ptr→semester = 4;1.4. Structure dan Fungsi1. Passing parameterPassing structure ke dalam fungsi sama seperti tipe data yang lain. Contoh mem-passing struct Mahasiswa ke fungsivoid cetak(struct Mahasiswa X){printf(“Nama=%sn”,X.nama);printf(“IP = %fn”,X.ip);}void main(){Mahasiswa X;cetak(X);}2. Structure sebagai return valuestruct Mahasiswa Mhs;..struct Mahasiswa Entry(char *nama, int sem,float ip){strcpy(Mhs.nama,nama);Mhs.semester = sem;Mhs.ip = ip;return(Mhs);}
  4. 4. Resume Struct & Stack 41.5. Kasus Struct1. Buatlah sebuah program data siswa dengan menggunakan struct dengan syarat berikut :1. program mempersiapkan sebuah struct yang dapat menyimpan Nama Siswa, ID Siswa,Nilai Siswa.2. Kemudian program dapat menampilkan data Nama, ID, dan Nilai Siswa yang telahdimasukkan.3. Program dapat menampilkan rata-rata nilai dari nilai siswa-siswa yang telah dimasukkanJawab :#include <stdio.h>struct Siswa{int id;char nama[20];float nilai;};void main(){struct Siswa siswa[3];float jumlah;jumlah = 0;for(index = 0; index < 3; index++){printf(“Masukkan ID siswa ke-%d: ”,index + 1);scanf(“%d”, &siswa[index].id);printf(“Masukkan nama siswa ke-%d: ”, index + 1);gets(siswa[index].nama);printf(“Masukkan nilai siswa ke-%d: ”, index + 1);scanf(“%d”, &siswa[index].nilai);jumlah = jumlah + siswa[index].nilai;}for(index = 0; index < 3; index++){Printf(“Data siswa ke-%d: ”, index + 1);Printf(“ID: %d: ”, siswa[index].id);Printf(“Nama : %s”, siswa[index].nama);Printf(“Nilai : %.2f”, siswa[index].nilai);}Printf(“Rata-rata : %2.f” jumlah / 3);}
  5. 5. Resume Struct & Stack 5Bab II Stack2.1. Definisi StackStack (tumpukan) sebenarnya adalah sebuah cara dalam mengorganisasikan data-datayang dimiliki. Ibarat seseorang yang menyimpan buku-bukunya, ada yang disusun dengancara ditumpuk, ada juga yang dijejerkan di dalam lemari.Kaidah utama dalam konsep stack adalah LIFO yang merupakan singkatan dari Last InFirst Out, artinya adalah data yang terakhir kali dimasukkan atau disimpan, maka datatersebut adalah yang pertama kali akan diakses atau dikeluarkan. Gambar di bawah inimengilustrasikan kerja sebuah stack.2.2. Deklarasi Stack dalam ProgramSebuah stack di dalam program komputer dideklarasikan sebagai sebuah tipe bentukanbaru, di dalam Bahasa C, biasa disebut struct. Sebuah struktur data dari sebuah stacksetidaknya harus mengandung dua buah variabel, yakni variabel TOP yang akan bergunasebagai penanda bagian atas tumpukan dan ARRAY DATA dari yang akan menyimpandata-data yang dimasukkan ke dalam stack tersebut. Berikut adalah syntax untukmendeklarasikan struktur data dari sebuah stack menggunakan Bahasa Ctypedef struct{int TOP;int data[max+1];}Stack;dimana, nilai MAX didefinisikan sebagai jumlah tumpukan maksimum yang dapatdisimpan dalam stack. Setelah strukutr data dari stack didefinisikan dengan syntax di atas,maka setelah itu dapat dibuat variabel-variabel baru yang mengacu pada tipe data Stack diatas, misalkan membuat sebuah variabel bernama tumpukan yang bertipe Stack:Stack tumpukan;
  6. 6. Resume Struct & Stack 6Dalam tulisan ini, sebuah stack didefinisikan dengan array berukuran MAX + 1,maksudnya adalah agar elemen array ke-0 tidak digunakan untuk menyimpan data,melainkan hanya sebagai tempat „singgah‟ sementara untuk variabel TOP. Sehingga, jikaTOP berada pada elemen array ke-0, berarti stack tersebut dalam kondisi kosong (tidakada data yang disimpan). Berikut adalah ilustrasi dari sebuah stack kosong dengan ukurannilai MAX = 6:2.3. Operasi – operasi dasar dalam stackSebuah stack setidaknya memiliki lima buah operasi-operasi dasar, yakni:a. Prosedur createEmptyProsedur ini berfungsi untuk mengosongkan stack dengan cara meletakkan TOP ke posisike-0. Berikut adalah deklarasi prosedur createEmpty dalam Bahasa C:void createEmpty(){tumpukan.TOP = 0;}b. Prosedur pushProsedur ini berfungsi untuk memasukkan sebuah nilai/ data ke dalam stack. Sebelumsebuah nilai/ data dimasukkan ke dalam stack, prosedur ini terlebih dahulu akanmenaikkan posisi TOP satu level ke atas. Misalkan kondisi stack masih kosong (TOP = 0),lalu prosedur push akan menaikkan posisi TOP satu level ke atas, yakni ke posisi 1 (TOP =1), baru setelah itu data dimasukkan ke dalam array pada indeks ke-1 (yakni indeksdimana TOP berada). Berikut adalah deklarasi prosedur push dalam Bahasa C:void push(int x){tumpukan.TOP = tumpukan.TOP + 1;tumpukan.data[tumpukan.TOP] = x;}Pada deklarasi prosedur push di atas, prosedur memiliki sebuah parameter formal yangbernama „x‟ yang bertipe integer. Parameter formal „x‟ ini berguna untuk menerimakiriman nilai dari program utama (void main()) yakni berupa sebuah bilangan integer yangakan dimasukkan ke dalam stack. Sebelum nilai pada variabel „x‟ dimasukkan ke dalamstack, terlebih dahulu posisi TOP dinaikkan satu level, baru setelah itu nilai pada variabel„x‟ dimasukkan ke dalam array data pada indeks dimana TOP itu berada.c. Prosedur pop
  7. 7. Resume Struct & Stack 7Prosedur ini berfungsi untuk mengeluarkan/ menghapus nilai terakhir (yang berada padaposisi paling atas) dari stack, dengan cara menurunkan nilai TOP satu level ke bawah.Misalkan TOP berada pada indeks ke-5, maka ketika akan mengeluarkan/ menghapus datapada posisi paling atas (pada posisi TOP), prosedur ini akan menurunkan posisi TOP keindeks array ke-4. Berikut deklarasi prosedur pop dalam Bahasa C:void pop(){tumpukan.TOP = tumpukan.TOP - 1;}d. Fungsi IsEmptyFungsi ini berfungsi untuk melakukan pengecekan terhadap stack, apakah stack tersebutkosong atau tidak. Jika stack tersebut kosong (artinya, TOP berada pada posisi 0), makafungsi akan mengembalikan nilai 1 (true), tetapi jika stack tersebut tidak kosong/ berisi(artinya, TOP tidak berada pada posisi 0), maka fungsi akan mengembalikan nilai 0(false). Berikut deklarasi fungsi IsEmpty dalam Bahasa C:int IsEmpty(){if (tumpukan.TOP == 0)return 1;elsereturn 0;}e. Fungsi IsFullFungsi ini berfungsi untuk melakukan pengecekan terhadap stack, apakah stack tersebutpenuh atau tidak. Jika stack tersebut penuh (artinya, TOP berada pada posisi MAX),maka fungsi akan mengembalikan nilai 1 (true), tetapi jika stack tersebut tidak penuh(artinya, TOP tidak berada pada posisi MAX), maka fungsi akan mengembalikan nilai 0(false). Berikut deklarasi fungsi IsFull dalam Bahasa C:int IsFull(){if (tumpukan.TOP == MAX)return 1;elsereturn 0;}
  8. 8. Resume Struct & Stack 8Bab III Infix, Prefix, Postfix3.1. PendahuluanSalah satu kegunaan stack adalah untuk mengubah notasi infix menjadi prefix ataupunpostfix, ada baiknya mengenal istilah operand dan operator dahulu.Apa yang dimaksud dengan Operand dan Operator ?Apa yang dimaksud dengn Infix, Prefix dan Postfix?Infix, Prefix ataupun Postfix adalah bentuk penulisan operasi matematika, bedanya :Infix - Operator diletakkan di antara OperandPrefix - Operator diletakkan di depan OperandPostfix / Sufix - Operator diletakkan di belakang OperandMengapa harus menggunakan Prefix dan Postfix?Karena infix memiliki beberapa kekurangan, yaitu :1. Urutan pengerjaan tidak berdasarkan letak kiri atau kanannya,tetapi berdasarkan precedence-nyaContoh : 3 + 4 x 23 + 4 x 2 , maka urutan pengerjaan adalah 4 x 2 dahulu.3 + 8 , baru hasilnya ditambah 311Urutan precedence (dari prioritas tertinggi) adalah sebagai berikut :1. - Pemangkatan2. - Perkalian dan Pembagian3. - Penjumlahan dan Pengurangan.- Kecuali kalau ada tanda kurung.2. Menggunakan tanda kurung. Infix bisa menggunakan tanda kurung. Tetapi tandakurung dapat mengacak urutan precedence.Contoh : Tanpa penggunaan tanda kurung :9 – 5 – 39 – 5 – 3 , maka urutan pengerjaan adalah 9 - 5 dahulu.4 – 31Bandingkan dengan penggunaan tanda kurung berikut :9 – ( 5 – 3 )9 – ( 5 – 3 ) , maka urutan pengerjaan adalah 5 – 3 dahulu.9 – 273. Jika suatu program akan mengevaluasi (mencari hasil) suatu infix, maka komputer perlumen-scan berulang-ulang mencari urutan pengerjaannya dahulu.Contoh : 7 + 4 x 2 – 6 / 3
  9. 9. Resume Struct & Stack 9Jika kita diminta untuk menghitung soal seperti itu, maka kita tahu bahwa yang pertamakali harus kita kerjakan adalah 4 x 2. Lalu 6 / 3 dsb, seperti langkah-langkah berikut :7 + 4 x 2 – 6 / 37 + 8 – 6 / 37 + 8 – 215 – 213Komputer tidak bisa membaca keseluruhan soal sekaligus. Komputer hanya bisa men-scansoal satu per satu operand atau operator. Sehingga untuk mengetahui mana yang harusdikerjakan duluan, komputer harus men-scan keseluruhan soalnya dulu. Jadi langkah-langkah si komputer dalam mengerjakan soal infix seperti berikut:1. - Cari precedence tertinggi dengan men-scan kiri ke kanan keseluruhan soal.2. - Hitung nilai operator dengan precedence tertinggi tersebut.3. - Ulangi lagi dari langkah 1, sampai semua operator selesai dikerjakan.Jika komputer tidak men-scan keseluruhan soal terlebih dahulu, maka akan terjadikesalahan pada hasilnya.3.2. Konversi NotasiKonversi Infix ke Prefix Manual (tanpa stack)Langkah-langkahnya:1. Cari operator yang memiliki precedence tertinggi.2. Letakkan operator tsb di depan operand-operandnya.3. Ulangi lagi.Contoh:A + B – C x D ^ E / F , ”D ^ E” maksudnya D pangkat E.A + B – C x D ^ E / F , pangkat memiliki precedence tertinggiA + B – C x ^ D E / F , taruh ^ di depan D dan EA + B – C x ^ D E / F , x (kali) dan / (bagi) memiliki precedence sama tapi x di kiriA + B – x C ^ D E / F , taruh x di belakangA + B – x C ^ D E / F , dan sebagainyaA + B – / x C ^ D E FA + B – / x C ^ D E F+ A B – / x C ^ D E F+ A B – / x C ^ D E F– + A B / x C ^ D E F , inilah bentuk Prefix-nya.Konversi Infix ke Postfix Manual (tanpa stack)Langkah-langkahnya :1.Cari operator yang memiliki precedence tertinggi.2.Letakkan operator tsb di belakang operand-operandnya.3. Ulangi terus sampai bosan, eh salah, sampai selesai.Contoh :A + B – C x D ^ E / F , ”D ^ E” maksudnya D pangkat E.A + B – C x D ^ E / F , pangkat memiliki precedence tertinggiA + B – C x D E ^ / F , taruh ^ di belakang D dan EA + B – C x D E ^ / F , x (kali) dan / (bagi) memiliki precedence sama tapi x di kiriA + B – C D E ^ x / F , taruh x di belakangA + B – C D E ^ x / F ,dan sebagainya
  10. 10. Resume Struct & Stack 10A + B – C D E ^ x F /A + B – C D E ^ x F /A B + – C D E ^ x F /A B + – C D E ^ x F /A B + C D E ^ x F / – , inilah bentuk Postfix-nya.Konversi Infix ke Prefix Menggunakan StackKali ini kita menggunakan 2 Stack, yang satu untuk menampung operand(sebut saja dengan Stack “Pre”) dan yang satunya lagi untuk menampung operator(sebut saja dengan Stack “Opr”).Langkah – langkah :1. Scan Infix dari kanan ke kiri.2. Jika berupa operand, maka Push ke Stack “Pre”.3. Jika berupa operator, maka bandingkan operator NEW tersebut dengan TOP pada Stack“Opr”:a. a. WHILE precedence TOP > NEW, maka POP Stack “Opr” pindahkan ke Stack“Pre”.b. b. Lalu Push NEW ke dalam Stack “Opr”.4. Jika berupa “)“, maka Push “)“ ke Stack “Opr”.5. Jika berupa “(”, maka Pop Stack “Opr” pindahkan ke stack “Pre” sampai ketemu“)“.6. Ulangi terus dari langkah 1 sampai seluruh Infix sudah di-scan.7. POP semua isi Stack “Opr”, pindahkan ke Stack “Pre”.8. POP semua isi Stack “Pre”, pindahkan ke Prefix.Contoh : A ^ B / ( C – D )
  11. 11. Resume Struct & Stack 11Konversi Infix ke Postfix Menggunakan StackContoh : A ^ B / ( C – D )Keterangan :o Tanda kurung “(“ dan “)”, dapat dianggap tidak memiliki precedence, sehingga padalangkah ke-7, operator “–“ tidak perlu dibandingkan lagi dengan “(“ dan langsung di Pushke Stack.o Pada langkah ke-8, tanda “)” dibaca dari Infix, maka Stack di Pop terus sampai ketemutanda “(“. Sehingga pada contoh di atas operator “–“ di Pop dan dipindahkan ke Postfix.
  12. 12. Resume Struct & Stack 123.3. Evaluasi EkspresiEVALUASIYang dimaksud dengan “Evaluasi” disini adalah mencari nilai akhir dari suatu notasi.Dengan kata lain, disuruh ngitung hasilnya.Contoh : Berapa hasil 3 + 4 ?Jawab : 7Evaluasi Postfix ManualLangkah-langkahnya :1. Scan Postfix dari kiri ke kanan.2. Jika berupa operand, cuekin dulu aja.3. Jika berupa operator, ambil 2 operand sebelumnya (yang tadi sempet kita cuekin disebelah kiri), lakukan perhitungan, lalu simpan lagi berupa operand.4. Begitu seterusnya sampai ujung kanan Postfix.Contoh :Postfix : 7 6 5 x 3 2 ^ – +7 6 5 x 3 2 ^ – + , scan terus sampai ketemu operator pertama.7 6 5 x 3 2 ^ – + , hitung 6 x 5.7 30 3 2 ^ – + , scan lagi cari operator berikutnya.7 30 3 2 ^ – + , hitung 3 pangkat 2.7 30 9 – + , scan lagi cari operator berikutnya.7 30 9 – + , hitung 30 – 9.7 21 + , scan lagi.7 21 + , hitung 7 + 24.28 , selesai.Evaluasi Postfix Menggunakan StackLangkah-langkahnya :1. Scan Postfix dari kiri ke kanan.2. Jika berupa Operand, masukkan ke Stack.3. Jika berupa Operator, Pop Stack 2 kali (ambil 2 operand), hitung hasilnya, lalu Push lagike dalam Stack.4. Ulangi lagi sampai ujung kanan Postfix.Evaluasi Prefix ManualLangkah-langkahnya idem, sama kaya Postfix, tapi arah scannya dari kanan ke kiri.Contoh :Prefix : + 7 – x 6 5 ^ 3 2 (soalnya sama nih sama soal Postfix tadi)+ 7 – x 6 5 ^ 3 2 , scan kanan ke kiri sampai ketemu operator.+ 7 – x 6 5 ^ 3 2 , hitung 3 pangkat 2.+ 7 – x 6 5 9 , selanjutnya silahkan pelajari sendiri dulu.+ 7 – x 6 5 9+ 7 – 30 9+ 7 – 30 9+ 7 21+ 7 2128
  13. 13. Resume Struct & Stack 13Evaluasi Prefix Menggunakan StackLangkah-langkahnya :1. Scan Postfix dari kanan ke kiri.2. Jika berupa Operand, masukkan ke Stack.3. Jika berupa Operator, Pop Stack 2 kali (ambil 2 operand), hitung hasilnya, lalu Push lagike dalam Stack.4. Ulangi lagi sampai ujung kanan Postfix.3.4. Kasus StackDari Notasi Infiks berikut ini tentukan prefix dan postfix dengan menggunakan stack !Infix : 7*3+6^5/4-2Prefix : ?Postfix : ?Jawab :PrefixCharacter yang di Uji Stack Prefix2 2- - 24 - 42/ -/ 425 -/ 542^ -/^ 5426 -/^ 6542+ + -/^65423 + 3-/^6542* +* 3-/^65427 +* 73-/^6542+*73-/^6542Jadi prefix dari 7*3+6^5/4-2 adalah +*73-/^6542PostfixCharacter yang di Uji Stack Postfix7 7* * 73 * 73+ + 73*6 + 73*6^ +^ 73*65 +^ 73*65/ +/ 73*65^4 +/ 73*65^4- - 73*65^4/+2 - 73*65^4/+2-73*65^4/+2-Jadi postfix dari 7*3+6^5/4-2 adalah 73*65^4/+2-

×