Multi link list


Multilist.h

#define Nil NULL
#define next(P) (P)->next
#define first(L) ((L).first)
#define last(L) ((L).last)

typedef int address;

typedef struct tpegawai *adrpeg;
typedef struct tanak *adranak;
typedef struct tanak{
        char nama[30];
        int tgllhr;
        int blnlhr;
        int thnlhr;
        adranak next;
}anak;
typedef struct tpegawai{
        char nama[30];
        char nip[30] ;
        float gaji;
        char jabatan[30];
        adrpeg next;
        adranak first;
}pegawai;
typedef struct {
        adrpeg first, last;
        }listpeg;
       
typedef struct {
        adranak first,last;
        }listanak;
       

int LIstpegEmpty (listpeg L);
/*mengecek apakah list pegawai kosong
mengitimkan nilai true bila lis pegawai kosong*/

void createlist (listpeg *P);
/*membuat list umum
I.S belum terdapat list
F.S terdefinisi sebuah list*/
void createpeg(adrpeg P, char nip[30], char nama[30], char jabatan[20], float gaji);
/*I.S belum terdapat list pegawai
F.S list baru terbentuk*/
//address alokasi(infotype X);

void createanak(adranak P,char nama[20], int tgl, int bln, int thn);
/*I.S belum terdapat list anak
F.S list baru terbentuk*/

void insertFirstpeg(listpeg *L, adrpeg P);
/*I.S list pegawai telah terdefinisi dan mungkin kosong
F.S P telah tersisipkan sebagai element pertama pada list pegawai*/

void insertFirstanak(adrpeg L, adranak P);
/*I.S list anak telah terdefinisi dan mungkin kosong
F.S P telah tersisipkan sebagai element pertama pada list anak*/

void insertAfterpeg(adrpeg P, adrpeg PREC);
/*I.S list pegawai telah terdefinisi dan mungkin kosong, PREC merupakan element sebelumnya
F.S P telah tersisipkan sebagai elemen beru pada list pegawai, yang diletakkan setelah PREC*/

void insertAfteranak(adranak P, adranak PREC);
/*I.S list anak telah terdefinisi dan mungkin kosong, PREC merupakan element sebelumnya
F.S P telah tersisipkan sebagai elemen beru pada list anak, yang diletakkan setelah PREC*/

void insertLastpeg(listpeg *L, adrpeg P);
/*I.S list pegawai telah terdefinisi, list mungkin kosong
F.S P telah tersisipkan sebagai elemen terakhir pada list pegawai*/

void insertLastanak(listanak *L, adranak P);
/*I.S list anak telah terdefinisi, list mungkin kosong
F.S P telah tersisipkan sebagai elemen terakhir pada list anak*/

void deleteFirstpeg (listpeg *L,adrpeg *P);
/*menghapus elemen pertama pada list pegawai*/
/*I.S list pegawai telah terdenifisi
F.S elemen pertama pada list pegawai terhapus, list dapat menjadi kosong atau tidak*/

void deleteFirstanak (listpeg *L,adranak *P);
/*menghapus elemen pertama pada list anak*/
/*I.S list anak telah terdenifisi
F.S elemen pertama pada list anak terhapus, list dapat menjadi kosong atau tidak*/

void deletelastpeg (listpeg *L);
/*menghapus elemen terakhir pada list pegawai*/
/*I.S list pegawai telah terdefinisi, list mungkin kosong
F.S P elemen terakhir pada list pegawai sudah terhapus*/

void deletelastanak (adrpeg Q);
/*menghapus elemen terakhir pada list anak*/
/*I.S list anak telah terdefinisi, list mungkin kosong
F.S P elemen terakhir pada list anak sudah terhapus*/

void deleteafterpeg (listpeg *L,adrpeg *P,adrpeg Prec );
/*menghapus elemen setelah elemen PREC
I.S list pegawai telah terdefinisi, list mungkin kosong
F.S elemen setelah elemen P telah terhapus*/

void deleteafteranak (listanak *L,adranak *P,adranak Prec );
/*menghapus elemen setelah elemen PREC
I.S list anak telah terdefinisi, list mungkin kosong
F.S elemen setelah elemen P telah terhapus*/

