Selasa, 16 September 2008

Struktur Data (Queue)


Sama seperti Stak namun operasinya ada ada di depan, sedangkan di belakang/ekor/tail sebagai pintu masuk antrian, Struktur Data Antrean (Queue) merupakan suatu bentuk khusus dari List Linier  dengan operasi pemasukan data hanya diperbolehkan pada salah satu sisi, yang disebut sisi Belakang / ekor (Tail) dan operasi penghapusan hanya diperbolehkan pada sisi lainnya yang disebut sisi Depan / kepala (Head) dari LinkedList. 
 
seperti halnya kita saat mengantri disebuah loket, orang yang pertamakali datang dialah yang pertamakali dilayani.




CREATE
  Untuk menciptakan dan menginisialisasi Queue Dengan cara membuat Head dan Tail  = -1
ISEMPTY
  Untuk memeriksa apakah queue kosong
ISFULL
  Untuk memeriksa apakah queue sudah penuh
ENQUEUE
  Untuk menambahkan item pada posisi paling belakang
DEQUEUE
  Untuk menghapus item dari posisi paling depan
CLEAR
  Untuk mengosongkan queue


    #include
#include
#include
#define MAX 6

typedef struct{
int data[MAX];
int head;
int tail;
}queue;
queue antrian;

void create()
{
antrian.head=antrian.tail=-1;
}

int isempty() {
if(antrian.tail==-1)
return 1;
else
return 0;
}

int isfull() {
if(antrian.tail==MAX-1)
return 1;
else
return 0;
}

void enqueue(int data)
{
if(isempty()==1)
{
antrian.head=antrian.tail=0;
antrian.data[antrian.tail]=data;
printf("%d, Sudah Masuk!",antrian.data[antrian.tail]);

void tampil();
{
int i;
if (isempty()==0)
{
 for(i=antrian.head;i<=antrian.tail;i++)
 {
  printf(" %d ",antrian.data[i]);
  }
}
else
 printf("\n**** QUEUE IS EMPTY ****\n");
}
}
else
if(isfull()==0)
{
antrian.tail++;
antrian.data[antrian.tail]=data;
printf("%d , Sudah Masuk!",antrian.data[antrian.tail]);
}
  else{
  if(isfull()==1)
  {
  cout<<"\n\n**** QUEUE IS FULL , data TIDAK dapat masuk ****";
  }
  }
gotoxy(25,8);cout<<"PRESS any key for back to MENU";
}


int dequeue()
{
if (isempty()==1){
cout<<"\n**** ERROR :: QUEUE IS EMPTY ****";
}else
if(isempty()==0){
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--;
cout<<"\n\nData Yang Keluar => "<}
gotoxy(25,8);cout<<"PRESS any key for back to MENU";
}

void clear()
{
antrian.head=antrian.tail=-1;
printf("\n\n**** DATA CLEAR ****");
gotoxy(25,8);cout<<"PRESS any key for back to MENU";
}

void tampil()
{
int i;
if(isempty()==0)
{
cout<<"Data Yang ada Dalam QUEUE : "<for(i=antrian.head;i<=antrian.tail;i++)
{
printf("| %d |",antrian.data[i]);
}
}
else
{
printf("\n**** QUEUE IS EMPTY ****\n");
}
gotoxy(25,8);cout<<"PRESS any key for back to MENU";
}

void main()
{
int pil;
int data;
create();
do
{
clrscr();
gotoxy(25,2);cout<<"========MENU PILIHAN========"<gotoxy(25,4);cout<<"============================"<gotoxy(30,6);cout<<" 1. ENQUEUE "<gotoxy(30,7);cout<<" 2. DEQUEUE "<gotoxy(30,8);cout<<" 3. TAMPILAN "<gotoxy(30,9);cout<<" 4. CLEAR "<gotoxy(30,10);cout<<" 5. KELUAR "<gotoxy(25,12);cout<<"============================"<gotoxy(25,14);cout<<" Masukan Pilihan Anda => ";cin>>pil;

switch(pil){
case 1:
clrscr();
printf("\n\n Masukan Data => "); scanf("%d",&data);
enqueue(data);
break;

case 2:
clrscr();
dequeue();
break;

case 3:
clrscr();
cout<tampil();
break;

case 4:
clrscr();
clear();
break;

case 5:
clrscr();
gotoxy(25,8);cout<<"**** TERIMA KASIH ****"<break;
}
getch();
} while(pil!=5);
}

 

Senin, 15 September 2008

Struktur Data (Operasi Stak)

Stak atau biasa kita kenal dengan istilah tumpukan, Merupakan stah satu darri struktur data dengan bentuk khusus dari Linier List list yang berurutan, dimana pemasukan dan penghapusan elemennya datanya hanya dapat dilakukan pada satu posisi, yaitu posisi akhir dari List (Top)sedangkan Prinsip Stack adalah LAST-IN-FIRST-OUT (LIFO). Komponenya berupa Isemty, Isfull, Push, Pop dan clear.


ISEMPTY

  Untuk memeriksa apakah stack kosong, Dengan cara memeriksa TOP of STACK. Jika TOP masih = -1 maka berarti stack masih kosong


ISFULL

  Untuk memeriksa apakah stack sudah penuh, Dengan cara memeriksa TOP of Stack.

  Jika TOP of STACK = MAX_STACK-1 maka FULL (Penuh)

  Jika TOP of STACK < MAX_STACK-1 maka belum penuh


