Sabtu, 19 Juli 2025

Program C++ BAB XI

 CONTOH 1 : DFS

#include <iostream>

#include <conio>


class vertex

{

      public:

      char lab;

      bool condition;

      vertex *parent;


    vertex(char l)

    {

    lab=l;

    }

};



class graph

{

      public:

         vertex** addvertex;

         int **add_jacent;

         void Addvertex(char a);

         void addedge(int st, int end);

         void ALL_DFS();


    graph()

    {

        addvertex=new vertex*[20];

        add_jacent=new int*[20];

        for(int i=0;i<20;i++)

        {

            add_jacent[i]=new int[20];

            for(int j=0;j<20;j++)

            {

                add_jacent[i][j]=0;

            }

        }

        nvert=0;

    }


     private:

          void display(int v);

          int nvert;

         void DFS_search(vertex *v, int j);

};


void graph::Addvertex(char a)

{

      addvertex[nvert++]=new vertex(a);

}


void graph::addedge(int st, int end)

{

add_jacent[st][end]=1;

add_jacent[end][st]=1;

}


void graph::display(int v)

{

   cout<<addvertex[v]->lab<<" ";

}


void graph::ALL_DFS()

{

   cout<<"Pencarian jalur dengan metode DFS :"<<endl;

   for(int i=0;i<nvert;i++)

   {

       addvertex[i]->condition=false; /// kondisi

       addvertex[i]->parent=NULL; /// keadaan awal

   }


   for(int j=0;j<nvert;j++)

   {

        if(addvertex[j]->condition == false)

        {

          DFS_search(addvertex[j],j);

        }

   }

}


void graph::DFS_search(vertex *vert,int index)

{

   vert->condition=true;

   display(index);


   for(int i=0;i<nvert;i++)

   {

        if((add_jacent[index][i]==1) && (addvertex[i]->condition == false))

        {

            addvertex[i]->parent=vert;

            DFS_search(addvertex[i],i);

        }

   }

}


void main()

{

        graph *a=new graph();


        a->Addvertex('A');   ///0

        a->Addvertex('B');   ///1

        a->Addvertex('C');   ///2

        a->Addvertex('D');   ///3

        a->Addvertex('E');   ///4

        a->Addvertex('F');   ///5

        a->Addvertex('G');   ///6

        a->Addvertex('H');   ///7

        a->Addvertex('I');   ///8

        a->Addvertex('J');   ///9

        a->Addvertex('K');   ///10



        a->addedge(0, 1);  ///AB

        a->addedge(0, 2);  ///AC

        a->addedge(1, 3);  ///BD

        a->addedge(1, 4); ///BE

        a->addedge(2, 5); ///CF

        a->addedge(2, 6); ///CG

        a->addedge(3, 7); ///DH

        a->addedge(3, 8); ///DI

        a->addedge(4, 9);  ///EJ

        a->addedge(5, 10);  ///FK


     a->ALL_DFS();

     cout<<endl;

     cout<<endl;

     cout<<"Hasil Pencarian DFS, sesuai dengan Graph pada Gambar 11.3"<<endl;

  getch();

}

===================================

CONTOH 2 : DFS KOTA

#include <iostream>

#include <conio>

//#include <cstring>

#include <string>


class vertex

{

      public:

      char lab;

      string kota;

      bool condition;

      vertex *parent;


    vertex(char l, string k)

    {

    lab=l;

      kota=k;

    }

};



class graph

{

      public:

         vertex** addvertex;

         int **add_jacent;

         void Addvertex(char a, string kota);

         void addedge(int st, int end);

         void ALL_DFS();


    graph()

    {

        addvertex=new vertex*[20];

        add_jacent=new int*[20];

        for(int i=0;i<20;i++)

        {

            add_jacent[i]=new int[20];

            for(int j=0;j<20;j++)

            {

                add_jacent[i][j]=0;

            }

        }

        nvert=0;

    }


     private:

          void display(int v);

          int nvert;

         void DFS_search(vertex *v, int j);

};


void graph::Addvertex(char a, string k)

{

      addvertex[nvert++]=new vertex(a,k);

}


void graph::addedge(int st, int end)

{

add_jacent[st][end]=1;

add_jacent[end][st]=1;

}


void graph::display(int v)

{

   cout<<addvertex[v]->lab<<" "<<addvertex[v]->kota<<" -->";

}


void graph::ALL_DFS()

{

   cout<<"Pencarian jalur dengan metode DFS :"<<endl;

   for(int i=0;i<nvert;i++)

   {

       addvertex[i]->condition=false; /// kondisi

       addvertex[i]->parent=NULL; /// keadaan awal

   }


   for(int j=0;j<nvert;j++)

   {

        if(addvertex[j]->condition == false)

        {

          DFS_search(addvertex[j],j);

        }

   }

}


void graph::DFS_search(vertex *vert,int index)

{

   vert->condition=true;

   display(index);


   for(int i=0;i<nvert;i++)

   {

        if((add_jacent[index][i]==1) && (addvertex[i]->condition == false))

        {

            addvertex[i]->parent=vert;

            DFS_search(addvertex[i],i);

        }

   }

}


void main()

{

        graph *a=new graph();


        a->Addvertex('A',"Mataram");   ///0

        a->Addvertex('B',"Jalan Lingkar");   ///1

        a->Addvertex('C',"Patung Giri menang");   ///2

        a->Addvertex('D',"Perbatasan Lombar-Loteng");   ///3

        a->Addvertex('E',"BIL");   ///4

        a->Addvertex('F',"Tanah Awu");   ///5

        a->Addvertex('G',"Rembitan");   ///6

        a->Addvertex('H',"Sade");   ///7

        a->Addvertex('I',"Tanjung Aan");   ///8

        a->Addvertex('J',"Kute");   ///9



        a->addedge(0, 1);  ///AB

        a->addedge(0, 6);  ///AD

        a->addedge(1, 2);  ///BC

        a->addedge(1, 3); ///BD

        a->addedge(6, 7); ///CG

        a->addedge(2, 4); ///CF

        a->addedge(2, 3); ///CD

        a->addedge(3, 4); ///DE

        a->addedge(3, 5);  ///EF

        a->addedge(4, 5);  ///EH

        a->addedge(7, 8); ///FH

        a->addedge(7, 9); ///GH

        a->addedge(8, 9); ///GI


     a->ALL_DFS();


  getch();

}




