Saturday, December 19, 2009

Struktur Data - Contoh Aplikasi Stack

Kalo ada error coba atasi sendiri ya .... ;-)

Konversi bilangan basis 10 menjadi basis 2 (biner) :


#include <conio.h>
#include <iostream.h>
#include <string.h>
#define MAX_STACK  20
typedef struct {
  int top;
  int data[20];
} Stack;


void inisialisasi (Stack &s) {
  s.top = -1;
}


int isFull (Stack &s) {
  int temp = MAX_STACK - 1;
  if (s.top == temp) return 1;
  else return 0; 
}




int isEmpty(Stack &s) {
  if (s.top == -1) return 1;
  else return 0;
}


void push(Stack &s, int h) {
  if (isFull(s) == 0) {
  s.top++;
  s.data[s.top] = h;
  }
}


int pop(Stack &s) {
  int i;
  if (isEmpty(s) == 0 ) {
  i = s.data[s.top];
  s.data[s.top]= 0;
  s.top--;
  }
  return i;
}


int peek(Stack &s) {
  return s.data[s.top];
}


// ini adalah fungsi untuk konversi integer menjadi string ...
string IntToString(int intValue) {
  char *myBuff;
  string strRetVal;


  myBuff = new char[100];      // Create a new char array
  memset(myBuff,'\0',100);     // Set it to empty
  itoa(intValue,myBuff,10);    // Convert to string
  strRetVal = myBuff;          // Copy the buffer into the string object
  delete[] myBuff;             // Delete the buffer


  return(strRetVal);
}


string convert(int n) {
  int sisa;
  string str;
  Stack s;
  inisialisasi(s);
  while (n != 0) {
  sisa = n % 2;
  cout << n << " / 2 = ";
  push(s, sisa);
  n = n / 2;
  cout << n << " sisa " << sisa << "; " << sisa << " di-push ke stack ..." << endl;
  }
  cout << endl << "Konversi ke biner : " << endl;
  while (!isEmpty(s)) {
  int n2 = pop(s);
  cout << n2 << " dipop dari stack .. ---> ";
  str = str + IntToString(n2);
  cout << str << endl;
  }
  cout << endl;
  return str;
}


void main(){
  int number;
  clrscr();
  cout << "Masukkan sebuah bilangan integer : "; cin >> number;
  cout << endl;
  string str = convert(number);
  cout << number << " dalam biner adalah  " << str << endl;
}




Hasilnya (output) :


No comments:

Post a Comment