void listpeglengkap(listpeg *p);
/*menampilkan seluruh elemen pada list pegawai
I.S list pegawai telah terdefinisi
F.S mengoutputkan semua elemen pada list pegawai*/

void ortuanak(listpeg *L);
/*I.S list pegawai terdefinisi
F.S mencari nama anak dari nama orang tua*/
 
void addanak(listpeg *p, char nip [30],char nama[20], int tgl, int bln, int thn);
/*I.S list pegawai terdefinisi
F.S telah ditambahkan anak pada pegawai*/
void listpegnonKB(listpeg *p);
/*menampilkan status pegawai KB atau Non KB
I.S list pegawai terdefinisi
F.S status KB atau tidaknya tertampilkan*/
int umuranak (int tgl, int bln,int thn);
/*menghitung umur anak
I.S tanggal, bulan, tahun lahir anak terdefinisi
F.S mengetahui umur anak*/
void listtunjangananak(listpeg *P);
/*mencari anak yang termasuk tunjangan
I.S list pegawai terdefinisi
F.S menampilkan anak yang termasuk tunjangan*/
 Multilist.cpp

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include “multilist.h”
#include <string.h>

int listpegEmpty(listpeg P) {
 return (first(P)==Nil);
}

void createlist (listpeg *P){
     P->first = Nil;
     }

void createpeg(adrpeg P, char nip[30],char nama[30] , char jabatan[30],float gaji ){
//    adrpeg P;
//    P = (adrpeg)malloc(sizeof(pegawai));
    strcpy((*P).nip , nip);
    strcpy((*P).nama , nama);
    (*P).gaji = gaji;
    strcpy((*P).jabatan,jabatan) ;
    (*P).next = Nil;
    (*P).first = Nil;
}

void createanak (adranak P, char nama[30], int tgl,int bln,int thn){
    
     //P = (adranak)malloc(sizeof(anak));
     if (P != Nil){
     strcpy((*P).nama , nama);
     (*P).tgllhr =tgl;
     (*P).blnlhr =bln;
     (*P).thnlhr=thn;
     (*P).next = Nil;}
     //return (P);
     }
      
void insertFirstpeg(listpeg *L, adrpeg P){
     P->next= L->first;
     L->first=P;
     }

void insertFirstanak(adrpeg L, adranak P){
     next(P)= (*L).first;
     (*L).first=P;
     }

void insertAfterpeg(adrpeg P, adrpeg PREC){
     next(P)=next(PREC);
  next(PREC)=P;
}
void insertAfteranak(adranak P, adranak PREC){
     next(P)=next (PREC);
     next(PREC)=P;
     }
    

void insertLastpeg(listpeg *L, adrpeg P){
     adrpeg last;
  if (first (*L) == Nil){
              insertFirstpeg (L,P);
              }else{
                    last = first (*L);
                    while ((*last).next != Nil){
                          last = (*last).next;}
                    insertAfterpeg(P,last);
                    }
     (*last).next = Nil;
}
void insertLastanak(listanak *L, adranak P){
     adranak last;
     adrpeg p;
  if (first (*L) == Nil){
              insertFirstanak (p,P);
              }else{
                    last = first (*L);
                    while ((*last).next != Nil){
                          last = (*last).next;}
                    insertAfteranak(P,last);
                    }
     (*last).next = Nil;
}

void dealokasipeg (adrpeg P){
     free(P);
     }
    
void dealokasianak (adranak P){
     free(P);
     }
    
void deleteFirstpeg (listpeg *L,adrpeg *P){
     (*P) = first(*L);
     first(*L) = next (first (*L));
     next (*P) = Nil;
     dealokasipeg (*P);
     }
void deleteFirstanak (listanak *L,adranak *P){
     (*P) = first(*L);
     first(*L) = next (first (*L));
     next (*P) = Nil;
     dealokasianak (*P);
     }
    
void deleteafterpeg (listpeg *L,adrpeg *P,adrpeg Prec ) {
 
     (*P)=next(Prec);
     next (Prec) = next (next(Prec));
     next (*P)=Nil;
     dealokasipeg (*P);
     }
    
