Jumat, 26 Juni 2020

AKHMAD FAUZI R_ RANGKUMAN DAN KESIMPULAN PERTEMUAN 13

PERTEMUAN XIII
QUEUE



Queue
Secara harfiah queue dapat diartikan sebagai antrian. Queue atau Antrian merupakan kumpulan elemen dengan penyisipan dan penghapusan elemen yang dilakukan dari sisi/gerbang yang berbeda Berbeda dengan stack yang bersifat LIFO maka queue bersifat FIFO(First In First Out), yaitu data yang pertama masuk akan keluar terlebih dahulu dan data yang terakhir masuk akan keluar terakhir. Berikut ini adalah gambaran struktur data queue.





Elemen yang pertama kali masuk ke dalam queue disebut elemen depan (front/head of queue), sedangkan elemen yang terakhir kali masuk ke queue disebut elemen belakang (rear/tail of queue). 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.


Operasi‐operasi standar pada queue adalah:
1. membuat queue atau inisialisasi.
2. mengecek apakah queue penuh.
3. mengecek apakah queue kosong.
4. memasukkan elemen ke dalam queue atau InQueue (Insert Queue).

5. Menghapus elemen queue atau DeQueue (Delete Queue).


Disebut juga queue dengan model fisik, yaitu bagian depan queue selalu menempati posisi pertama array. Queue dengan linear array secara umum dapat dideklarasikan sebagai berikut:


Const
MaxQueue = {jumlah};
Type
TypeQueue = byte;
Var
Queue : Array[1..MaxQueue] of TypeQueuel

Head, Tail : Byte;


1. Create
berguna untuk menciptakan queue yang baru dan kosong yaitu dengan cara memberikan nilai awal (head) dan nilai akhir (tail) dengan nol (0). Nol menunjukan bahwa queue masih kosong.


Procedure Create;
Begin
Head := 0; Tail := 0;
End;


2. Empty
Function empty berguna untuk mengecek apakah queue masih kosong atau sudah berisi data. Hal ini dilakukan dengan mengecek apakah tail bernilai nol atau tidak, jika ya maka kosong.
Function Empty : Boolean;
Begin
If Tail = 0 then
Empty := true
Else
Empty := False;
End;


3. Full
Function Full : Boolean;
Begin
If Tail = MaxQueue then
Full := true
Else
Full := False
End;


4. EnQueue
Procedure EnQueue berguna untuk memasukkan 1 elemen ke dalam queue.
Procedure Enqueue(Elemen : Byte);
Begin
If Empty then
Begin
Head := 1;
Tail := 1;
Queue[head] := Elemen;
End
Else
If Not Full then
Begin
Inc(Tail);
Queue[tail] := Elemen;
End;
End;


5. DeQueue
Procedure DeQueue berguna untuk mengambil 1 elemen dari Queue, operasi ini sering disebut juga SERVE. Hal ini dilakukan dengan cara memindahkan semua elemen satu langkah ke posisi di depannya, sehingga otomatis elemen yang paling depan akan tertimpa dengan elemen yang terletak dibelakangnya.
Procedure DeQueue; Var I : Byte;
Begin
If Not Empty then
Begin
For I := Head to Tail‐1 do
Queue[I] := Queue[I+1];
Dec(Tail);
End;
End;


6. Clear
Procedure clear berguna untuk menghapus semua elemen dalam queue dengan jalan mengeluarkan semua elemen tersebut satu per satu sampai kosong dengan memanfaatkan procedure DeQueue.
Procedure Clear;
Begin
While
Not Empty then
DeQueue;

End;


Coding Queue


#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#define max 10


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;
cout<<"data"<<antrian.data[antrian.tail]<<"Masuk!!!";
}
else if(IsFull()==0)
{
antrian.tail++;
antrian.data[antrian.tail]=data;
cout<<"data"<<antrian.data[antrian.tail]<<"Masuk!!!";
}
else if (IsFull()==1)
{
cout<<"Ruangan Penuh!!"<<endl;
cout<<data<<"Gak Bisa MAsuk!!!";
}
}
void Dequeue()
{
int i;
int e = antrian.data[antrian.head];
if(antrian.tail==-1)
{
cout<<"Gak ada antrian.. Data Kosong"<<endl;
}
else
{
for(i=antrian.head;i<antrian.tail-1;i++)
{
antrian.data[i]=antrian.data[i+1];
}
antrian.tail--;
cout<<"Data yang keluar lebih dulu ="<<e<<endl;
}
}
void clear()
{
antrian.head=antrian.tail=-1;
cout<<"Duh Lega, Ruangan jadi gak sumpek.."<<endl;
cout<<"Data Clear";
}


