Anda di halaman 1dari 12

Laporan Praktikum 7

Algoritma Dan Struktur Data


Double Linked List (1)

Dibuat Oleh :
Nama : Muhammad Akhmal Akbar Nurrizky
NRP : 3121521026
Kelas : D3 IT A PSDKU Lamongan
D. PERCOBAAN

1. Implementasikan operasi dasar Double linked list : Menyisipkan sebagai simpul ujung(awal) dari
linked list.
2. Implementasikan operasi dasar Double linked list : Membaca atau menampilkan
3. Implementasikan operasi dasar Double linked list : Mencari sebuah simpul tertentu. Tambahkan
kondisi jika yang dicari adalah data yang paling depan.
4. Implementasikan operasi dasar Double linked list : Menghapus simpul tertentu. Tambahkan
kondisi jika yang dihapus adalah data yang paling depan atau data yang paling terakhir.
5. Gabungkan semua operasi di atas dalam sebuah Menu Pilihan.
Source code :
#include <stdio.h>
#include <stdlib.h>
struct node
{
struct node *prev;
struct node *next;
int data;
};
struct node *head;
void penyisipan_awal();
void penyisipan_akhir();
void deletion_beginning();
void deletion_last();
void deletion_specified();
void display();
void search();
int main ()
{
int choice ;
while(choice != 9)
{
printf("\n***Main Menu*");
printf("\n===========================================\n");
printf("\n1.Menyisipkan diawal\n");
printf("2.Menyisipkan diakhir\n");
printf("3.Hapus awalan\n");
printf("4.Hapus akhiran\n");
printf("5.Hapus simpul setelah data yang diinputkan\n");
printf("6.Cari data\n");
printf("7.Tampilkan data\n");
printf("8.Exit\n") ;
printf("\n input pilihan ?");
scanf("%d", &choice) ;

switch(choice)
{
case 1:
penyisipan_awal();
break;
case 2:
penyisipan_akhir();
break;
case 3:
deletion_beginning();
break;
case 4:
deletion_last();
break;
case 5:
deletion_specified () ;
break;
case 6:
search();
break;
case 7:
display();
break;
case 8:
exit(0);
break;
default:
printf("Masukkan pilihan dengan benar : ");
}
}
}

void penyisipan_awal()
{
struct node *ptr;
int item;
ptr = (struct node *)malloc(sizeof(struct node));
printf("Input Data :");
scanf("%d",&item);
if(ptr->data== item)
{
printf("\n OVERFLOW");
}
else
{

if(head==NULL)
{
ptr->next = NULL;
ptr->data = item;
ptr->prev = NULL;
head=ptr;
}
else
{
ptr->data=item;
ptr->next=head;
ptr->prev=NULL;
head->prev=ptr;
head=ptr;
}
}
printf("Node telah di inputkan\n");
}

void penyisipan_akhir()
{
struct node *ptr, *temp;
int item;
ptr = (struct node *)malloc(sizeof(struct node));
if(ptr == NULL)
{
printf("\n OVERFLOW");
}
else
{
printf("\n Masukkan nilai data :");
scanf(" %d", &item);
ptr->data=item;
if(head == NULL)
{
ptr->next = NULL;
ptr->prev = NULL;
head = ptr;
}
else
{
temp = head;
while(temp->next!=NULL)
{
temp = temp->next;
}
temp->next = ptr;
ptr ->prev = temp;
ptr ->next = NULL;
}
}
printf("\n node sudah di inputkan\n");
}
void deletion_beginning()
{
struct node *ptr;
if(head == NULL)
{
printf("\n UNDERFLOW");
}
else if(head->next == NULL)
{
head = NULL;
free(head);
printf("\n node berhasil di hapus\n");
}
else
{
ptr = head;
head = head -> next;
head -> prev = NULL;
free(ptr);
printf("\n node berhasil di hapus \n");
}
}

void deletion_last ()
{
struct node *ptr;
if (head == NULL)
{
printf("\n UNDERFLOW");
}
else if (head->next == NULL)
{
head = NULL;
free (head);
printf("\n node berhasil di hapus\n");
}
else
{
ptr = head;
if (ptr->next != NULL)
{
ptr = ptr -> next;
}
ptr -> prev -> next = NULL;
free (ptr);
printf("\nnode berhasil di hapus\n");
}
}

void deletion_specified ()
{
struct node *ptr, *temp;
int val;
printf("\n Masukkan data yang akan di hapus : ");
scanf("%d", &val);
ptr = head;
while (ptr -> data != val)
ptr = ptr -> next;
if (ptr -> next == NULL)
{
printf("\n tidak dapat di hapus\n");
}
else if (ptr -> next -> next == NULL)
{
ptr ->next = NULL;
}
else
{
temp = ptr -> next;
ptr -> next = temp -> next;
temp -> next -> prev = ptr;
free(temp);
printf("\n node deleted\n");
}
}

void display()
{
struct node *ptr;
printf("\n tampilkan list : \n");
ptr = head;
while (ptr != NULL)
{
printf("%d-", ptr -> data);
ptr = ptr -> next;
}
}

void search ()
{
struct node *ptr;
int item, i=0, flag;
ptr = head;
if (ptr == NULL)
{
printf("\n List kosong\n");
}
else
{
printf("\n inputkan data yang akan dicari : \n");
scanf(" %d", &item);
while (ptr != NULL)
{
if (ptr->data == item)
{
printf("\n data yang dicari ada di dalam node %d ", i+1);
flag=0;
break;
}
else
{
flag=1;
}
i++;
ptr = ptr -> next;
}
if (flag==1)
{
printf("\nitem tidak ditemukan\n");
}
}
}
Tampilan hasil :

Anda mungkin juga menyukai