==============================================

CONTOH 3 : DIJSKTRA

#include <iostream>

#include <conio>

#include <string>


class vertex

{

    public:

        char lab;

         vertex *parent;

         int distance;

         bool value;


    vertex(char a)

    {

    lab=a;

    }

};


class edge

{

    public:

       int vert;

         int weight;


    edge(int v,int w)

    {

    vert=v;

      weight=w;

    }

};


class PQ

{

public:

      int size;

      edge **add_edge;

      int top;


      PQ(int i, int x)

      {

      size=i;

            add_edge=new edge*[size];

      top=x;

      }


int isempty()

      {

             if(top<=0)

    return 1;

             else

    return 0;

    }



void insert(edge *item)

      {

         if(isempty()==1)

        {

                add_edge[top++]=item;

        }else

          {

               int step=0;

               int i;

               for(i=0;i<top;i++)

               {

                     if((add_edge[i]->vert) == (item->vert) )

                     {

                     step=1;

                         int ganti=item->weight;

                           if((add_edge[i]->weight) >= ganti)

                           {

                        add_edge[i]->weight=ganti;

                        break;

                           }

                    }else if((add_edge[i]->weight) >= (item->weight))

                   {

                     break;

                   }

            }


            if(step==0)

            {

                for(int j=top;j>i;j--)

               {

                add_edge[j]=add_edge[j-1];

               }

              add_edge[i]=item;

              top++;

            }

     }

  }


edge* pop()

{

      edge *temp;

    if(isempty()==1)

      {

          cout<<"kosong";

      }else

      {

            temp=add_edge[0];

            for(int i=1;i<top;i++)

           {

                add_edge[i-1]=add_edge[i];

            }

            top--;

      }

      return temp;

}

};



class graph

{

public:

     void Addvertex(char v);

      void addedge(int s,int e,int w);

      void Djikstra();


    graph()

    {

        addvertex=new vertex*[20];

        add_adjacent=new int*[20];

        for(int i=0;i<20;i++)

        {

          add_adjacent[i]=new int[20];

            for(int j=0;j<20;j++)

            {

                add_adjacent[i][j]=0;

            }

        }


        Q=new PQ(200,0);

        addjacent=0;

        nvert=0;

    }


    private:

        void displayvert(vertex *v);

        void relaxation(int st,int end,int dist);

        vertex **addvertex;

        int **add_adjacent;

       PQ *Q;

       int addjacent;

       int nvert;

};


void graph::Addvertex(char lab)

{

   addvertex[nvert++]=new vertex(lab);

}



void graph::addedge(int st, int end, int w)

{

   this->add_adjacent[st][end]=w;

   addjacent++;

}



void graph::displayvert(vertex *disp)

{

    if(disp->parent != NULL)

    {

    displayvert(disp->parent);

      cout<<disp->lab<<" ";

    }

}



void graph::relaxation(int st,int end,int dist)

{

   int destination=addvertex[end]->distance;

   int start=addvertex[st]->distance;


   if(destination > (start+dist))

   {

    addvertex[end]->distance=start+dist;

    addvertex[end]->parent=addvertex[st];

   }

}



void graph::Djikstra()

{

    for(int i=0;i<nvert;i++)

   {

      addvertex[i]->distance=99;

      addvertex[i]->parent=NULL;

      addvertex[i]->value=false;

   }


   int current=0;

   addvertex[0]->distance=0;


   edge *start=new edge(current,0);

   Q->insert(start);


   while(Q->isempty() !=1 )

   {

        addvertex[current]->value=true;

        for(int j=0;j<nvert;j++)

       {

         if(j==current)

          continue;


         if(addvertex[j]->value==true)

          continue;


         int dist=add_adjacent[current][j];


         if(dist==0)

          continue;


         relaxation(current,j,dist);

         int weight=addvertex[j]->distance;


         edge *path=new edge(j,weight);

        Q->insert(path);

        }


        edge *pop=Q->pop();

        current=pop->vert;

        int w=pop->weight;

   }


      for(int i=0;i<nvert;i++)

      {

         cout<<"Biaya untuk ke vertex "<<addvertex[i]->lab<<" :"

            <<addvertex[i]->distance<<endl;

         cout<<"Jalur :";

         displayvert(addvertex[i]);

         cout<<" "<<endl;

      }

}



void main()

{

        graph *a=new graph();

      /*

         a->Addvertex('A');      ///0

         a->Addvertex('B');      ///1

         a->Addvertex('C');      ///2

         a->Addvertex('D');      ///3

         a->Addvertex('E');      ///4

         a->Addvertex('F');      ///5

         a->Addvertex('G');      ///6

         a->Addvertex('H');      ///7

         a->Addvertex('I');      ///8

         a->Addvertex('J');      ///9



         a->addedge(0,1,2); ///AB

         a->addedge(0,2,12); ///AC

         a->addedge(0,4,6); ///AE

         a->addedge(1,3,1); ///BD

         a->addedge(1,4,3); ///BE

         a->addedge(2,8,3); ///CI

         a->addedge(3,4,1); ///DE

         a->addedge(3,5,7); ///DF

         a->addedge(3,7,5); ///DH

         a->addedge(4,2,2); ///EC

         a->addedge(4,8,6); ///EI

         a->addedge(4,6,9); ///EG

         a->addedge(6,7,5); ///GH

         a->addedge(6,9,2); ///GJ

         a->addedge(7,5,1); ///HF

         a->addedge(7,9,2); ///HJ

         a->addedge(8,6,1); ///IG

a->addedge(8,9,6); ///IJ


         */

         a->Addvertex('A');      ///1

         a->Addvertex('B');      ///2

         a->Addvertex('C');      ///3

         a->Addvertex('D');      ///4

         a->Addvertex('E');      ///5

         a->Addvertex('F');      ///6


         a->addedge(0,1,10); ///AB

         a->addedge(0,2,5); ///AC

         a->addedge(1,2,2); ///BC

         a->addedge(1,3,1); ///BD

         a->addedge(2,1,3); ///CB

         a->addedge(2,3,9); ///CD

         a->addedge(2,4,2); ///CE

         a->addedge(3,4,2); ///DE

         a->addedge(3,5,12); ///DF

         a->addedge(4,0,7); ///EA

         a->addedge(4,3,6); ///ED

         a->addedge(4,5,15); ///EF



         cout<<"Implementasi Algoritma Djikstra :"<<endl;

         cout<<endl;

         a->Djikstra();


       getch();

} 

