List Linier atau Linked List Dengan Bahasa C
Array & Linked List masing-masing digunakan untuk menyimpan data secara berurutan (lihat materi)
#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;
}
0 Komentar untuk "List Linier atau Linked List Dengan Bahasa C"