Friday, 20 November 2015

laporan praktikum Queue

LAPORAN PRAKTIKUM V

 QUEUE

a)                  Tujuan Pembelajaran
1.      - Mahasiswa mampu menjelaskan pengertian queue dan dequeue.
2.      - Mahasiswa mampu menjelaskan dan menunjukkan cara pembuatan queue, operasi push dan pop pada array.
3.      - Mahasiswa mampu menjelaskan dan menunjukkan program dengan ADT(Abstract Data Type) queuedan dequeue dengan array.

b)     Dasar Teori
Antrian (Queue) dapat diartikan sebagai suatu kumpulan data yang seolah-olah terlihat seperti ada data yang diletakkan di sebelah data yang lain seperti pada gambar 01. Pada gambar, data masuk melalui lorong di sebelah kanan dan masuk dari terowongan sebelah kiri. Hal ini membuat antrian bersifat FIFO (First In First Out), beda dengan stack yang berciri LIFO.



Antrian dapat dibuat baik dengan array maupun dengan struct. Pada pembuatan antrian dengan array, antrian yang disajikan bersifat statis. Ini disebabkan oleh jumlah maksimal  array sudah ditentukan sejak deklarasi awal.

QUEUE DENGAN LINIEAR ARRAY:

- Terdapat satu buah pintu masuk di suatu ujung dan satu buah pintu keluar di
ujung Satunya Sehingga membutuhkan variabel Head dan Tail

Create()
• Untuk menciptakan dan menginisialisasi Queue
• Dengan cara membuat Head dan Tail = -1

IsEmpty()
• Untuk memeriksa apakah Antrian sudah penuh atau belum
• Dengan cara memeriksa nilai Tail, jika Tail = -1 maka empty
• Kita tidak memeriksa Head, karena Head adalah tanda untuk kepala
antrian (elemen pertama dalam antrian) yang tidak akan berubah-ubah
• Pergerakan pada Antrian terjadi dengan penambahan elemen Antrian
kebelakang, yaitu menggunakan nilai Tail


IsFull()
• Untuk mengecek apakah Antrian sudah penuh atau belum
• Dengan cara mengecek nilai Tail, jika Tail >= MAX-1 (karena MAX-1
adalah batas elemen array pada C) berarti sudah penuh


Enqueue(data)
• Untuk menambahkan elemen ke dalam Antrian, penambahan elemen
selalu ditambahkan di elemen paling belakang
• Penambahan elemen selalu menggerakan variabel Tail dengan cara
increment counter Tail

Dequeue()
• Digunakan untuk menghapus elemen terdepan/pertama dari Antrian
• Dengan cara mengurangi counter Tail dan menggeser semua elemen
antrian kedepan.
• Penggeseran dilakukan dengan menggunakan looping



 Clear()
• Untuk menghapus elemen-elemen Antrian dengan cara membuat Tail dan
Head = -1
• Penghapusan elemen-elemen Antrian sebenarnya tidak menghapus
arraynya, namun hanya mengeset indeks pengaksesan-nya ke nilai -1
sehingga elemenelemen Antrian tidak lagi terbaca


Print()
• Untuk menampilkan nilai-nilai elemen Antrian
• Menggunakan looping dari head s/d tail
Perbedaan antara stack dan queue terdapat pada aturan penambahan dan
penghapusan elemen. Pada stack, operasi penambahan dan penghapusan elemen
dilakukan di satu ujung. Elemen yang terakhir kali dimasukkan akan berada paling dekat
dengan ujung atau dianggap paling atas sehingga pada operasi penghapusan, elemen
teratas tersebut akan dihapus paling awal, sifat demikian dikenal dengan LIFO. Pada
queue, operasi tersebut dilakukan di tempat yang berbeda. Penambahan elemen selalu
dilakukan melalui salah satu ujung, menempati posisi di belakang elemen-elemen yang
sudah masuk sebelumnya atau menjadi elemen paling belakang. Sedangkan penghapusan
elemen dilakukan di ujung yang berbeda, yaitu pada posisi elemen yang masuk paling
awal atau elemen terdepan. Sifat yang demikian dikenal dengan FIFO.


c)      LATIHAN(PERCOBAAN):
Percobaan 1
Algoritma dan Struktur Data
Nama Program                      : Program Queue
Bahasa Pemrogramam         : C++
Compiler                                : Code Blocks
Script program                      :
#include<iostream.h>
#include<stdlib.h>
#define MAX 10

void insert(int gueue[], int*rear, int nilai);
void del(int gueue[],int*front, int rear, int*nilai);