=================================================

CONTOH 4 : KRUSKAL

#include <iostream>

#include <conio>

#include <string>


class vertex

{

    public:

    char lab;

      string kota;

vertex *parent;

      int rank;


       vertex(char l,string k)

      {

  lab=l;

         kota=k;

      }

};


class edge

{

    public:

    int start;

      int weight;

      int end;


   edge(int s,int e,int w)

   {

      start=s;

      end=e;

      weight=w;

   }

};


class PQ

{

public:

      int size;

      edge **add_edge;

      int top;


      PQ(int i, int x)

      {

  size=i;

      add_edge=new edge*[size];

  top=x;

      }


   int isempty()

   {

        if(top<=0)

    return 1;

        else

    return 0;

   }


  void insert(edge *item)

  {


       if(isempty()==1)

      {

          add_edge[top++]=item;


      }else

      {

            int i;

            for(i=0;i<top;i++)

            {

                if(add_edge[i]->weight>=item->weight)

                 break;

            }


            for(int j=top;j>i;j--)

            {

                add_edge[j]=add_edge[j-1];

            }

            add_edge[i]=item;

            top++;

       }

   }

};



class graph

{

public:

      vertex **addvertex;

      int **add_adjacent;

            int nvert,addjacent;


    void Addvertex(char v,string kota);

      void addedge(int s,int e,int w);

      void kruskal();


    graph()

    {

        addvertex=new vertex*[20];

        add_adjacent=new int*[20];

        for(int i=0;i<20;i++)

        {

             add_adjacent[i]=new int[20];

                 for(int j=0;j<20;j++)

                {

                add_adjacent[i][j]=1000000;

                }

        }

          x=new PQ(200,0);

         nvert=0;

         addjacent=0;

    }




    private:

      void makeset(vertex *v);

      void displayvert(int v);

            void displayvertex(int v);

      vertex *findset(vertex *v);

      void uni(vertex *x,vertex *y);

      void link(vertex *x,vertex *y);

            PQ *x;


};


void graph::Addvertex(char lab, string k)

{

   addvertex[nvert++]=new vertex(lab,k);

}


void graph::addedge(int st, int end, int w)

{

   this->add_adjacent[st][end]=w;

   this->add_adjacent[end][st]=w;

   addjacent++;


edge *path=new edge(st,end,w);

    x->insert(path);

}


void graph::displayvert(int v)

{

   cout<<addvertex[v]->kota;

}


void graph::displayvertex(int v)

{

   cout<<addvertex[v]->lab<<"";

}


void graph::makeset(vertex *v)

{

     v->parent=v;

     v->rank=0;

}



vertex* graph::findset(vertex *v)

{

   if(v != v->parent)

   {

       v->parent=findset(v->parent);

   }

   return v->parent;

}


void graph::link(vertex *x, vertex *y)

{

    if(x->rank > y->rank)

    {

    y->parent=x;

    }else

    {

    x->parent=y;

      if(x->rank == y->rank)

      y->rank=y->rank+1;

    }

}


void graph::uni(vertex *x, vertex *y)

{

   link(findset(x),findset(y));

}


void graph::kruskal()

{

    int total=0;

    for(int i=0;i<nvert;i++)

   {

      makeset(addvertex[i]);

   }


   for(int i=0;i<addjacent;i++)

   {

    int start=x->add_edge[i]->start;

    int end=x->add_edge[i]->end;


      vertex *a;

                     a=findset(addvertex[start]);

      vertex *b;

      b=findset(addvertex[end]);


      if(a->lab != b->lab)

      {

          uni(addvertex[start], addvertex[end]);

          displayvert(start);

          cout<<"-";

          displayvert(end);

          cout<<"(";

          displayvertex(start);

          displayvertex(end);

          cout<<")";

     //     cout<<add_adjacent[start][end]<<" ";


          total=total+this->add_adjacent[start][end];

      }


   }

   cout<<endl;

   cout<<"Nilai Total keseluruhan MST :"<<total;

}


void main()

{

      cout<<"Implementation of Graph using Kruskal Algorithm "<<endl;

graph *a=new graph();


        a->Addvertex('A',"dompu");   ///0

        a->Addvertex('B',"Mataram");   ///1

        a->Addvertex('C',"denpasar");   ///2

        a->Addvertex('D',"banyuwangi");   ///3

        a->Addvertex('E',"surabaya");   ///4

        a->Addvertex('F',"Yogyakarta");   ///5

        a->Addvertex('G',"semarang");   ///6

        a->Addvertex('H',"Jakarta");   ///7

        a->Addvertex('I',"Bandung");   ///8


        a->addedge(0, 1, 6);  ///AB

        a->addedge(0, 3, 8);  ///AD

        a->addedge(1, 2, 1);  ///BC

        a->addedge(1, 3, 10); ///BD

        a->addedge(2, 6, 20); ///CG

        a->addedge(2, 5, 15); ///CF

        a->addedge(2, 3, 21); ///CD

        a->addedge(3, 4, 14); ///DE

        a->addedge(4, 5, 3);  ///EF

        a->addedge(4, 7, 5);  ///EH

        a->addedge(5, 7, 11); ///FH

        a->addedge(6, 7, 13); ///GH

        a->addedge(6, 8, 18); ///GI

        a->addedge(7, 8, 17);  ///HI


        a->kruskal();

        getch();


}







Pemrograman C++ BAB X

 PROGRAM BST 

#include <iostream>

#include <conio>


class tree

{

   public:

         int value;

         tree *left;

         tree *right;

         tree *parent;


   tree(int v)

   {

      value=v;

      left=NULL;

      right=NULL;

   }


   tree()

   {

   }

};


tree *root;


class BST

{

public:


   BST()

   {

    root=NULL;

   }


   void cekroot();

   int isempty();

   void insert(int i);

   void searching(int i);

   void deletion(int i);

   void findmin();

   void findmax();

   void urut();

   void display(tree *val, int i);


     private:

        void insertx(int i, tree *temp);

        void uruttree(tree *n);

        void transplanted(tree *del, tree *reply);

