#include <stdio.h>
#include <string.h>
#include <stdbool.h>
#include <stdlib.h>
#include <conio.h>
typedef int typeint;
typedef struct tNode *address;
typedef struct tNode
{
typeint value;
address Next;
}Node;
typedef struct{
address First;
}List;
void CreateEmpty(List *L)
{
(*L).First=NULL;
}
bool isEmpty(List L)
{
if(L.First==NULL)
return true;
else
return false;
}
address alokasi(typeint x){
address P=(Node*)malloc(sizeof(Node));
if(P!=NULL){
P->value=x;
P->Next=NULL;
}
return P;
}
void dealokasi(address P){
free(P);
}
void InsertFirst(List *L, address P)
{
P->Next=(*L).First;
(*L).First=P;
}
void
InsertValueFirst(List
*L, typeint x)
{
address
P=alokasi(x);
InsertFirst(L,P);
printf("Berhasil memasukkan data!");
}
void DelFirst(List *L)
{
if(!isEmpty(*L)){
address P=(*L).First;
(*L).First=(*L).First->Next;
free(P);
printf("Del First Berhasil!");
}else{
printf("List Empty!");
}
}
void ShowList(List L){
address P;
P=L.First;
if(!isEmpty(L)){
do{
printf("%d ", P->value);
P=P->Next;
}while(P!=NULL);
}else{
printf("List Empty!");
}
}
void InsertLast(List *L,
typeint x)
{
address P;
address
Ptr=alokasi(x);
P=(*L).First;
if(!isEmpty(*L)){
while(P->Next!=NULL){
P=P->Next;
}
P->Next=Ptr;
printf("Berhasil memasukkan data!");
}else{
InsertFirst(L,
Ptr);
printf("Berhasil memasukkan data!");
}
}
void DelLast(List *L){
 address P,Last;
 P=(*L).First;
 if(!isEmpty(*L)){
  if(P->Next==NULL){
   DelFirst(L);
  }else{
   while(P->Next->Next !=NULL){
    P=P->Next;
   }
   Last=P->Next;
   P->Next=NULL;
   free(Last);
   printf("Dl Last berhasil ea!");
   }
 }else{
  printf("Last Empty!");
 }
}
void InsertAfter(List *L, typeint a, typeint after){
 address P;
 address Ptr=alokasi(a);
 bool found=false;
 P=(*L).First;
 if(!isEmpty(*L)){
  while(P!=NULL){
   if(P->value==after){
   found=true;
   break;  
   }
   P=P->Next;
  }
  if(found){
  Ptr->Next=P->Next;
  P->Next=Ptr;
  printf("Berhasil memasukan data ea");
  }else{
  printf("Data %d tidak di temukan ea", after);
  }
 }else{
  InsertFirst(L, Ptr);
  printf("Berhasil memasukan data ea");
 }
}
void DelAfter(List *L, typeint after){
 address P,Q;
 bool found=false;
 P=(*L).First;
 if(!isEmpty(*L)){
  while(P!=NULL){
   if(P->value==after){
    found=true;
    break;
   }
   P=P->Next;
  }
  if(found){
   Q=P->Next;
   if(Q!=NULL){
    P->Next=Q->Next;
    Q->Next=NULL;
    free(Q);
    printf("Del After Berhasil ea");
   }else{
    printf("tidak ada data setelah %d",after);
   }
  }else{
   printf("Data %d tidak di temukan",after);
  }
 }else{
  printf("List empty");
 }
}
int main(){
 List L;
 typeint a, after;
 CreateEmpty(&L);
 do{
  system("cls");
  puts("Menu");
  puts("1. insert first");
  puts("2. Delete First");
  puts("3. Insert Last");
  puts("4. Delete Last");
  puts("5. Insert After");
  puts("6. Delete After");
  puts("7. Show List");
  puts("Exc");
  puts("Pilihan : ");
  switch(getch()){
   case '1' : printf("Input Number of Integer : ");scanf("%d",&a);
   InsertValueFirst(&L,a);
   break;
   case '2' : DelFirst(&L);
   break;
   case '3' : printf("Input Number of Integer : ");scanf("%d",&a);
   InsertLast(&L,a);
   break;
   case '4' : DelLast(&L);
   break;
   case '5' : if(!isEmpty(L)){
    printf("input Number of Integer : ");scanf("%d",&a);
    printf("Insert setelah angka : ");scanf("%d",&after);
    InsertAfter(&L,a,after);
   }break;
   case '6' : if(!isEmpty(L)){
    printf("Delete setelah angka : ");scanf("%d",&after);
    DelAfter(&L,after);
   }else{
    printf("data kosong");
   }break;
   case '7' : ShowList(L);
   break;
  }
  }
  while(getch()!=27);
  getch();
  return 0;
}
Next
« Prev Post
« Prev Post
Previous
Next Post »
Next Post »



0 Komentar untuk "Linked List"