void deleteafteranak (listanak *L,adranak *P,adranak Prec ) {
 
     (*P)=next(Prec);
     next (Prec) = next (next(Prec));
     next (*P)=Nil;
     dealokasianak (*P);
     }
    
void deletelastpeg (listpeg *L){
     adrpeg preclast,last,p;
     last = L->first;
      preclast = Nil;
      while (last->next!= Nil)
      {
            preclast=last;
            last=last->next;
           
            p=last;
            if(preclast==Nil)
            {
             first(*L)=Nil;
            }        
            else
            {
             next (preclast) =Nil;
            }
      }

}

void deletelastanak (adrpeg Q){
     adranak preclast,last,p;
     last = Q->first;
      preclast = Nil;
      while (last->next!= Nil)
      {
            preclast=last;
            last=last->next;
           
            p=last;
            if(preclast==Nil)
            {
             first(*Q)=Nil;
            }        
            else
            {
             next (preclast) =Nil;
            }
      }

}
void listpeglengkap (listpeg *P){
     adrpeg ptrpeg;
     adranak ptranak;
     ptrpeg = first(*P);

     if (ptrpeg == Nil) {
                printf (“List pegawai kosong\n”);
    } else {
           if ((*ptrpeg).next != Nil) {   
           do{
                      printf (“NIP\t\t: %s\n”,(*ptrpeg).nip);
                      printf (“Nama Pegawai\t: %s\n”,(*ptrpeg).nama);
                      printf (“Jabatan\t\t: %s\n”,(*ptrpeg).jabatan);
                      printf (“Gaji\t\t: %0.f\n”,(*ptrpeg).gaji);
                     
                     
                              if (ptranak == Nil){
                                          printf (“Pegawai tersebut tidak mempunyai anak.\n\n”);
                                          }else{
                                                ptranak = (*ptrpeg).first;
                                                do{
                                                printf(“Nama anak\t: %s\n”,(*ptranak).nama);
                                                ptranak = (*ptranak).next;}
                                                while (ptranak != Nil);}
                      ptrpeg = (*ptrpeg).next;}
                      while ((*ptrpeg).next != Nil);}}
}

void ortuanak(listpeg *L){
   adrpeg ptrpeg;
   adranak ptranak;
   char nama[20];
  
   gets(nama);
   ptrpeg = first(*L);

   while (ptrpeg != Nil){
          ptranak = (*ptrpeg).first;
          printf(“\nOrtu = %s  \n”,(*ptrpeg).nama);
          if(ptranak==Nil)
          {
          printf (“\tTidak punya anak\n”);
          }else{
                do{
                //if (strcmp((*ptranak).nama , nama)==1){
                printf(“\tAnak = %s \n”,(*ptranak).nama);
                ptranak = (*ptranak).next;
                }//}
                while (ptranak != Nil);}                
    ptrpeg = (*ptrpeg).next;
    }
}           
int umur (adranak *P){
    adrpeg ptrpeg;
    adranak ptranak;
    ptranak = (*ptrpeg).first;
    //printf (“Tahun kelahiran\t: “);
    //scanf(“%d”,&thn);
    int u;
    u = (2010-(*ptranak).thnlhr);
    return u;
}

                            
void listtunjangananak(listpeg *p){
     adrpeg ptrpeg;
     adranak ptranak;
     int umuranak;
     ptrpeg = first(*p);
     if (ptrpeg == Nil){
                printf (“List kosong, tidak ada pegawai”);
                }else{
                      do{
                              printf(“Nama Pegawai\t: “,(*ptrpeg).nama);
                              ptranak = (*ptrpeg).first;
                              if (ptranak == Nil){
                                          printf (“Pegawai tersebut tidak mempunyai anak.\n”);
                                          }else{
                                                do{
                                                           umuranak = umur (&ptranak);
                                                           if (umuranak < 18){
                                                                        printf (“Nama anak\t: “,(*ptranak).nama);
                                                                        }
                                                           ptranak = (*ptranak).next;
                                                           }
                                                           while (ptranak != Nil);
                                                           }
                              ptrpeg = (*ptrpeg).next;}
                              while (ptrpeg != Nil);}
}
                             