        void minvalue(tree *n);

};


   int BST::isempty()

   {

      if(root==NULL)

      return 1;

      else

      return 0;

   }


   void BST::findmin()

   {

       tree *temp;

       temp=root;

      if(isempty()==1)

      {

      cout<<"No Data"<<endl;

      }else

      {

          while((temp->left!=NULL))

          {

           temp=temp->left;

          }

      cout<<"Nilai terkecil adalah :"<<temp->value<<endl;

      cout<<endl;

      }

   }


      void BST::findmax()

   {

      tree *temp;

      temp=root;

      if(isempty()==1)

      {

      cout<<"No Data"<<endl;

      }else

      {

        while(temp->right!=NULL)

       {

      temp=temp->right;

       }

      cout<<"Nilai terbesar adalah :"<<temp->value<<endl;

      cout<<endl;

      }

   }


   void BST::searching(int i)

   {

      tree *temp;

      temp=root;

      int n=0;


      while(temp!=NULL)

      {

          if(temp->value==i)

           {

                  n=1;

                  break;

           }


           if(i<(temp->value))

           {

                temp=temp->left;

           }else

           {

                 temp=temp->right;

           }

      }


      if(n==1)

        cout<<"data ditemukan"<<endl;

      else

                   cout<<"data tidak ditemukan"<<endl;

   }


void BST::urut()

{

  tree *temp;

        temp=root; //// penugasan variabel temp sebagai root.

         uruttree(temp); /// pemanggilan fungsi utama untuk pengurutan.


}



void BST::uruttree(tree *temp)

{

if(temp!=NULL)

       {

           uruttree(temp->left);

            cout<<"value :"<<temp->value<<endl;

     uruttree(temp->right);

       }

}


void BST::insert(int i)

   {

    tree *temp=new tree();

       temp=root;

       if(root==NULL)

       {

            root=new tree(i);

           cout<<"nilai "<<i<<" menjadi root"<<endl;

       }else

       {

        insertx(i,temp);

       }

     }


        void BST::insertx(int i,tree *temp)

   {

        tree *kiri=new tree();

        tree *kanan=new tree();


         if(i<=(temp->value))

         {

                kiri=temp;

                if(kiri->left!=NULL)

                {

               insertx(i,kiri->left);

                }else

                {

               kiri->left=new tree(i);

                 cout<<"nilai "<<i<<" masuk ke sebelah kiri "<<(kiri->value)<<endl;

                  kiri->left->left=NULL;

                  kiri->left->right=NULL;

                }

         }else

         {

              kanan=temp;

              if(kanan->right!=NULL)

              {

              insertx(i,kanan->right);

              }else

              {

              kanan->right=new tree(i);

                cout<<"nilai "<<i<<" masuk ke sebelah kanan "<<(kanan->value)<<endl;

                 kanan->right->left=NULL;

                 kanan->right->right=NULL;

            }

         }

   }


      void BST::transplanted(tree *del, tree *reply)

   {

    if(del->parent==NULL)

       {

            root=reply;

       }else if(del==del->parent->left)

       {

            del->parent->left=reply;

       }else

       {

    del->parent->right=reply;

       }


       if(reply!=NULL)

       {

            reply->parent=del->parent;

       }

   }


   void BST::minvalue(tree *temp)

   {

        while(temp->left!=NULL)

        {

           temp=temp->left;

        }

        //temp;

   }



   void BST::deletion(int i)

   {

  tree *y=NULL;

       tree *x;

       x=root;


         while((x!=NULL)&&(x->value!=i))

         {

             y=x;

             if(i<x->value)

             {

              x=x->left;

             }else

             {

              x=x->right;

             }

         }


         if(x==NULL)

         {

            cout<<"Nilai yang akan dihapus tidak ditemukan "<<endl;

         }else

         {

             x->parent=y;

            if(x->left==NULL)

            {

                 transplanted(x,x->right); /// case 2

            }else if(x->right==NULL)

            {

         transplanted(x,x->left); /// case 3

            }else

            {

            tree *min=x->right;

                min->parent=x;

       

tree *coba;

while(min->left!=NULL)

        {

              coba=min;

           min=min->left;

          }


                 tree *temp=min;

                    temp->parent=coba;


               if(x->right!=min)

               {

                  transplanted(min,min->right); /// case 4.b

                  temp->right=x->right;

                  temp->right->parent=temp;

                }

            transplanted(x,temp); /// case 4.a

                  temp->left=x->left;

                  temp->left->parent=temp;

            }


       }

   }


void BST::display(tree *disp,int i)

   {

    int k;

if(disp !=NULL)

      {

      display(disp->right,i+1);

         cout<<endl;


         if(disp==root)

          cout<<"root->: ";

         else

         {

          for(k=0;k<i;k++)

            cout<<"     ";

         }


         cout<<disp->value;

         display(disp->left, i+1);

      }

   }




void main()

{

    BST *st;

    st=new BST();

    int n;

    char pilih;

    cout<<"Operasi BST "<<endl;

    cout<<"1. Input data"<<endl;

cout<<"2. cari data"<<endl;

cout<<"3. nilai terkecil"<<endl;

  cout<<"4. nilai terbesar"<<endl;

   cout<<"5. Urut Tree"<<endl;

cout<<"6. Hapus Node"<<endl;

   cout<<"7. Display"<<endl;

cout<<"8. Exit"<<endl;


    do{

           cout<<"Pilihan :";

             cin>>pilih;


             switch(pilih){

      case '1':

          cout<<"Masukkan angka :";

                  cin>>n;

                  st->insert(n);

          break;

          case '2':

          cout<<"Masukkan angka :";

                  cin>>n;

                  st->searching(n);

          break;

        case '3':

               st->findmin();

          break;

        case '4':

                  st->findmax();

          break;

         case '5':

               st->urut();

               break;

case '6':

          cout<<"Masukkan angka :";

                  cin>>n;

               st->deletion(n);

          break;

case '7':

          cout<<"Display BST :"<<endl;

               st->display(root,1);

               cout<<endl;

            break;

default:

          cout<<"salah pilih atau keluar";

                break;

          }

      } while(pilih!='8');

  getch();

}



Pemrograman C++ BAB IX

 CONTOH 1 : DOUBLE LINKED LIST

#include <iostream>

#include <conio>


class node

{

      public:

      int value;

      node *next;

      node *prev;             


   node(int val,node *n,node *p)

   {

      value=val;

      next=n;

      prev=p;

   }