void main()
{
    int queue[MAX];
    int front, rear;
    int n, nilai;
   
    front=rear=(-1);
    do
    {
        do
        {
            cout<<"masukkan nilai elemen: " ;
            cin>>nilai;
            insert(queue,&rear,nilai);
           
            cout<<endl;
            cout<<"tekan 1 untuk melanjutkan: " ;
            cin>>n;
        }while(n==1);
       
        cout<<endl;
        cout<<"tekan 1 untuk menghapus sebuah elemen"<<endl;
        cin>>n;
       
        while(n==1)
        {
            del(queue,&front,rear,&nilai);
            cout<<"nilai telah dihapus:"<<nilai<<endl;
            cout<<endl;
            cout<<"tekan 1 untuk menghapus sebuah elemen:"<<endl;
            cin>>n;
        }
        cout<<endl;
        cout<<"tekan 1 untuk melanjutkan:";
        cin>>n;
    }while(n==1);
}

void insert(int gueue[], int*rear, int nilai)
{
    if(*rear<MAX-1)
    {
        *rear=*rear+1;
        gueue[*rear]=nilai;
    }
    else
    {
        cout<<"queue penuh, insert tidak dapat dilakukan"<<endl;
        exit(0);
    }
}

void del(int queue[], int*front, int rear, int *nilai)
{
    if(*front==rear)
    {
        cout<<"queue kosong, delete tidak dapat dilakukan"<<endl;
        exit(0);
    }
    *front=*front+1;
    *nilai=queue[*front];
}
Script yang benar :
#include<iostream>
#include<stdlib.h>
#define MAX 10
using namespace std;

void insert(int gueue[], int*rear, int nilai);
void del(int gueue[],int*front, int rear, int*nilai);

int main()
{
    int queue[MAX];
    int front, rear;
    int n, nilai;

    front=rear=(-1);
    do
    {
        do
        {
            cout<<"masukkan nilai elemen: " ;
            cin>>nilai;
            insert(queue,&rear,nilai);

            cout<<endl;
            cout<<"tekan 1 untuk melanjutkan: " ;
            cin>>n;
        }while(n==1);

        cout<<endl;
        cout<<"tekan 1 untuk menghapus sebuah elemen"<<endl;
        cin>>n;

        while(n==1)
        {
            del(queue,&front,rear,&nilai);
            cout<<"nilai telah dihapus:"<<nilai<<endl;
            cout<<endl;
            cout<<"tekan 1 untuk menghapus sebuah elemen:"<<endl;
            cin>>n;
        }
        cout<<endl;
        cout<<"tekan 1 untuk melanjutkan:";
        cin>>n;
    }while(n==1);
}

void insert(int gueue[], int*rear, int nilai)
{
    if(*rear<MAX-1)
    {
        *rear=*rear+1;
        gueue[*rear]=nilai;
    }
    else
    {
        cout<<"queue penuh, insert tidak dapat dilakukan"<<endl;
        exit(0);
    }
}

void del(int queue[], int*front, int rear, int *nilai)
{
    if(*front==rear)
    {
        cout<<"queue kosong, delete tidak dapat dilakukan"<<endl;
        exit(0);
    }
    *front=*front+1;
    *nilai=queue[*front];
}
Output Program :
Algoritma :
1.      Mulai.
2.      Membaca file header.
3.      Membaca fungsi insert(int gueue[], int*rear, int nilai)
del(int gueue[],int*front, int rear, int*nilai).
4.      Membaca fungsi utama.
5.      Membaca tipe data int queue[MAX], front, rear n dan nilai.
6.      Membaca fungsi front=rear=(-1).
7.      Membaca percabangan do-while.
8.      Membaca percabangan do-while kedua dalam do-while pertama.
9.      Inputan nilai elemen.
10.  Pemanggilan fungsi insert(queue,&rear,nilai).
11.  Tekan 1 untuk melanjutkan.
12.  Cetak hasil.
13.  Jika bukan 1 maka lanjut ke tekan 1 untuk menghapus.
14.  Pemanggilan fungsi del(queue,&front,rear,&nilai).
15.  Cetak hasil.
16.  Deklarasi fungsi insert(int gueue[], int*rear, int nilai).
17.  Deklarasi fungsi del(queue,&front,rear,&nilai).
18.  Cetak hasil.
19.  Selesai.
Deskripsi:

d)   TUGAS PRAKTIKUM
Tugas Praktikum
Algoritma dan Struktur Data
Nama Program                     : Program Implementasi Queue.
Bahasa Pemrogramam         : C++
Compiler                                : Code Blocks.
Script program                      :
#include<iostream.h>
#include<conio.h>