void tampil()
{
if(IsEmpty()==0)
{
cout<<"data dalam antrian"<<endl;
cout<<"================================";
cout<<endl;
for(int i=antrian.head;i<=antrian.tail;i++)
{
cout<<"| "<<antrian.data[i]<<" |";
}
}
else
{
cout<<"ga ada antrian.. Data Kosong";
}
}
void main()
{
int pil;
int data;
create();
do
{
clrscr();
cout<<"Implementasi antrian dengan struct"<<endl;
cout<<"=========================================";
cout<<endl;
cout<<"1. Enqueue"<<endl;
cout<<"2. Dequeue"<<endl;
cout<<"3. print"<<endl;
cout<<"4. clear"<<endl;
cout<<"5. exit"<<endl;
cout<<"Masukkan Pilihan anda :" ;
cin>>pil;
switch(pil)
{
case 1:
{
cout<<endl;
cout<<"data = ";
cin>>data;
Enqueue(data);
break;
}
case 2:
{
cout<<endl;
Dequeue();
break;
}
case 3:
{
cout<<endl;
tampil();
break;
}
case 4:
{
cout<<endl;
clear();
break;
}
}
getch();
}
while(pil!=5);

}


Hasil Output Queue







KESIMPULAN

Queue atau Antrian merupakan kumpulan elemen dengan penyisipan dan penghapusan elemen yang dilakukan dari sisi/gerbang yang berbeda.

queue mempunyai sifat FIFO ( First In Firs Out ) yaitu elemen yang pertama masuk akan keluar pertama juga.

Queue kosong/tidak diketahui jika menggunakan array maka ada penunjuk depan dan belakang yang di gunakan untuk menunjuk elemen posisi depan dan belakang.

MACAM MACAM OPERASI UNTUK MENGECEK QUEUE :

Operasi Inisialisasi

Operasi Queue kosong


Operasi queue penuh


Operasi mengosongkan queue


Operasi penyisipan elemen queue


Operasi penghapusan elemen queue


Operasi pencetakan isi queue


Kelemahan dari delete queue adalah setiap melakukan penghapusan harus diikuti dengan pergeseran dari setiap elemen yang ada dalam queue satu posisi depan. Bisa di atasi dengan dilakukan queue melingkar ( Circular queue ) yaitu suatu queue yang di buat seakan akan merupakan sebuah lingkaran

Sabtu, 20 Juni 2020

Akhmad Fauzi R_Rangkuman dan Kesimpulan pertemuan 12

PERTEMUAN XII

STACK ( LANJUT )


TEORI DASAR 

a) Pendahuluan

Stack atau tumpukan adalah kumpulan elemen yang hanya dapat di tambah atau di hapus dari satu ujung ( gerbang ) yang sama. Hal ini menunjukan bahwa seolah olah suatu elemen di letakan di atas elemen yang lain. Yang memberi gambaran bahwa stack mempunyai sifat LIFO ( Last In Firs Out ) yang berarti bahwa yang terakhir masuk akan pertama keluar.
Representasi Stack dapat di lakukan menggunakan Array atau Linked List. Kedua representasi mempunyai keunggulan dan kelemahan masing masing. Representasi Stack dengan Array dapat di lakukan dengan asumsi bahwa elemen maksimal suatu stack tidak boleh melebihi maksimum banyak elemen atau ukuran Array.