   node(int v)

   {

      value=v;

   }


   node()

   {

   }

};


class double_list

{

  public:

      void inserthead(int value);

      void inserttail(int val);

      void insertbefore(int value,int pos);

      void removehead();

      void removetail();

      void removepost(int pos);

      void print();


      double_list()

      {

         head=NULL;

         tail=NULL;

      }

      private:

         node *head;

         node *tail;

         node *current;

         int isempty();

};

static int list=0;


int double_list::isempty()

{

    if(head==NULL || tail==NULL)

        return 1;

    else

        return 0;

}


void double_list::inserthead(int val)

{

   if(isempty()==1)

   {

      current=new node(val);

      head=current;

      tail=current;

      tail->next=NULL;

      head->prev=NULL;

   }else

   {

      current=new node();

      current->next=this->head;

      this->head->prev=current;

      current->value=val;

      this->head=current;

   }

   list++;

}


void double_list::inserttail(int val)

{

   if(isempty()==1)

   {

      current=new node(val);

      head=current;

      tail=current;

      tail->next=NULL;

   }else

   {

      current=new node();

      current->prev=this->tail;

      this->tail->next=current;

      current->value=val;

      this->tail=current;

      current->next=NULL;

   }

   list++;

}


void double_list::removehead()

{

   if(isempty()==1)

        cout<<"Maaf, linked list kosong"<<endl;

   else

   {

     if(list==1)

     {

        cout<<"nilai "<<head->value<<" Telah dihapus"<<endl;

        tail=NULL;

        head=NULL;

     }else

     {

       int temp=head->value;

       current=head->next;

       head=current->prev;

       current->prev->next=current;

       head=current;

       cout<<"nilai "<<temp<<" Telah dihapus"<<endl;

     }

     list--;

   }

}


void double_list::removetail()

{

   if(isempty()==1)

         cout<<"Maaf, linked list kosong"<<endl;

   else

   {

     if(list==1)

     {

         cout<<"nilai "<<tail->value<<" Telah dihapus"<<endl;

         tail=NULL;

         head=NULL;

         list--;

     }else

     {

      int temp=tail->value;

      current=tail;

      current=current->prev;

      tail->prev->next=NULL;

      tail=current;

      cout<<"nilai "<<temp<<" Telah dihapus"<<endl;

      list--;

       }

   }

}


void double_list::insertbefore(int value, int pos)

{

   if(isempty()==1)

      cout<<"Maaf, linked list kosong"<<endl;

   else

   {

     if(pos>list)

       cout<<"jumlah list terlalu sedikit"<<endl;

     else

     {

      if(pos==1)

      {

         inserthead(value);

      }else if(pos==list)

      {

         inserttail(value);

      }else

      {

         current=head;

         node *fixed;

          for(int i=1;i<pos;i++)

         {

      current=current->next;

        }

         fixed=new node((value),current,current->prev);

         current->prev->next=fixed;

         current->prev=fixed;

         current=fixed;

         list++;

      }

      }

    }

}


void double_list::removepost(int pos)

{

   if(isempty()==1)

        cout<<"Maaf, linked list kosong"<<endl;

   else

   {

      if(pos>list)

         cout<<"Maaf, Range terlalu sedikit"<<endl;

      else

      {

         if(pos==1)

              removehead();

         else if(pos==list)

          removetail();

         else

         {

          current=head;

              for(int i=1;i<pos;i++)

              {

                current=current->next;

              }

            int nilai=current->value;

            current->prev->next=current->next;

            current->next->prev=current->prev;

            cout<<"Nilai "<<nilai<<" Dihapus dari linked list"<<endl;

             list--;

          }

      }

   }

}


void double_list::print()

{

   current=head;

   while(current!=NULL)

   {

       cout<<"Isi list :"<<current->value<<endl;

       current=current->next;

   }

}




void main()

{

int n,pos;

   double_list *st;

   st=new double_list();


   char pilih;

   cout<<"Operasi linkedlist "<<endl;

   cout<<"1. insertHead"<<endl;

   cout<<"2. insertTail"<<endl;

   cout<<"3. removeHead"<<endl;

   cout<<"4. removeTail"<<endl;

   cout<<"5. insert before"<<endl;

   cout<<"6. Remove position"<<endl;

   cout<<"7. Exit"<<endl;


   do{

       cout<<endl;

       cout<<"Pilihan :";

       cin>>pilih;


      switch(pilih)

      {

           case '1':

                 cout<<"masukkan data :";

         cin>>n;

                   st->inserthead(n);

                   st->print();

             break;


       case '2':

                  cout<<"masukkan data :";

                  cin>>n;

                  st->inserttail(n);

                  st->print();

          break;


          case '3':

                  st->removehead();

                  st->print();

              break;


         case '4':

                  st->removetail();

                  st->print();

              break;



         case '5':

                  cout<<"masukkan data :";

                  cin>>n;

                  cout<<"masukkan posisi :";

                  cin>>pos;

                  st->insertbefore(n,pos);

                  st->print();

              break;


         case '6':

                 int pos;

                 cout<<"Masukkan posisi angka yang ingin dihapus :";

                 cin>>pos;

                 st->removepost(pos);

                 st->print();

                 break;


         case '7':

             cout<<"terima kasih :";

                 break;

          default:

                cout<<"salah pilih";

                break;


      }

   } while(pilih!='7');

   getch();

}

=============================================
CONTOH 2 : LINKED LIST
#include <iostream>
#include <conio>
#include <cstring>


class node
{
public:
      int value;
      node *next;

   node(int va, node *n)
   {
     value=va;
      next=n;
   }

   node()
   {
   }
};

class dlist
{
     public:
         void insert(int value);
         void remove();
         void insertbefore(int value, int pos);
         void print();
         int isempty();

      dlist()
      {
      head=NULL;
      }

      private:
        node *head;
};
static int list=0;


int dlist::isempty()
{
   if(this->head==NULL)
    return 1;
   else
    return 0;
}

void dlist::insert(int val)
{
node *newnode;
   newnode=new node();

   if(isempty()==1)
   {
    this->head=newnode;
      newnode->value=val;
      newnode->next=NULL;
   }else
   {
    newnode->next=this->head;
      newnode->value=val;
      this->head=newnode;
   }
   list++;
}


