JURUSAN ILMU KOMPUTER FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM UNIVERSITAS UDAYANA 2012
BAB I STRUCT
1.1. Pengertian Struct Struct yang merupakan kependekan dari structure (struktur) yaitu tipe data yang dapat melakukan penyimpanan beberapa data yang saling terkait, berbeda halnya dengan suatu array yang berisi dengan kumpulan elemen-elemen array yang bertipe sama, suatu struct merupakan kumpulan dari satu atau beberapa variabel yang mempunyai tipe sama atau berbeda. Variabel-variabel yang membentuk suatu struktur ini selanjutnya disebut dengan elemen-elemen atau angota struktur. Dengan demikian suatu struktur dimungkinkan dapat diisi dengan elemen-elemen data bertipe int,float,char dan lainnya.
Contoh Eksekusi Program: Program input perpustakaan Masukkan banyak buku: 2 Input data buku ke 1 Masukkan Kode Buku: 001DC Masukkan Judul Buku: Detective Conan Vol.21 Masukkan Nama Pengarang: Aoyama Gosho Masukkan Jumlah buku yang tersedia: 3 Input data buku ke 2 Masukkan Kode Buku: 023DE Masukkan Judul Buku: Doraemon Masukkan Nama Pengarang: Fujiko F. Fujio Masukkan Jumlah buku yang tersedia: 1 ================================ Data buku ke-1 Kode Buku : 001DC Judul Buku: Detective Conan Vol.21 Nama Pengarang: Aoyama Gosho Jumlah buku yang tersedia: 3 Kode Buku: 023DE Judul Buku: Doraemon Nama Pengarang: Fujiko F. Fujio Jumlah buku yang tersedia: 1
Penjelasan Program: Saat user memasukkan nilai dari banyak buku maka nilai tersebut akan disimpan di dalam variabel jml.
struct buku perpus[jml];
merupakan perintah untuk memanggil kumpulan struct yang kita beri nama perpus dengan banyak sesuai dengan jumlah inputan yang diinginkan user.
BAB II STACK 2.1. Pengertian Stack Stack disebut juga tumpukan dimana data hanya dapat dimasukkan dan diambil dari satu sisi. Stack seperti tumpukan buku. Data dapat ditambahkan, tetapi tidak dapat disisipkan. Data dapat diambil, tetapi hanya tumpukan teratas. Karena itu, stack bersifat LIFO (Last In First Out).
Operasi yang dapat dilakukan stack adalah: 1. Menambah (push) 2. Mengambil (pop) 3. megecek apakah stack penuh (isFull) 4. mengecek apakah stack kosong (isEmpty) 5. membersihkan stack (clear). 6. Mencetak isi stack (print)
2.2. Operasi Umum Stack Saat ini, kita akan mencoba membuat stack dan operasi-operasi yang dapat dilakukannya. 1. Mendefinisikan stack dengan menggunakan struct
typedef struct stack // Mendefinisikan stack dengan menggunakan struct { int top; char data [15][20]; // menampung 15 data dengan jumlah string max 20 huruf };
2.3. Pemanfaatan Stack Notasi Infix Postfix Cara penulisan dengan notasi infix artinya operator ditulis diantara 2 operand . Cara penulisan dengan notasi postfix artinya operator ditulis sesudah operand. Konversi infix ke postfix : =[62-]*[54+] =[62-][54+]* =62-54+*
Infix 16 / 2 ( 2 + 14 ) * 5 2 + 14 * 5 (62)*(5+4) Postfix 16 2 / 2 14 + 5 * 2 14 5 * + 6254+*
Pembuatan kalkulator SCIENTIFIC Baca soal dari depan ke belakang Jika operand masukkan ke posftix Jika operator Jika stack masih kosong push ke stack Jika derajat operator soal > derajat operator top of stack Push operator soal ke stack
Selama derajat operator soal <= derajat operator top of stack Pop top of stack dan masukkan ke posfix Setelah semua dilakukan, push operator soal ke stack
Jika sudah semua soal dibaca pop semua isi stack dan push ke postfix sesuai urutan
Gambar 2.1 Kalkulator SCIENTIFIC Sederhana Menggunakan Notasi Postfix Pada gambar 2.1 kotak stack akan diisi oleh operator, sedangkan kotak postfix akan diisi oleh angka/huruf. Untuk lebih mudah dipahami, perhatikanlah contoh soal berikut: Misalkan kita ingin mencari hasil dari 4 * 5 6 / 3 + 3 1 dengan notasi Postfix. Caranya adalah sebagai berikut:
Dari perhitungan notasi diatas, kita mendapatkan hasil : 4 5 * 6 3 / 3 + 1 . Sama halnya dengan program, tentu saja notasi ini perlu diuji kebenarannya, jika 4 * 5 6 / 3 + 3 1 = 14. Apakah hasil yang menggunakan notasi prefix sama dengan hasil perhitungan biasa? Mari kita selesaikan bersama-sama. Caranya adalah sbb:
Gambar 2.3 Menguji Kebenaran Notasi Postfix Jadi dapat disimpulkan bahwa hasil menggunakan notasi postfix sama dengan menghitung biasa.
Notasi Infix Prefix Cara penulisan dengan notasi infix artinya operator ditulis diantara 2 operand. Cara penulisan dengan notasi prefix artinya operator ditulis sebelum kedua operand yang akan disajikan.
Proses konversi dari infix ke prefix : =[+AB]*[-CD] =*[+AB][-CD] =*+AB-CD Sama halnya denga notasi postfix, notasi prefix ini juga dapat digunakan untuk menghitung (SCIENTIFIC calculator) namun terdapat beberapa perbedaan pada postfix dan prefix saat operand masuk ke stack, yaitu:
Infix A+B A+BC (A+B)*(CD) Prefix +AB -+ABC *+ABCD
Gambar 2.4 Perbedaan dan Persamaan Antara Postfox dengan Prefix Saat Operator di Push Ke Stack
int main() *top = *top - 1; } else{ printf("Stack telah kosong shg tidak dpt mempop lagi\n"); exit(0); } }
3.1. Pengertian Queue Queue disebut juga antrian dimana data masuk di satu sisi dan keluar di sisi yang lain. Karena itu, queue bersifat FIFO(First In First Out). 3.2. Operasi Umum Queue Saat ini, kita akan mencoba membuat queue dan operasi-operasi yang dapat dilakukannya. Hal-hal yang perlu dilakukan untuk membuat queue yaitu 1. Mendefinisikan queue dengan menggunakan struct dimana kita perlu menggunakan variable head dan tail sebagai penanda pada stack.
typedef struct queue // Mendefinisikan queue dengan menggunakan struct { int head; int tail; char data [15][20]; // menampung 15 data dengan jumlah string max 20 huruf };
3.
4. Mendeklarasikan operasi-operasi/fungsi yang dapat dilakukan queue. a. Enqueue (menginputkan data pada queue)
void enqueue(char d[20]) { antri.head=0; antri.tail++; strcpy(antri.data[antri.tail],d); printf("data berhasil dimasukkan"); }
case 2: { if(cek==0) printf("\nAntrian Kosong\n"); else { hapus=data[0]; for(v=0;v<cek;v++) data[v]=data[v+1]; data[cek-1]=NULL; cek--; printf("\n Data dengan nilai %d terhapus\n",hapus); } break; } case 3: { if(cek==0) printf("\nAntrian Kosong\n"); else { printf("\n"); for( v=0;v<cek;v++) { printf("| %d |", data[v]); } printf("\n"); } break; } case 4: { exit(0); break; } } if(pil<4) goto menu; }