PUSH

    Untuk menambahkan item pada posisi paling atas (TOP), Menambah satu (increment) nilai TOP of   STACK setiap ada penambahan elemen   stack selama stack masih belum penuh kemudian Isikan nilai baru ke stack berdasarkan indeks TOP   of STACK setelah ditambah satu   (diincrement)


POP

  Untuk menghapus item paling atas (TOP)dengan cara:

  1. Ambil dahulu nilai elemen teratas stack   dengan mengakses TOP of STACK.
  2. Tampilkan nilai yang akan diambil.
  3. Lakukan decrement nilai TOP of STACK   sehingga jumlah elemen stack berkurang 1


CLEAR

  Untuk mengosongkan stack, membuat stack hampa sehingga Top pada Stack berada kembali di posisi Top = -1


      #include
      #include
      #include
void main()
{
int stack[10];
int top=-1;
int pilih, i;
do
{
gotoxy(25,2);cout<<"========MENU PILIHAN========"<gotoxy(25,4);cout<<"============================"<gotoxy(30,6);cout<<" 1. PUSH "<gotoxy(30,7);cout<<" 2. POP "<gotoxy(30,8);cout<<" 3. VIEW "<gotoxy(30,9);cout<<" 4. EXIT "<gotoxy(25,11);cout<<"============================"<gotoxy(25,12);printf("Pilih = "); scanf("%d", &pilih);
switch(pilih)
{
case 1://push
clrscr();
if (top > 10)
printf("Stack penuh!\n");
else
{    printf("Data = "); scanf("%d", &stack[top+1]);
top++;
}
break;

case 2://pop
clrscr();
if (top < 0)
printf("Stack kosong!\n");
else
{
printf("Data keluar = %d\n", stack[top]);
top--;
}
break;

case 3://view
cout<<"\n\ndata yang ada pada STACK : \n";
{
for(i=top; i>=0; i--)
printf("%d ", stack[i]);
printf("\n");
}
break;

case 4:
printf("Exit…\n");
break;
}
}while (pilih!=4);
}

Rabu, 03 September 2008

struktur data pemetaan array dimensi 2

Array dimensi dua merupakan aray yang memiliki baris dan kolom

Deklarasi : Type_Data Nama_Variabel [Index1] [index2];
Misal : int A[3][2];

A =  1  4
     2  5
     3  6

Pemetaaan array 2 dimensi terbagi 2:
  1. Secara Kolom Per Kolom (Coloumn Major Order/CMO) 
  2. Secara Baris Per Baris (Row Major Order / RMO
@M[i][j] = Posisi Array yg dicari 
M[0][0= Posisi alamat awal index array
i = Baris
j = kolom
L = Ukuran memory type data
K = Banyaknya elemen per kolom 

N = Banyaknya elemen per baris 


1. Berdasarkan kolom Perkolom
A[0 0]  A[0 1]  A[1 0]  A[1 1]  A[2 0]  A[2 2]


Suatu  Array X dideklarasikan sebagai berikut :

Float X[4][3], dengan alamat index X[0][0] berada di 0011(H)dan dan ukuran type data float = 4 
Tentukan berapa alamat array X[3][2]  berdasarkan cara pandang baris dan kolom ?

Secara Kolom Per Kolom (Coloumn Major Oder / CMO)

  @M[i][j] = @M[0][0] + {(j - 1) * K + (i - 1)} * L

    X[3][2] = 0011(H) + {(2 – 1) * 4 + (3 – 1)} * 4

    = 0011(H) + 24 (D)  18 (H)

    = 0011(H) + 18 (H) 

    = 0029(H) 

2. Berdasarkan baris Perbaris
Secara Baris Per Baris (Row Major Oder / RMO)

  @M[i][j] = @M[0][0] + {(i - 1) * N + (j - 1)} * L

    X[3][2] = 0011(H) + {(3 – 1) * 3 + (2 – 1)} * 4

    = 0011(H) + 28 (D)  1C (H)

    = 0011(H) + 1C (H) 

    = 002D(H) 





 

 

Selasa, 02 September 2008

Struktur Data Pemetaan Array Dimensi 1 Dalam Storage

Array dimensi 1 merupakan aray yang hanya memiliki baris, secara linear dari kiri kekanan atau sebaliknya, Pemetaan array dimensi 1 untuk menjari dara lalam sebuah storage.

Rumus :  @A[i] = B  + (i – 1) * L

Dimana    
@A[i] : Posisi Array yg dicari
B     :  Posisi awal index di memory komputer
i     : Subkrip atau indeks array yg dicari
L     : Ukuran / Besar memory suatu type data


contoh :

Diketahui Array A dideklarasikan sebagai berikut :

int A[5]; dengan alamat awal index berada di 0111 (H) dan ukuran memory type data integer = 2 

Tentukan berapa alamat array A[3] ?

Diketahui :

@A[i]  =  A[2]

B      =  0011 (H)

i      =  2

L      =  2

@A[i]  = B  + (i – 1) * L
A[2]   = 0011(H) + (2 – 1) * 2

       = 0011(H) + 2 (D)  --> 4 Desimal menjadi 4 Hexa

       = 0011(H) + 2 (H)

       = 0013(H)

berarti urutanb Array A[2] = 0013