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;
};
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;
{
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;
}
}
}
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;
}
{
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;
}
}
{
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;
{
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;
}
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;
}
}
{
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;
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;
}
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............