void dlist::remove()
{
if(isempty()==1)
    cout<<"Maaf, linked list kosong"<<endl;
   else
    this->head=this->head->next;
   list--;
}

void dlist::insertbefore(int value, int pos)
{
   if(isempty()==1)
    cout<<"Maaf, linked list kosong"<<endl;
   else
   {
     if((pos>=list) || pos==1)
       cout<<"jumlah list terlalu sedikit atau list yang salah"<<endl;
     else
     {
        node *newnode=head;
           node *fixed;
        for(int i=1;i<pos-1;i++)
          {
      newnode=newnode->next;
    }
           fixed=new node((value),newnode->next);
           newnode->next=fixed;
           list++;
     }
   }
}

void dlist::print()
{
node *newnode=head;

   while(newnode!=NULL)
   {
    cout<<"Isi list :"<<newnode->value<<endl;
      newnode=newnode->next;
   }
}

void main()
{
int n;
   dlist *st;
   st=new dlist();

   char pilih;
   cout<<"Operasi linkedlist "<<endl;
   cout<<"1. insert"<<endl;
   cout<<"2. remove"<<endl;
   cout<<"3. insert before"<<endl;
   cout<<"4. Exit"<<endl;

   do{
    cout<<endl;
    cout<<"Pilihan :";
      cin>>pilih;

      switch(pilih)
      {
         case '1':
                cout<<"masukkan data :";
                  cin>>n;
                  st->insert(n);
                  st->print();
                break;
         case '2':
            char n;
            cout<<"Anda yakin untuk menghapus ? y/n ";
                  cin>>n;
                  if(n=='y')
                  {
                     st->remove();
                     st->print();
                  }else
                  {
                      cout<<"Thanks";
                  }
                  break;
         case '3':
         int pos;
                  cout<<"masukkan data :";
                  cin>>n;
                  cin.get();
                  cout<<"masukkan posisi:";
                  cin>>pos;
                  st->insertbefore(n,pos);
                  st->print();
              break;
         case '4':
          cout<<"terima kasih :";
                  break;
         default:

          cout<<"salah pilih";
                  break;
      }
   } while(pilih!='4');
 getch();
}
======================================================
CONTOH 3 : LINKED LIST WITH TAIL
#include <iostream>
#include <conio>

class node
{
    public:
      int value;
      node *next;

   node(int  va, node *n)
   {
    value=va;
      next=n;
   }

   node(int  a)
   {
    value=a;
   }
};


class dlistx
{
      public:
      void inserthead(int val);
      void removehead();
      void insertlast(int val);
      void removelast();
      void print();
      int isempty();

      dlistx()
      {
         head=NULL;
         tail=NULL;
      }

      private:
         node *head;
         node *tail;
};

static int list=0;

int dlistx::isempty()
{
if(this->head==NULL || this->tail==NULL)
    return 1;
   else
    return 0;
}

void dlistx::inserthead(int value)
{
   if(isempty()==1)
   {
      node *temp;
      temp=new node(value);
      this->head=temp;
      this->tail=temp;
      this->tail->next=NULL;
      cout<<"Nilai "<<value<<" masuk ke head"<<endl;
      cout<<endl;
   }else
   {
      node *temp;
      temp=new node(value,this->head);
      this->head=temp;
      cout<<"Nilai "<<value<<" masuk ke head"<<endl;
      cout<<endl;
   }
   list++;
}


void dlistx::insertlast(int value)
{
   if(isempty()==1)
   {
      node *temp;
      temp=new node(value);
      this->head=temp;
      this->tail=temp;
      this->tail->next=NULL;
      cout<<"Nilai "<<value<<" masuk ke tail"<<endl;
      cout<<endl;
   }else
   {
      this->tail->next=new node(value);
      this->tail=this->tail->next;
      this->tail->next=NULL;
      cout<<"Nilai "<<value<<" masuk ke tail"<<endl;
      cout<<endl;
    }
list++;
}


void dlistx::removehead()
{
   if(isempty()==1)
        cout<<"Maaf, linked list kosong"<<endl;
   else
        this->head=this->head->next;
   list--;
}


void dlistx::removelast()
{
   if(isempty()==1)
   {
        cout<<"Maaf, linked list kosong"<<endl;
   }else
   {
        int x=tail->value;
        if(list==1)
        {
          cout<<"nilai "<<x<<" Telah dihapus"<<endl;
          tail=NULL;
          head=NULL;
           list--;
        }else
        {
          node *temp;
          temp=this->head;
          for(int i=1;i<list-1;i++)
          {
             temp=temp->next;
          }
      temp->next=temp->next->next;
    this->tail=temp;
          cout<<"nilai "<<x<<" Telah dihapus"<<endl;
          list--;
       }
    }
}


void dlistx::print()
{
   node *newnode=head;
   while(newnode!=NULL)
   {
      cout<<"Isi list :"<<newnode->value<<endl;
      newnode=newnode->next;
   }
}


void main()
{
   int n;
   dlistx *st;
   st=new dlistx();

   char pilih;
   cout<<"Operasi linkedlist "<<endl;
   cout<<"1. insert"<<endl;
   cout<<"2. remove"<<endl;
   cout<<"3. insert last"<<endl;
   cout<<"4. remove last"<<endl;
   cout<<"5. Exit"<<endl;

   do{
    cout<<endl;
    cout<<"Pilihan :";
        cin>>pilih;

            switch(pilih)
            {
               case '1':
                  cout<<"masukkan data :";
                  cin>>n;
                  st->inserthead(n);
                  st->print();
          break;

                  case '2':
          char n;
          cout<<"Anda yakin untuk menghapus ? y/n ";
                  cin>>n;
                  if(n=='y')
                  {
                      st->removehead();
                      st->print();
                    }else
                    {
                     cout<<"Thanks";
                    }
                  break;

                  case '3':
          int pos;
                  cout<<"masukkan data :";
                  cin>>pos;
                  st->insertlast(pos);
                  st->print();
          break;

          case '4':
          char k;
          cout<<"Anda yakin untuk menghapus ? y/n ";
                  cin>>k;
                  if(k=='y')
                  {
                      st->removelast();
                        st->print();
                     }else
                     {
                      cout<<"Thanks";
                     }
                       break;

           case '5':
          cout<<"terima kasih :";
                    break;
                 default:
          cout<<"salah pilih";
                break;
              }
    } while(pilih!='5');

   getch();
}
====================================================