class Queue
{
private:
 struct kue
 {
   int data;
   kue*kuebaru;
 };
 kue*tail;
 kue*entry;
 kue*print;
 kue*head;

public:
 Queue();
 void Delete();
 void Insert();
 void cetak();
 void menu();
};

Queue: :Queue()
{
  tail=1;
  head=NULL;
}

void Queue: :Insert()
{
  int num;
  cout<<"\n\n\n\n\n\t Masukkan data dalam Queue: ";
  cin>>num;
  entry=new kue;
  if(tail==1)
{
  entry->data=num;   //(*entry).data=num
  entry->kuebaru=NULL;//(*entry).kuebaru=null
  tail=entry;
  head=tail;
}
else
{
  entry*data=num;//(*entry).data=num
  entry->kuebaru=NULL;
  tail->kuebaru=entry;//(*entry).kuebaru=entry
  tail=entry;
}
cout<<"\n\n\t***"<<num<<"sudah masuk dalam Queue. "<<endl;
getch();//getch:bwan conio
}
void Queue: :Delete()
{
  if(head==NULL)
   cout<<"\n\n\n\t***ERROR:Queue is empty. \n"<<endl;
  else
  {
    int deleted_element=head->data;//(*head).data=deleted_elemnt
    kuebaru*temp;//kue: nm struct, *temp=data yg ditunjuk olh tbl
    temp=head;
    head=head->kuebaru;//(*head).kuebaru=head
    delete temp;
    cout<<"\n\n\n\t***"<<deleted_element<<"dihapus dari queue. "<<endl;
}
cout<<"\n\n\n\t\t press any key to return to menu";
getch();
}

void Queue: :cetak()
{
  print=head;
  if(print!=NULL)
    cout<<"\n\n\n\n\t angka-angka yang ada di dalam queue adalah:\n"<<endl;
  else
    cout<<"\n\n\n\n\t***tidak ada yang ditampilkan"<<endl;
while(print=NULL)//while cek dulu
{
cout<<"\t"<<print->data<<endl;
print=print->kuebaru;
}
cout<<"\n\n\n\t\t press any key to return to menu. ";
getch();
}

void Queue: :menu()
{
  char Key = NULL;
  do
  {

   cout<<"**Implementasikan Queue**"<<endl;
   cout<<"pilih salah satu menu: "<<endl;
   cout<<"Tekan\'I\' to Masukkan data dalam Queue"<<endl;
   cout<<"Tekan\'D\' to hapus data dari Queue"<<endl;
  
   cout<<"Tekan\'P'\'to Tampilkan data dari Queue"<<endl;
   cout<<"Tekan\'E\'to Exit"<<endl;
   Input:

   cout<<"Masukkan pilihan: ";
   Key = getche();
   if(Key=='e'||Key=='e'||Key=='E')/*untuk fungsi exit*/
     break;
   else if(Key=='i'||Key=='I')
     Insert();
   else if(Key=='d'||Key=='D')
     Delete();
   else if(Key=='p'||Key=='P')
     cetak();
   else
     goto Input;
   }
   while(0);
}

int main()
{
   Queue obj;
   obj.menu();
   return 1;
}
Script program yang benar  :
#include<iostream>
#include<conio.h>
using namespace std;
class queue
{
private:
    struct kue
    {
        int data;
        kue*kuebaru;
    };
    kue*tail;
    kue*entry;
    kue*print;
    kue*head;

public:
    queue();
    void Delete();
    void Insert();
    void cetak();
    void menu();
};
queue::queue()
{
    tail=NULL;
    head=NULL;
}

void queue::Insert()
{
    int num;
    cout<<"\n\n\n\n\n\t Masukkan data dalam Queue:";
    cin>>num;
    entry=new kue;
    if(tail==NULL)
{
  entry->data=num;   //(*entry).data=num
  entry->kuebaru=NULL;//(*entry).kuebaru=null
  tail=entry;
  head=tail;
}
else
{
  entry->data=num;//(*entry).data=num
  entry->kuebaru=NULL;
  tail->kuebaru=entry;//(*entry).kuebaru=entry
  tail=entry;
}
cout<<"\n\n\t***"<<num<<"sudah masuk dalam Queue. "<<endl;
getch();//getch:bwan conio
}
void queue::Delete()
{
  if(head==NULL)
   cout<<"\n\n\n\t***ERROR:Queue is empty. \n"<<endl;
  else
  {
    int deleted_element=head->data;//(*head).data=deleted_elemnt
    kue*temp;//kue: nm struct, *temp=data yg ditunjuk olh tbl
    temp=head;
    head=head->kuebaru;//(*head).kuebaru=head
    delete temp;
    cout<<"\n\n\n\t***"<<deleted_element<<"dihapus dari queue. "<<endl;
}
cout<<"\n\n\n\t\t press any key to return to menu";
getch();
}