void addanak(listpeg *p,char nip [30], char nama[20], int tgl, int bln, int thn){
     bool found;
     adrpeg ptrpeg;
     adranak ptranak;
     found = false;
     ptrpeg = first(*p);
     printf (“\nMasukkan NIP pegawai\t :”);
     scanf (“%c [20]”,&nip);
    
     while ((ptrpeg != Nil) and (strcmp ((*ptrpeg).nip, nip)==0)){
                                   ptrpeg = (*ptrpeg).next;}
                                   if (strcmp ((*ptrpeg).nip, nip)==1) {
  //                                               alokasianak (ptranak);
                                                 if (ptranak == Nil){
                                                             strcpy((*ptranak).nama , nama);
                                                             (*ptranak).tgllhr = tgl;
                                                             (*ptranak).blnlhr = bln;
                                                             (*ptranak).thnlhr = thn;
                                                             if ((*ptrpeg).first == Nil){
                                                                                 (*ptrpeg).first = ptranak;
                                                                                 }//end if
                                                                                 else{ (*ptranak).next = (*ptrpeg).first;
                                                                                       (*ptrpeg).first = ptranak;}//end else
                                                                                       }//end if
                                                                                       else{
                                                                                             printf (“Maaf, alokasi gagal\n”);}//end else
                                                                                             }//end if
                                                                                             else{
                                                                                                   printf (“Pegawai tidak ada dalam list\n”);
                                                                                                   }//end else
                                                                                                   }//end while

void listpegnonKB(listpeg *L){
     int jumlah;
     jumlah = 0;
     adrpeg ptrpeg;
     adranak ptranak;

    
     if ((*L).first == Nil){
                printf(“List kosong, tidak ada pegawai”);
                }else{
                      ptrpeg = first (*L);
                      ptranak = (*ptrpeg).first;
                      do {                 
                          while (ptranak != Nil){
                                   jumlah = jumlah+1;
                                   ptranak = (*ptranak).next;
                                   }
                                   if (jumlah > 3){
                                              printf (“Nama pegawai\t:%s\n”,(*ptrpeg).nama);
                                              printf (“Pegawai tersebut mempunyai anak lebih dari 3, Non KB\n”);
                                             }else{
                                              printf (“Pegawai tersebut menggunakan KB\n”);}}
                      while ((*ptrpeg).next == Nil);}
                      }

                                             
                                  
    

    Main_multilist.cpp

#include <conio.h>
#include <stdio.h>
#include <dos.h>
#include “multilist.h”

int main() {
  
   listpeg L;
   createlist(&L);

   pegawai P,Q,R;
   anak A,B,C,E;
  
   adranak K;
   listanak D;
   printf (“List mula-mula\t:\t”);  
   listpeglengkap (&L);
   printf (“=====================================\n”);
   printf (“Setelah Pegawai didata, berikut list pegawai :\n”);
   printf (“==========================================\n”);
   createpeg (&P,”1120900043″,”Andi”,”Manager”,10000000);
   insertFirstpeg (&L,&P);
   createpeg (&Q,”1133090093″,”Sinta”,”Sekretaris”,5000000);
  
   insertFirstpeg (&L,&Q);
   insertLastpeg(&L, &P);     
   createanak (&A, “Trisna\t”,7,4,1991);
   //deleteFirstanak (&D,&K);
  
   createanak (&B,”Dita\t”,18,05,1990);
   createanak (&C,”Cinta\t”,17,05,1998);
   createanak (&E,”Ryan\t”,11,10,1996);
  
   insertFirstanak(&Q,&B);
   insertAfteranak(&C,&B);
   //insertLastanak(&D,&E);

   //listtunjangananak(&L);
   createpeg (&R,”1133090033″,”Prabu”,”Operator”,3000000);
   insertFirstanak(&R,&E);
   insertAfterpeg(&R, &Q);
   insertLastpeg(&L, &P);
 
   listpeglengkap (&L);
  
  
   listpegnonKB(&L);  
    ortuanak(&L);
//    listtunjangananak(&L);
    addanak(&L,”1133090033″,”Anggi”, 3,11,1992);
   
 getch();
 return 0;  
}

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: