Rabu, 16 Desember 2015

#1 Single Linked List menggunakan bahasa C++

Linked List ada beberapa macam, antara lain:
1. Single Linked List
2. Double Linked List
3. Multi Linked List


Langsung saja ke contohnya yaa:
1. Single Linked List
    Bikin .h-nya ini (ADT):
     #define first(L) L.first
     #define next(P) P->next
     #define info(P) P->info

     typedef int infotype;
     typedef struct elemenList *address;
     struct elemenList
    {
              infotype info;
              address next;
     };

     struct List
    {
             address first;
     };

  • Insert First
          void insertFirst(List &L, address P)
          {
           if (first(L) == NULL)
          {
                   // Cek terlebih dahulu, apakah list kosong atau tidak,
                  // jika kosong, maka taruh element list yang baru ke awal list
                  first(L) = P;
                  next(P)=NULL;
          }
          else
          {
                 // Jika list tidak kosong, maka selipkan element list yang baru
                 // ke awal list
                 next(P) = first(L);
                 first(L) = P;
         }
         }
  • Insert After
          void insertAfter (List &L, address P,address Prec)
          {
                    address Q=first(L);
                    while (info(Q)!=info(Prec))
                    {
                              Q=next(Q);
                    }
                               next(P)=NULL;
                               next(P)=next(Q);
                               next(Q)=P;
                   }
          }
  • Insert Last
          void insertLast(list &L,address P)
          {
                  address Q;
                  Q=first(L);
                  if(Q==NULL)
                  {
                           first(L)=P;
                           next(P)=NULL;
                  }
                  else
                 {
                            while(next(Q)!=NULL)
                            {
                                       Q=next(Q);
                            }
                            next(P)=NULL;
                            next(Q)=P;
                 }
          }
  • Delete First
          void deleteFirst(List &L, address &P)
          {
                   if (first(L) == NULL)
                   {
                               // Jika list kosong, maka keluar dari prosedur
                               cout<<"Data Kosong"<<endl;
                    }
                    else if (next(first(L)) == NULL){
                               P = first(L);
                               first(L) = NULL;
                               cout<<"ID yang dihapus "<<info(P)<<endl;
                               delete P;
                    }
                    else
                    {
                              P = first(L);
                              first(L) = next(P);
                              next(P) = NULL;
                              cout<<"ID yang dihapus "<<info(P)<<endl;
                              delete P;
                     }
         }
  • Delete After
          void deleteAfter(List &L, address &P, address Prec)
          {
                    address Q=first(L);
                    while(info(Q)=info(Prec))
                   {
                             Q=next(Q);
                     }
                     if(next(Q)==NULL)
                              cout<<"Tidak ada data setelah id "<<info(Prec)<<endl;
                     else
                     {
                              P=next(Q);
                              next(Q)=next(P);
                              next(P)=NULL;
                              cout<<"Data yang dihapus ber-id "<<info(P)<<endl;
                              delete P;
                     }
           }
  • Delete Last 
          void deleteLast(List &L, address &P)
          {
                   address Q=first(L);
                   if (first(L) == NULL)
                   {
                              // Jika list kosong, maka keluar dari prosedur
                              cout<<"Data Kosong"<<endl;
                   }
                   else if(next(Q)==NULL)
                   {
                              P=Q;
                              first(L)=NULL;
                              cout<<"ID yang dihapus "<<info(P)<<endl;
                              delete P;
                   }
                   else{
                              while(next(next(Q))!=NULL)
                              {
                                         Q=next(Q);
                              }
                              P=next(Q);
                              next(Q)=NULL;
                              cout<<"ID yang dihapus "<<info(P)<<endl;
                              delete P;
                   }
         }


Nah itu untuk single linked list, next post bakal bahas double............