void queue::cetak()
{
  print=head;
  if(print!=NULL)
    cout<<"\n\n\n\n\t angka-angka yang ada di dalam queue adalah:\n"<<endl;
  else
    cout<<"\n\n\n\n\t***tidak ada yang ditampilkan"<<endl;
while(print=NULL)//while cek dulu
{
cout<<"\t"<<print->data<<endl;
print=print->kuebaru;
}
cout<<"\n\n\n\t\t press any key to return to menu. ";
getch();
}

void queue::menu()
{
  char Key = NULL;
  do
  {

   cout<<"**Implementasikan Queue**"<<endl;
   cout<<"pilih salah satu menu: "<<endl;
   cout<<"Tekan\'I\' to Masukkan data dalam Queue"<<endl;
   cout<<"Tekan\'D\' to hapus data dari Queue"<<endl;

   cout<<"Tekan\'P'\'to Tampilkan data dari Queue"<<endl;
   cout<<"Tekan\'E\'to Exit"<<endl;
   Input:

   cout<<"Masukkan pilihan: ";
   Key = getche();
   if(Key=='e'||Key=='e'||Key=='E')/*untuk fungsi exit*/
     break;
   else if(Key=='i'||Key=='I')
     Insert();
   else if(Key=='d'||Key=='D')
     Delete();
   else if(Key=='p'||Key=='P')
     cetak();
   else
     goto Input;
   }
   while(0);
}

int main()
{
   queue obj;
   obj.menu();
   return 1;
}
OutProgram :

Algoritma :
1.      Mulai.
2.      Membaca file header.
3.      Cetak hasil.
4.      Selesai.
Deklarasi :

e)      TUGAS RUMAH

Tugas Rumah 1
Algoritma dan Struktur Data
Nama Program                 : Program untuk memasukkan, menghapus dan mencetak suatu antrian data berupa string.
Bahasa Pemrogramam            : C++
Compiler                                   : Code Blocks.
Script program                      :
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
#define MAX 10

char *p[MAX], *pop(void);
int spos = 0;
int rpos = 0;
void insert(void), push(char *q), print(void), clear(void);

void insert(void)
{
  char s[10], *p;
  do {
    printf("spos %d: ", spos+1);
    gets(s);
    if(*s==0) {
       break;
    }
    p = (char *) malloc(strlen(s)+1);
    if(!p) {
      printf("Out of memory.\n");
      return;
    }
    strcpy(p, s);
    if(*s) {
       push(p);
    }
  } while(*s);
}
void print(void)
{
  int t;
  for(t=rpos; t < spos; ++t)
    printf("%d. %s\n", t+1, p[t]);
}
void clear(void)
{
  char *p;

  if((p=pop())==NULL) {
     return;
  }
  printf("%s\n", p);
}
void push(char *q)
{
  if(spos==MAX) {
    printf("List Full\n");
    return;
  }
  p[spos] = q;
  spos++;
}
char *pop(void)
{
  if(rpos==spos) {
    printf("No more.\n");
    return NULL;
  }
  rpos++;
  return p[rpos-1];
}
int main(void)
{
  char s[10];
  register int t;
  for(t=0; t < MAX; ++t) {
     p[t] = NULL;
  }
  while(1) {
    printf("Insert(I), Print(P), Clear(C), Quit(Q): ");
    gets(s);
    *s = toupper(*s);
    switch(*s) {
      case 'I':
        insert();
        break;
      case 'P':
        print();
        break;
      case 'C':
        clear();
        break;
      case 'Q':
        exit(0);
    }
  }
  return 0;
}
Output Program :
Algoritma :
1.      Mulai.
2.      Membaca file header.
3.      Cetak hasil.
4.      Selesai.
Deklarasi :

Tugas Rumah 2
Algoritma dan Struktur Data
Nama Program                 : Program queue dengan modifikasi inputan karakter huruf dan angka, lalu lakukan penghapusan dengan konsep FIFO.
Bahasa Pemrogramam         : C++
Compiler                                : Code Blocks.
Script program                      :
OutProgram :
Algoritma :
1.      Mulai.
2.      Membaca file header.
3.      Cetak hasil.
4.      Selesai.
Deklarasi :

f)       KESIMPULAN
g)      DAFTAR RUJUKAN
1.      Tim Asisten Dosen. 2014. Modul 5 QUEUE (Antrian). Malang: Unversitas Negeri Malang.



0 komentar:

Post a Comment