Pemrograman C++ BAB VIII

 CONTOH 1 : ANTRIAN

#include <iostream>

#include <conio>



class queue

{

    public:

       int *antrian;

       int ukuran;

       int top;

       void insert(int i);

       void pop();

       void find(int i);

       void display();


    queue(int i) //// constructor

    {

       ukuran=i;

       antrian=new int[ukuran];

       top=0;

    }


    private:

    int isempty();

    int fully();

};


int queue::isempty()

{

   if(top<=0)

     return 1;

   else

     return 0;

}


int queue::fully()

{

   if(top>=ukuran)

     return 1;

   else

     return 0;

}


void queue::insert(int i)

{

  if(fully()==1)

  {

    cout<<"maaf antrian penuh"<<endl;

  }else

  {

    cout<<"nilai "<<i<<" masuk antrian"<<endl;

    antrian[top++]=i;

  }

}


void queue::pop()

{

   if(isempty()==1)

   {

     cout<<"maaf, antrian kosong"<<endl;

   }else

   {

     int pop=antrian[0];

     int i=1;

     cout<<"nilai "<<pop<<" keluar antrian"<<endl;

     while(i<top)

     {

       antrian[i-1]=antrian[i];

       i++;

     }

     top--;

   }

}


void queue::find(int i)

{

   int temp=0;

   int hasil=0;

   while(temp<top)

   {

      if(i==antrian[temp])

      {

         hasil=1;

         break;

      }

      temp++;

   }


   if(hasil==1)

   {

     cout<<"Nilai "<<i<<" ditemukan diantrian ke "<<(temp+1)<<endl;

   }else

   {

     cout<<"antrian tidak ditemukan"<<endl;

   }

}


void queue::display()

{

   cout<<"Isi antrian :"<<endl;

   int i=0;

   while(i<top)

   {

      cout<<"antrian ke :["<<(i+1)<<"] :"<<antrian[i]<<endl;

      i++;

   }

}


void main()

{

    int ukuran;

    char pilih;

    cout<<"Program queue/antrian"<<endl;

    cout<<endl;

    cout<<"Masukkan jumlah antrian :";

    cin>>ukuran;

    cout<<"Pilih program"<<endl;

    cout<<"1. Insert"<<endl;

    cout<<"2. pop"<<endl;

    cout<<"3. find"<<endl;

    cout<<"4. Display"<<endl;

    cout<<"5. Exit"<<endl;


    queue *q;

    q=new queue(ukuran);


    do

    {

        cout<<"Pilihan :";

        cin>>pilih;


        switch(pilih)

        {

            case '1':

                int c;

                cout<<"Masukkan angka :";

                cin>>c;

                q->insert(c);

                break;

            case '2':

              q->pop();

              break;

            case '3':

                int k;

                cout<<"Masukkan angka yang dicari :";

                cin>>k;

                q->find(k);

                break;

            case '4':

                q->display();

                break;

            default:

         cout<<"Angka yang anda masukkan salah atau anda telah keluar "<<endl;

        }

    }while(pilih!='5');

    delete q->antrian;

    getch();

}



=======================================

CONTOH 2 : ANTRIAN PRIORITAS

#include<iostream>

#include<conio>


class PQ

{

   public:

      int *priority;

      int ukuran;

      int top;

      void insert(int i);

      void pop();

      void display();


      PQ(int i)

      {

         ukuran=i;

         priority=new int[ukuran];

         top=0;

      }


      private:

       int isempty();

       int fully();

};


int PQ::isempty()

{

   if(top<=0)

      return 1;

   else

      return 0;

}


int PQ::fully()

{

   if(top>=ukuran)

       return 1;

   else

       return 0;

}


void PQ::pop()

{

   if(isempty()==1)

   {

     cout<<"maaf, antrian kosong"<<endl;

   }else

   {

     int pop=priority[0];

     int i=1;

     cout<<"nilai "<<pop<<" keluar antrian"<<endl;

     while(i<top)

     {

       priority[i-1]=priority[i];

       i++;

     }

     top--;

   }

}


void PQ::display()

{

   cout<<"Isi antrian :"<<endl;

   int i=0;

   while(i<top)

   {

      cout<<"antrian ke :["<<(i+1)<<"] :"<<priority[i]<<endl;

      i++;

   }

}



void PQ::insert(int k)

{

   if(fully()==1)

   {

      cout<<"maaf antrian berprioritas penuh"<<endl;

   }else

   {

    if(isempty()==1)

    {

       cout<<"nilai "<<k<<" masuk antrian"<<endl;

       priority[top++]=k;

    }else

    {

     int i;

     for(i=0;i<top;i++)

     {

            if(k<priority[i])

             {

               break;

             }

      }


      for(int j=top;j>i;j--)

      {

            priority[j]=priority[j-1];

      }

      priority[i]=k;

      top++;

     cout<<"nilai "<<k<<" masuk antrian"<<endl;

     }

   }

}



void main()

{

    int ukuran;

    char pilih;

    cout<<"Program priorty queue/antrian berprioritas"<<endl;

    cout<<endl;

    cout<<"Masukkan jumlah antrian :";

    cin>>ukuran;

    cout<<"Pilih program"<<endl;

    cout<<"1. Insert"<<endl;

    cout<<"2. pop"<<endl;

    cout<<"3. Display"<<endl;

    cout<<"4. Exit"<<endl;


    PQ *pq;

    pq=new PQ(ukuran);


    do

    {

        cout<<endl;

        cout<<"Pilihan :";

        cin>>pilih;


        switch(pilih)

        {


            case '1':

                int c;

                cout<<"Masukkan angka :";

                cin>>c;

                pq->insert(c);

                break;

            case '2':

                pq->pop();

                break;

            case '3':

                pq->display();

                break;

            default:

               cout<<"Angka yang anda masukkan salah atau anda telah keluar "<<endl;

        }

    }while(pilih!='4');

     delete pq->priority;

    getch();

}

============================

Pemrograman C++ BAB VII

 CONTOH 1 : SORTING SEARCHING

#include <iostream>

#include <conio>



class bubble

{

       public:

       int* process(int *arr, int ukuran)

       {


while(ukuran>0)

             {

         for(int i=1;i<ukuran;i++)

                 {

              if(arr[i-1]>arr[i])

                    {

                        int temp=arr[i-1];

              arr[i-1]=arr[i];

                          arr[i]=temp;

 }

             }

        ukuran--;

         }

       return arr;

     }

};