Beberapa contoh aplikasi yang menerapkan stack, diantaranya adalah:
- Expression evaluation, baik ekspresi aritmatika, lojik maupun boolean.
- Notasi infix, prefix, dan postfix, proses perhitungannya maupun konversi antar notasi tersebut.
- Backtracking, contohnya history call pada browser (tombol back).
- Membantu penelusuran simpul pohon dengan algoritma DFS (Depth-First-Search).
- Manajemen memori dan alokasi memori, komputer modern saat ini menerapkan stack untuk memodelkan manajemen memori dari program yang sedang berjalan (running program).
- Permainan Tower of Hanoi.
- Konversi bilangan desimal ke binner.
- Sampai yang paling sederhana yaitu membalikkan urutan string.

Program STACK menggunakan Singly Linked List :

#include<stdio.h>
#include<stdlib.h>

using namespace std;

typedef int ItemType;
typedef struct simpul node;
struct simpul
{
ItemType item;
node *next;
};

struct Stack{
node *TOS;
};

node *baru;

void awal()
{
puts("===================================================");
puts("=         PROGRAM STACK DENGAN LINKED LIST        =");
puts("===================================================\n");
puts("NIM   :  181011401940");
puts("Nama   :  Akhmad Fauzi R");
puts("Fakultas  :  Teknik Informatika\n");
}

void allocate_node(ItemType x)
{
baru = (node *) malloc (sizeof(node));
if(baru==NULL)
{
printf("Alokasi Gagal\n");
exit(1);
}
else
{
baru->item=x;
baru->next=NULL;
}
}

void inisialisasi(Stack *s)
{
s->TOS = NULL;
}

int kosong(Stack *s)
{
return s->TOS==NULL;
}

void push(Stack *s)
{
baru->next = s->TOS;
s->TOS = baru;
}

ItemType pop(Stack *s)
{
node *temp;
if(kosong(s))
{
printf("Data Kosong\n");
return ' ';
}
else
{
temp = s->TOS;
s->TOS = s->TOS->next;
return temp->item;
free(temp);
temp=NULL;
}
}

void tampil(Stack *s)
{
Stack bantu;
bantu = *s;
printf("\nData Simpul ==>  ");
while(bantu.TOS!=NULL)
{
printf("%d ", bantu.TOS->item);
bantu.TOS = bantu.TOS->next;
}
printf("\n\n");
}

main()
{
int pilih, data;
char lagi='y';
Stack ujung;

inisialisasi(&ujung);
while(lagi=='y')
{
system("CLS");
awal();
//tampil(&ujung);
printf("Menu Pilihan : \n");
printf("1. Push\n");
printf("2. Pop\n");
printf("3. Tampilkan Stack\n");
printf("\nPilih No          : ");
scanf("%d", &pilih);
switch(pilih)
{
case 1:
printf("Masukkan data     : ");
scanf("%d", &data);
allocate_node(data);
push(&ujung);
break;
case 2:
pop(&ujung);
break;
case 3:
tampil(&ujung);
break;
}
fflush(stdin);
printf("Lagi (y/t) ? ");
scanf("%c", &lagi);
}
}

KESIMPULAN 

Stack atau tumpukan adalah elemen yang hanya dapat ditambangkan atau dikurangkan dari 1 buah pintu yang sama. Pada bab ini stack dilakukan menggunakan array atau single llinked list, dimana cara ini memliki kekurangan dan kelebihannya sendiri. Representasi stack dan single linked list dapat dilakukan dengan asumsi elemen stack tidak boleh lebih dari batas maksimum ukuran array.

Jumat, 12 Juni 2020

AKHMAD FAUZI R_RANGKUMAN DAN KESIMPULAN MATERI PERTEMUAN 11

PERTEMUAN XI
STACK

Stack atau tumpukan adalah kumpulan elemen yang hanya dapat di tambah atau dihapus dari satu ujung ( gerbang ) yang sama. Stack mempunyai sifat LIFO ( Last In Firs Out ) yang berarti bahwa yang terakhir masuk akan pertama keluar.
Representasi stack dapat dilakukan menggunakan Array atau Linked List, Kedua representasi mempunyai keunggulan dan kelemahan.

Kelebihan Stack :
Penambahan dan pengapusan data dapat di lakukan dengan cepat, yaitu selama memori masih tersedia penambahan data bisa terus dilakukan. dengan demikian tidak ada kekuatiran terjadinya stack overflow.

