C++ Queue program daftar menu

berikut adalah program C++ dalam membuat sebuah program daftar menu yang mengimplementasikan ADT Queue/antrian.
langsung aja gann.....


#include <iostream>                                                                              
#include <conio.h> //untuk membaca perintah "getch()"                                                                         
#include <windows.h> //untuk membaca perintah "system"

using namespace std;
#define MaxEl 5

typedef int address;
typedef int infotype;

typedef struct
{
 infotype T[MaxEl];
 address Head;
 address Tail;
}Queue;

void CreateEmpety(Queue &Q);
int IsEmpety(Queue Q);
int IsFull(Queue Q);
int IsOneElmt(Queue Q);
void Add(Queue &Q, infotype val);
void Del(Queue &Q, infotype &val);
void PrintQueue(Queue Q);
int NQueue(Queue Q);
int IdxQueue(Queue Q, infotype val);
void Geser(Queue &Q, int indeks);

int main()
{
 int Pilih,Nilai,indeks;
 Queue Queue1;
 CreateEmpety(Queue1);
    menu:
 system("cls");
 cout<<"............MENU............"<<"\n\n";
 cout<<"1. TAMBAH ANTRIAN"<<endl;
 cout<<"2. TAMPILKAN ANTRIAN"<<endl;
 cout<<"3. HAPUS ANTRIAN"<<endl;
 cout<<"4. JUMLAH ANTRIAN YANG ADA"<<endl;;
 cout<<"5. CARI NOMER ANTRIAN"<<endl;
 cout<<"6. GESER NOMER ANTRIAN"<<endl;
 cout<<"7. EXIT "<<endl;
 cout<<"............................"<<"\n\n";
 cout<<"Masukan Pilihan Anda :";
 cin>>Pilih;

 switch(Pilih)
 {
  case 1:
   cout<<" Masukan Nilai Kedalam Antrian : ";
   cin>>Nilai;
   Add(Queue1, Nilai);
            getch();
   goto menu;
        case 2:
   PrintQueue(Queue1);
   getch();
   goto menu;
        case 3:
   Del(Queue1, Nilai);
            cout<<" Antrian saat ini : ";
            PrintQueue(Queue1);
   getch();
   goto menu;
        case 4:
   NQueue(Queue1);
            cout<<endl;
            cout<<" Antrian yang ada :"<<endl;
            PrintQueue(Queue1);
   getch();
   goto menu;
        case 5:
   cout<<" Masukan Nomer Antrian Yang Ingin Dicari :";
   cin>>Nilai;
   cout<<" Antrian saat ini :";
            PrintQueue(Queue1);
            IdxQueue(Queue1, Nilai);
   getch();
   goto menu;
        case 6:
   Geser(Queue1, indeks);
            cout<<" Antrian saat ini :";
            PrintQueue(Queue1);
   getch();
   goto menu;
            default:
   cout<<" Tidak Ada Pilihan Tersebut, Silahkan Masukan Pilihan Yang Benar";
   getch();
   goto menu;
        case 7:
            exit(0);
 }
 getch();
}

void CreateEmpety(Queue &Q)
{
 Q.Head=Q.Tail=-1;
}

int IsEmpety(Queue Q)
{
 return(Q.Head==-1 && Q.Tail==-1);
}

int IsFull(Queue Q)
{
 return(Q.Head<Q.Tail && Q.Tail-Q.Head==MaxEl-1 ||
  Q.Head>Q.Tail && Q.Head-Q.Tail==1);
}

int IsOneElmt(Queue Q)
{
 return(Q.Head==Q.Tail && Q.Head!=-1);
}

void Add(Queue &Q, infotype val)
{
 if (!IsFull(Q))
  if (IsEmpety(Q))
  {
   Q.Head=Q.Tail=0;
   Q.T[Q.Head]=val;
  }
  else
  {
   if (Q.Tail==MaxEl-1)
    Q.Tail=0;
   else
    Q.Tail++;
   Q.T[Q.Tail]=val;
   cout<<" SAVINGS !!!"<<endl;
  }
}

void Del(Queue &Q, infotype &val)
{
 if (!IsEmpety(Q))
 {
  val = Q.T[Q.Head];
  if (IsOneElmt(Q))
   CreateEmpety(Q);
  else
   if (Q.Head==MaxEl-1)
    Q.Head=0;
   else
    Q.Head++;
 }
 else
  cout<<" !!!ANTRIAN TIDAK DITEMUKAN!!!\n";
}

void PrintQueue(Queue Q)
{
    address i;
 if (Q.Head<=Q.Tail)
 {
  for (int i =Q.Head; i < Q.Tail+1; i++)
  {
   cout<<Q.T[i]<<" ";
  }
 }
 else
 {
  for (int i = Q.Head; i < MaxEl-1; i++)
  {
   cout<<Q.T[i]<<" ";
  }
  for (int i = 0; i < Q.Tail; i++)
  {
   cout<<Q.T[i]<<" ";
  }
 }
 cout<< endl;
}

int NQueue(Queue Q)
{
    int hasil;
    if(Q.Head>=Q.Tail)
        {
        hasil=Q.Head-Q.Tail+1;
    }
    else if(Q.Head<Q.Tail)
    {
        hasil=Q.Tail+1-Q.Head;
    }
    else
    {
        hasil=0;
    }
    cout<<" Jumlah antrian : "<<hasil;
    return hasil;
}

int IdxQueue(Queue Q, infotype val)
{
    if(Q.Head<Q.Tail)
    {
        for(int i=Q.Head; i<=Q.Tail; i++)
        {
            if(val==Q.T[i])
            {
                cout<<" nomer antrian ada di dalam index ke- "<<i<< endl;
            }
            else{
                cout<<" nomer antrian tidak ada di index ke- "<<i<< endl;
            }
        }
    }

   getch();
}

void Geser(Queue &Q, int indeks)
{
    int temp;
    int a=Q.Head;
    int b=Q.Tail;
    if(Q.Head<Q.Tail)
    {
        for(int i=a; i<b; i++)
        {
            temp=Q.T[Q.Head];
            Del(Q,indeks);
            Add(Q, temp);
        }
    }
    else
    {
        for(int i=b; i<a; i++)
        {
            temp=Q.T[Q.Tail];
            Del(Q,indeks);
            Add(Q, temp);
        }
    }
}


 

jika sudah, langsung compile dan nikmati hasilnya.
terimakasih untuk kunjungannya.

1 comment:

  1. Thank you for nice information. Please visit our web:

    Click Here
    "https://uhamka.ac.id"

    ReplyDelete

Powered by Blogger.