3. Stack
Stack (tumpukan) adalah struktur data yang meniru bagaimana proses menyimpan dan mengambil suatu buku pada suatu tumpukan buku yang ada di lantai. Apabila diperhatikan dengan seksama maka proses menyimpan buku (disebut push) dan proses mengambil buku (disebut pop) dari suatu tumpukan selalu dilakukan pada bagian atas tumpukan (top of the stack) sehingga terjadi urutan yang disebut LIFO (Last In First Out). Artinya, buku yang terakhir disimpan adalah buku yang pertama harus diambil karena buku inilah yang berada pada urutan teratas dari tumpukan.
Operasi dalam Stack :
- Push : Menyisipkan data ke dalam stack.
- Pop : Mengeluarkan data dari stack.
- IsEmpty : Untuk mengecek apakah stack dalam keadaan kosong atau tidak.
- IsFull : Untuk mengecek apakah stack dalam keadaan penuh atau tidak.
- Clear : Mengosongkan isi data.
Pendeklarasian Stack:
//deklarasi stack dengan struct dan array struct STACK { int data[5]; int top; }; //deklarasi variabel tumpukan dari struct STACK tumpukan;
Contoh Source Code Program (Menggunakan Borlan C++):
//Preprosesor #include<iostream.h> #include<conio.h> #include<stdio.h> //deklarasi stack dengan struct dan array struct STACK { int data[5]; int top; }; //deklarasi variabel tumpukan dari struct STACK tumpukan; //deklarasi fungsi operasi stack void inisialisasi(); int IsEmpty(); int IsFull(); void push(int data); void pop(); //fungsi main program void main() { clrscr(); int pilih, input, i; inisialisasi(); do{ cout<<"1. Push data"<<endl; cout<<"2. Pop Data"<<endl; cout<<"3. Print Data"<<endl; cout<<"4. Clear Data"<<endl; cout<<endl; cout<<"pilih : "; cin>>pilih; switch(pilih) { case 1: { if(IsFull() == 1) { cout<<"Tumpukanan penuh !"; } else { cout<<"Data yang akan di push : "; cin>>input; push(input); } cout<<endl; getch(); break; } case 2: { if(IsEmpty() == 1) { cout<<"Tumpukanan kosong !"; } else { cout<<"Data yang akan di Pop = " <<tumpukan.data[tumpukan.top]<<endl; pop(); } cout<<endl; getch(); break; } case 3: { if(IsEmpty() == 1) { cout<<"Tumpukanan kosong !"<<endl; } else { cout<<"Data : "<<endl; for(i=0;i<=tumpukan.top;i++) { cout<<tumpukan.data[i]<<" "; } cout<<endl; } cout<<endl; getch(); break; } case 4: { inisialisasi(); cout<<"Tumpukanan sudah kosong !"<<endl; cout<<endl; getch(); break; } default: { cout<<"Tidak ada dalam pilih"<<endl; } } }while(pilih>=1 && pilih <=4); getch(); } // fungsi inisialisasi stack = kosong void inisialisasi() { tumpukan.top = -1; } //fungsi mengecheck apakah stack kosong int IsEmpty() { if (tumpukan.top == -1) { return 1; } else { return 0; } } //fungsi mengecheck apakah stack penuh int IsFull() { if (tumpukan.top == 5-1) { return 1; } else { return 0; } } //fungsi untuk menyisipkan data ke stack void push(int data) { tumpukan.top++; tumpukan.data[tumpukan.top] = data; } //fungsi untuk mengeluarkan data dari stack void pop() { tumpukan.top = tumpukan.top - 1; if(tumpukan.top<0) { tumpukan.top = -1; } }
Hasil Eksekusi Program :
4. Queue
Queue (antrian) adalah struktur data yang meniru antrian orang yang sedang menunggu pelayanan misalnya di depan seorang teller bank, atau antrian orang yang sedang membeli karcis pertunjukan. Apabila diperhatikan dengan seksama maka penambahan orang pada suatu antrian selalu dilakukan pada urutan paling belakang (rear of queue), dan pelayanan selalu dilakukan pada urutan depan (front of queue) sehingga urutan proses antrian sering disebut FIFO(First In First Out). Yang pertama masuk antrian, itulah yang pertama dilayani.
Pendeklarasian Queue:
//deklarasi queue dengan struct dan array struct QUEUE { int data[5]; int head; int tail; }; //deklarasi variabel antrian dari struct QUEUE antrian;
Contoh Source Code Program (Menggunakan Borlan C++):
//Preprosesor #include<iostream.h> #include<conio.h> #include<stdio.h> //deklarasi queue dengan struct dan array struct QUEUE { int data[5]; int head; int tail; }; //deklarasi variabel antrian dari struct QUEUE antrian; //deklarasi fungsi queue void Create(); int IsEmpty(); int IsFull(); void Enqueue(int data); int Dequeue(); //fungsi main program void main() { clrscr(); int pilih, input, i; Create(); do{ cout<<"1. Tambah data"<<endl; cout<<"2. Keluarkan data"<<endl; cout<<"3. Print Data"<<endl; cout<<"4. Clear Data"<<endl; cout<<endl; cout<<"pilih : "; cin>>pilih; switch(pilih) { case 1: { if(IsFull() == 1) { cout<<"Antrian penuh !"; } else { cout<<"Data yang dimasukkan : "; cin>>input; Enqueue(input); } cout<<endl; getch(); break; } case 2: { if(IsEmpty() == 1) { cout<<"Antrian kosong !"; } else { cout<<"Data yang dikeluarkan : " <<Dequeue()<<endl; } cout<<endl; getch(); break; } case 3: { if(IsEmpty() == 1) { cout<<"Antrian kosong !"<<endl; } else { cout<<"Data : "<<endl; for(i=antrian.head;i<=antrian.tail;i++) { cout<<antrian.data[i]<<" "; } cout<<endl; } cout<<endl; getch(); break; } case 4: { Create(); cout<<"Antrian sudah kosong !"<<endl; cout<<endl; getch(); break; } default: { cout<<"Tidak ada dalam pilih"<<endl; } } }while(pilih>=1 && pilih <=4); getch(); } //fungsi create queue/inisialisasi void Create() { antrian.head = antrian.tail = -1; } //fungsi mengecheck apakah queue kosong int IsEmpty() { if (antrian.tail == -1) { return 1; } else { return 0; } } //fungsi mengecheck apakah queue penuh int IsFull() { if (antrian.tail == 5-1) { return 1; } else { return 0; } } //menambah data pada queue void Enqueue(int data) { if(IsEmpty()==1) { antrian.head = antrian.tail = 0; antrian.data[antrian.tail] = data; } else if(IsFull()==0) { antrian.tail++; antrian.data[antrian.tail] = data; } } //mengeluarkan data dari queue 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; }
Hasil Eksekusi Program :
Referensi:
Suarga (2004), Algoritma Pemrograman, ANDI Publisher
Fachrurrozi (2006), Modul Struktur Data, Universitas Sriwijaya
Lanjutan Ke Post Berikutnya :
>>> Sorting dan Searching Data Dalam C++
No comments:
Post a Comment