Kekurangan Stack :
Setiap sel tidak hanya menyimpan value saja, melainkan juga pointer ke sel berikutnya. Hal ini menyebabkan implementasi stack memakai linked list akan memerlukan memory yang lebih banyak dari pada di implementasikan dengan array. Setiap halaman pada Linked list hanya bisa di akses dengan cara sekuensial sehingga lambat.

DEKLARASI STACK

Bentuk deklarasi pertama :
        #define MaxS n
        TypeData        Isi[MaxS]
        TypeData        Top;

Bentuk deklarasi kedua :
        #define MaxS n
        Struct Stack
                    {
                    Type Data Isi [MaxS] ;
                    TypeData        Top ;
                    };

OPERASI PADA STACK

Ada 2 operasi dasar  :

Operasi insert ( PUSH ) Penyisipkan elemen ataupun Operasi memasukan elemen ke dalam suatu stack.

Operasi Delete ( POP ) Pengapusan elemen ataupun Operasi mengambil elemen paling puncak dari Stack.

INISIALISASI STACK 

Sebelum stack dapat di oprasikan terlebih dahulu di inisialisasikan dengan memberi harga S.Top =0

        Void    INITS ( Stack&S )
        {
                    S.Top = 0 ;
        }

MENCETAK STACK
Isi Suatu Stack dapat dicetak dengan menggunakan fungsi berikut.

                    Void CETAK ( Stack S )
                    {
                            int I;
                            cout<<endl<<"Isi Stack : ";
                            if (S.Top !=0
                            {
                            For(i=1;i<S.Top ; i++)
                            Cout<<S.Isi [i];
                            }
                            else
                            cout<<"Stack Kosong....";
                    }

CONTOH CODING STACK ( PUSH,POP )

// Adita program
#include <cstdlib>
#include <string>
#include <iostream>


using namespace std;


int top=-1;
char stack[2];//asumsi max stack 100
char x;




void push()
{
cout<<"masukkan satu karakter: ";
cin>>x;
top++;
stack[top]=x;
}


void pop()
{
if(top<0){
cout<<"stack kosong"<<endl;
return;
}


x=stack[top];
top--;
cout<<"karakter yang di 'POP' adalah "<<x<<endl;
}


void cetak()
{
if(top<0){
cout<<"stack kosong" <<endl;
return ;
}
int i=0;
for(i=top;i>=0;i--)
cout<<stack[i]<<endl;
cout<<"\n'ADITA'"<<endl;
}


int main(int argc, char *argv[])
{
char input;
cout<<"\t\t\tPROGRAM STACK ADITA\n"<<endl;
cout<<"MASUKKAN PILIHAN: "<<endl;
cout<<"\t1.PUSH"<<endl;
cout<<"\t2.POP"<<endl;
cout<<"\t3.TAMPILKAN"<<endl;
cout<<"\t4.QUIT"<<endl;
while(true)
{
cout<<"\nMasukan pilihan: ";
cin>>input;
if(input=='1'){
push();
}else if(input=='2'){
pop();
}else if(input=='3'){
cetak();
}else if(input=='4'){
break;
}else{
cout<<"Perintah ' "<<input<<" tidak dikenal"<<endl;
}
}
system("PAUSE");
return EXIT_SUCCESS;
}


KESIMPULAN


Stack atau tumpukan adalah kumpulan elemen yang hanya dapat di tambah atau dihapus dari satu ujung ( gerbang ) yang sama. Stack mempunyai sifat LIFO ( Last In Firs Out ) yang berarti bahwa yang terakhir masuk akan pertama keluar.
Representasi stack dapat dilakukan menggunakan Array atau Linked List, Kedua representasi mempunyai keunggulan dan kelemahan. Ada dua operasi dasar Stack yaitu operasi insert ( PUSH ) , operasi delete ( POP ). Sebelum stack dapat di oprasikan terlebih dahulu di inisialisasikan dengan memberi harga S.Top =0

AKHMAD FAUZI R_ RANGKUMAN DAN KESIMPULAN PERTEMUAN 13

PERTEMUAN XIII QUEUE Queue Secara harfiah queue dapat diartikan sebagai antrian. Queue atau Antrian merupakan kumpulan elemen dengan p...