class insertion

{

public:

  int* process(int *arr, int ukuran)

  {

   int max,j;

   int i=1;


     while(i<ukuran)

     {

    max=arr[i];

           for(j=i;j>0;j--)

           {

      if(max<arr[j-1])

                arr[j]=arr[j-1];

             else

            break;

            }

         arr[j]=max;

         i++;

   }

     return arr;

  }

};



class radix

    {

 public:

 int cekbit(int arr, int pos)

 {

    for(int i=1;i<pos;i++)

    {

  arr=arr/2;

    }


    return arr%2;

 }


 int* process(int *arr, int ukuran)

 {

int bit;

cout<<"masukkan jumlah bit yang diinginkan ";

       cin>>bit;

  int s;

       int *kembar;

       kembar=new int[ukuran];

       for(int i=1;i<bit;i++)

       {

         s=0;

           for(int k=0;k<=1;k++)

           {

               for(int j=0;j<ukuran;j++)

               {

          int x=cekbit(arr[j],i);

                    if(x==k)

                    {

                kembar[s]=arr[j];

                        s++;

                    }

               }

            }

               tukar(arr,kembar,ukuran);

               }

          return arr;

       }


       int* tukar(int *arr,int *kembar,int ukuran)

      {

         for(int i=0;i<ukuran;i++)

        {

    arr[i]=kembar[i];

     }

  return arr;

   }

};


class counting

{

   public:

   int* process(int *arr,int ukuran)

      {

      int i,j,k,min,max;

             int indeks=0;


         min=max=arr[0];

        for(i=1;i<ukuran;i++)

        {

          if(arr[i]<min)

          {

          min=arr[i];

          }


         if(arr[i]>max)

          {

            max=arr[i];

          }

        }


         k=max-min+1;

         /// membuat bucket

               int *B=new int[k];


         ///normalisasi nilai bucket

         for(i=0;i<k;i++)

          B[i]=0;


         for(i=0;i<ukuran;i++)

             B[arr[i]-min]++;


         for(i=min;i<=max;i++)

         {

          for(j=0;j<B[i-min];j++)

            arr[indeks++]=i;

         }

         return arr;

      }

};


class sequencsearch

{

   int found;

   public:

      int sequence(int *arr,int find,int ukuran)

      {

         int hasil=0;

         for(int i=0;i<ukuran;i++)

         {

          if(find==arr[i])

            {

               hasil=1;

               found=i;

               break;

            }

         }


         return hasil;

      }


      int getfound()

      {

      return found;

      }

};


class binarysearch

{

     int found;

     public:

     int binary(int *arr,int find,int ukuran)

     {

        int high=ukuran-1;

         int low=0;

         int hasil=0;

         while(low<=high)

         {

             int mid=(high+low)/2;


            if(find==arr[mid])

            {

                found=mid;

                hasil=1;

                break;

            }else if(find>arr[mid])

            low=mid+1;

            else

            high=mid-1;

         }

         return hasil;

     }


   int getfound()

   {

    return found;

   }

};




class utama

{

   public:

     void insert();

     void baca();

     void pengurutan();

     void pencarian(int cari);


   utama(int n)

   {

    ukuran=n;

    arr=new int[ukuran];

   }


   private:

      int *arr;

      int ukuran;

      bubble a;

      insertion b;

      radix c;

      counting d;

      sequencsearch e;

      binarysearch f;


};


void utama::insert()

{

  for(int i=0;i<ukuran;i++)

   {

    cout<<"Nilai ke "<<(i+1)<<":";

      cin>>arr[i];

   }

}


void utama::baca()

{

cout<<"baca isi array :"<<endl;

   for(int i=0;i<ukuran;i++)

   {

    cout<<"Isi Array ke "<<(i+1)<<": "<<arr[i]<<endl;

   }

   cout<<endl;

}


void utama::pengurutan()

{

   char n;

   cout<<"Silahkan Pilih Teknik Pengurutan yang diinginkan"<<endl;

   cout<<"1. Bubble sort"<<endl;

   cout<<"2. Insertion sort"<<endl;

   cout<<"3. radix sort"<<endl;

   cout<<"4. counting sort"<<endl;

   cout<<"Masukkan teknik pengurutan yang diinginkan :";

   cin>>n;


   switch(n)

   {

      case '1':

          arr=a.process(arr,ukuran);

          break;

      case '2':

          arr=b.process(arr,ukuran);

          break;

      case '3':

         arr=c.process(arr,ukuran);

         break;

      case '4':

         arr=d.process(arr,ukuran);

         break;

      default:

         cout<<"Pilihan anda salah"<<endl;

   }


}


void utama::pencarian(int cari)

{

    int n,hasil,found;

    cout<<"Masukkan algoritma pencarian yang anda inginkan :"<<endl;

    cout<<"1.Sequencial Search"<<endl;

    cout<<"2.Binary Search"<<endl;

    cout<<"Pencarian :";

    cin>>n;


    if(n==1)

    {

      hasil=e.sequence(arr,cari,ukuran);

  found=e.getfound();

    }else if(n==2)

    {

        hasil=f.binary(arr,cari,ukuran);

         found=f.getfound();

    }else

    {

    cout<<"angka yang anda masukkan salah "<<endl;

    }


    if(hasil==1)

    {

    cout<<"nilai "<<cari<<" ditemukan pada index ke "<<(found+1)<<endl;

    }else

    {

    cout<<"Angka tidak ditemukan"<<endl;

    }


    delete arr;


}


void main()

{

      int ukuran,nilai;

      cout<<"Program Pencarian dan Pengurutan :"<<endl;

      cout<<endl;

      cout<<"Masukkan jumlah array yang diinputkan :";

      cin>>ukuran;


      utama a(ukuran);    /// inisialisasi obyek a dari class utama

               a.insert();

           a.baca();

                   a.pengurutan();

                   a.baca();



      cout<<"apakah anda ingin melakukan pencarian "<<endl;

      cout<<"Jika iya masukkan angka, jika tidak tekan -88 :"<<endl;

      cin>>nilai;


      if(nilai!=-88)

      {

               a.pencarian(nilai);

      }else

      {

      cout<<"Thanks and bye-bye"<<endl;

      }

      getch();

}