You are on page 1of 16

LAPORAN PRAKTIKUM ALGORITMA

DAN STRUKTUR DATA


“Linked List”

Disusun Oleh :
Nama : M. Iqbal Nahdliansyah

NRP : 2210171031
Kelas : 2 D4 TKB

PROGRAM STUDI D4 TEKNIK KOMPUTER


POLITEKNIK ELEKTRONIKA NEGERI SURABAYA
2018
 MENAMBAHKAN 5 NODE SECARA MANUAL DAN
MENAMPILKANNYA PADA LINKED LIST

Source Code dan Analisa

#include <stdio.h>
#include <stdlib.h>

struct Node{
int data; //vairabel data digunakan untuk mengisi nilai
struct Node *next; //pointer Next digunakan untuk menghubungkan Node
};

int main(){

//Membuat ruang kosong bernama first


struct Node *first = malloc (sizeof(struct Node));

first -> data = 1; //Mengisi variabel data dengan nilai 1


first -> next = NULL; //Menunjukkan tidak ada Node setelah node First

//Membuat ruang kosong bernama second


struct Node *second = malloc (sizeof(struct Node));

second -> data = 2; //Mengisi variabel data dengan nilai 2


second -> next = NULL; //Menunjukkan tidak ada Node setelah node second
first -> next = second; //Menghubungkan node first dengan node second

//Membuat ruang kosong bernama ketiga


struct Node *ketiga = malloc (sizeof(struct Node));

ketiga -> data = 3; //Mengisi variable data dengan nilai 3


ketiga -> next = NULL; //Menunjukkan tidak ada Node setelah node ketiga
second -> next = ketiga; //Menghubungkan node second dengan node ketiga

//Membuat ruang kosong bernama keempat


struct Node *keempat = malloc (sizeof(struct Node));

keempat -> data = 4; //Mengisi variable data dengan nilai 4


keempat -> next = NULL; //Menunjukkan tdk ada Node setelah node keempat
ketiga -> next = keempat; //Menghubungkan node ketiga dgn node keempat

//Membuat ruang kosong bernama kelima


struct Node *kelima = malloc (sizeof(struct Node));

kelima -> data = 5; //Mengisi variable data dengan nilai 5


kelima -> next = NULL; //Menunjukkan tdk ada Node setelah node kelima
keempat -> next = kelima; //Menghubungkan node keempat dgn node kelima

struct Node *head = NULL; //Membuat variabel head


head = first; //Menyimpan variabel head pada Node first
//inisialisasi cursor dan penempatan di head
struct Node *cursor = NULL; //Membuat variabel cursor
cursor = head; //Menyimpan variable cursor pada variabel head

printf("%d\n",cursor -> data);


/*Mencetak nilai dari variabel first, karena cursor = head dan
head = first, jadi cursor -> data = first -> data yang sebelumnya
dideklarasikan first -> data = 1 */

cursor = cursor -> next; // Menggeser cursor dari first ke second

printf("%d\n",cursor -> data);


/*Mencetak nilai dari variabel second, karena cursor = cursor -> next
dan cursor -> next = first -> next yang sebelumnya dideklarasikan
first -> next = second, sehingga bisa disimpulkan cursor = second
jadi cursor -> data = second -> data dan second -> data = 2 */

cursor = cursor -> next; //Menggeser cursor dari second ke ketiga

printf("%d\n",cursor -> data);


/*Mencetak nilai dari variabel ketiga, karena cursor = cursor -> next
dan cursor -> next = second -> next yang sebelumnya dideklarasikan
second -> next = ketiga, sehingga bisa disimpulkan cursor = ketiga
jadi cursor -> data = ketiga -> data dan ketiga -> data = 3 */

cursor = cursor -> next; //Menggeser cursor dari ketiga ke keempat

printf("%d\n",cursor -> data);


/*Mencetak nilai dari variabel keempat, karena cursor = cursor -> next
dan cursor -> next = ketiga -> next yang sebelumnya dideklarasikan
ketiga -> next = keempat, sehingga bisa disimpulkan cursor = keempat
jadi cursor -> data = keempat -> data dan keempat -> data = 4 */

cursor = cursor -> next; //Menggeser cursor dari keempat ke kelima

printf("%d\n",cursor -> data);


/*Mencetak nilai dari variabel kelima, karena cursor = cursor -> next
dan cursor -> next = keempat -> next yang sebelumnya dideklarasikan
keempat -> next = kelima, sehingga bisa disimpulkan cursor = kelima
jadi cursor -> data = kelima -> data dan kelima -> data = 5 */

Output
 MENAMBAHKAN 5 NODE SECARA DINAMIS MENGGUNAKAN
WHILE LOOP DAN MENAMPILKANNYA PADA LINKED LIST

Source Code

#include <stdio.h>
#include <stdlib.h>

struct Node{
int data;
struct Node *next;
};
int main(){
struct Node *head = NULL;
struct Node *cursor = NULL;

int i;
i=0;
while (i<5){
struct Node *caraloop = malloc (sizeof(struct Node));
caraloop -> data = i;
caraloop -> next = NULL;
if (i==0){
head = caraloop;
}else{
cursor -> next = caraloop;
}
cursor = caraloop;
printf("%d",cursor -> data);
i++;

Output

Analisa
Pada percobaan ini, dilakukan pembuatan pembuatan node secara otomatis
menggunakan while loop, dimana node pertama ketika i==0. simpan node
pertama tersebut ke dalam head dan cursor. Untuk node-node berikutnya
sambungkan pointer menggunakan variabel cursor.

 MENYISIPKAN NODE PADA LINKED LIST


 Sisipkan angka 5 setelah angka 2
 sisipkan angka 8 setelah angka 5

Source Code

#include <stdio.h>
#include <stdlib.h>

struct Node{
int data;
struct Node *next;
};

int main(){
struct Node *head = NULL;
struct Node *cursor = NULL;

int i;
for ( i=0;i<=5;i++){
struct Node *node = malloc (sizeof(struct Node));
node -> data = i;
node -> next = NULL;
if(i==0){
head = node;
}
else {
//mengarahkan pointer untuk ke node selanjutnya
cursor -> next = node;
}
//cursor baru pindah saat pendeklarasian di bawah
cursor = node;
//printf("%d",cursor -> data);

}
cursor = head;
while (cursor !=NULL){
if (cursor -> data == 2){
struct Node *menyisipkan_angka = malloc (sizeof(struct Node));
menyisipkan_angka -> data = 5;
menyisipkan_angka -> next = NULL;

menyisipkan_angka -> next = cursor -> next;


cursor -> next = menyisipkan_angka;
//break;
} else if (cursor -> data == 5){
struct Node *menyisipkan_angka2 = malloc (sizeof(struct Node));
menyisipkan_angka2 -> data = 8;
menyisipkan_angka2 -> next = NULL;

menyisipkan_angka2 -> next = cursor -> next;


cursor -> next = menyisipkan_angka2;
//break;
}
cursor = cursor -> next;
}
//menampilkan linked list
cursor = head;
while (cursor !=NULL){
printf("%d",cursor -> data);
cursor = cursor -> next;
}

Output

Analisa
Pada percobaan ini, pembuatan node-nya menggunakan for loop. Untuk
penyisipan node, digunakan while loop dan parameter if else. While akan jalan
jika cursor tidak sama dengan NULL. if berisi deklarasi isi data. if berjalan jika
cursor berada pada data kedua.

 MENGHAPUS NODE PADA LINKED LIST


 Hapus di depan
Source Code

#include <stdio.h>
#include <stdlib.h>

struct Node
{
int data;
struct Node *next;
};

int main()
{
struct Node* cursor = NULL;
struct Node* head = NULL;
struct Node* del;
printf("sebelum dihapus\n");
int i;
for ( i=0;i<5;i++){
struct Node* node = (struct Node*) malloc(sizeof(struct Node));
node->data = i+1;
node->next = NULL;

if(i==0)
{
head = node;
cursor = head;
}
else
{
cursor->next = node;
cursor = node;
}

printf("%d", cursor->data);
}
printf("\nsetelah dihapus\n");

del = head;
head = head->next;
free(del);

cursor = head;
while(cursor!=NULL)
{
printf("%d", cursor->data);
cursor = cursor->next;
}
}

Output

Analisa
Pada percobaan ini, program berjalan dengan mengarahkan cursor pada
head, kemudian mendeklarasikan struct node* del. Head akan ditunjuk sebagai
del, dan cursor diarahkan ke head yang baru, sehingga node yang di awal
sebagai head sudah bisa dihapus.
 Hapus di tengah
Source Code
#include<stdio.h>
#include<stdlib.h>

struct Node
{
int data;
struct Node *next;
};

int main()
{
struct Node* cursor = NULL;
struct Node* head = NULL;

printf("sebelum dihapus\n");
int i;
for ( i=0;i<5;i++){
struct Node* node = (struct Node*) malloc(sizeof(struct Node));
node->data = i+1;
node->next = NULL;

if(i==0)
{
head = node;
cursor = head;
}
else
{
cursor->next = node;
cursor = node;
}

printf("%d", cursor->data);
}
printf("\nsetelah dihapus\n");
cursor = head;

while(cursor!=NULL)
{
if(cursor->data==2)
{
struct Node* del;
del = cursor->next;
cursor->next = del->next;
free(del);
}
printf("%d", cursor->data);
cursor = cursor->next;
}
}

Output

Analisa
Pada percobaan ini, program berjalan dengan mengarahkan cursor pada
head. Dengan menggunakan perulangan while dengan parameter cursor tidak
sama denga NULL, setelah memenuhi parameter tersebut, maka akan terdapat
if dengan parameter data sama dengan 2. Jika keadaan memenuhi parameter
maka program akan mendeklarasikan cursor -> next sebagai del. Kemudian
cursor -> next sebagai del -> next. Setelah itu dilakukan free (del) untuk
menghapus node tersebut. Jika program tidak memenuhi parameter if maka
program akan membaca cursor = -> next dan melakukan looping sampai
program menemukan yang sesuai dengan parameter if

 Hapus di belakang
Source Code
#include<stdio.h>
#include<stdlib.h>

struct Node
{
int data;
struct Node *next;
};

int main()
{
struct Node* cursor = NULL;
struct Node* head = NULL;

printf("sebelum dihapus\n");
int i;
for ( i=0;i<5;i++){
struct Node* node = (struct Node*) malloc(sizeof(struct Node));
node->data = i+1;
node->next = NULL;

if(i==0)
{
head = node;
}
else
{
cursor->next = node;
}

cursor = node;
printf("%d", cursor->data);
}
printf("\nsetelah dihapus\n");
cursor = head;

while(cursor!=NULL)
{
if(cursor->next->next==NULL)
{
struct Node* del;
del = cursor->next;
cursor->next = NULL;
free(del);
}
printf("%d", cursor->data);
cursor = cursor->next;
}
}
Output

Analisa
Pada percobaan ini, program berjalan dengan mengarahkan cursor pada head.
Dengan menggunakan perulangan while dengan parameter cursor tidak sama
denga NULL, setelah memenuhi parameter tersebut, maka akan terdapat if
dengan parameter cursor->next->next==NULL. Jika keadaan memenuhi
parameter maka program akan mendeklarasikan cursor -> next sebagai del.
Kemudian cursor -> next sebagai del -> next. Setelah itu dilakukan free (del)
untuk menghapus node tersebut. Jika program tidak memenuhi parameter if
maka program akan membaca cursor = -> next dan melakukan looping sampai
program menemukan yang sesuai dengan parameter if

TUGAS
1. Buat linked list dan Tambahkan node 1-100
#include<stdio.h>
#include<stdlib.h>

struct Node
{
int data;
struct Node *next;
};

int main()
{

struct Node* cursor = NULL;


struct Node* head = NULL;

int i;
for ( i=0;i<100;i++){
struct Node* node = (struct Node*) malloc(sizeof(struct Node));
node->data = i+1;
node-> next = NULL;
if(i==0)
{
head = node;
cursor = head;
}
else
{
cursor->next = node;
cursor = node;
}

printf("%d ", cursor->data);


}
}

2. Hapus node di awal


#include <stdio.h>
#include <stdlib.h>

struct Node
{
int data;
struct Node *next;
};

int main()
{
struct Node* cursor = NULL;
struct Node* head = NULL;
struct Node* del;

printf("sebelum dihapus\n");
int i;
for ( i=0;i<100;i++){
struct Node* node = (struct Node*) malloc(sizeof(struct Node));
node->data = i+1;
node->next = NULL;

if(i==0)
{
head = node;
cursor = head;
}
else
{
cursor->next = node;
cursor = node;
}

printf("%d ", cursor->data);


}
printf("\nsetelah dihapus\n");

del = head;
head = head->next;
free(del);

cursor = head;
while(cursor!=NULL)
{
printf("%d ", cursor->data);
cursor = cursor->next;
}
}
3. Hapus node di akhir
#include<stdio.h>
#include<stdlib.h>

struct Node
{
int data;
struct Node *next;
};

int main()
{
struct Node* cursor = NULL;
struct Node* head = NULL;

printf("sebelum dihapus\n");
int i;
for ( i=0;i<100;i++){
struct Node* node = (struct Node*) malloc(sizeof(struct Node));
node->data = i+1;
node->next = NULL;

if(i==0)
{
head = node;
}
else
{
cursor->next = node;
}

cursor = node;
printf("%d ", cursor->data);
}
printf("\nsetelah dihapus\n");
cursor = head;
while(cursor!=NULL)
{
if(cursor->next->next==NULL)
{
struct Node* del;
del = cursor->next;
cursor->next = NULL;
free(del);
}
printf("%d ", cursor->data);
cursor = cursor->next;
}
}

4. Tambahkan node 101 di awal


Tambahkan node 105 di akhir
Tambahkan node 110 setelah node 95
#include <stdio.h>
#include <stdlib.h>

struct Node
{
int data;
struct Node *next;
};

int main()
{

struct Node* cursor = NULL;


struct Node* head = NULL;
int i;
for ( i=0;i<100;i++){
struct Node* node = (struct Node*) malloc(sizeof(struct Node));
node->data = i+1;
node->next = NULL;
if(i==0)
{
head = node;
cursor = head;
}
else
{
cursor->next = node;
cursor = node;
}

}
struct Node* baru = malloc(sizeof(struct Node));
baru -> data = 101;
baru -> next = head;
head = baru;
cursor = head;
while(cursor!=NULL)
{
if(cursor->data==100)
{
struct Node* node = (struct Node*) malloc(sizeof(struct
Node));
node->data = 105;
node->next = NULL;

node->next = cursor->next;
cursor->next = node;

}
else if(cursor->data==95)
{
struct Node* node = (struct Node*) malloc(sizeof(struct
Node));
node->data = 110;
node->next = NULL;

node->next = cursor->next;
cursor->next = node;

}
printf("%d ", cursor->data);
cursor = cursor->next;

}
ANALISA
Pada percobaan ini, diberikan tugas-tugas seperti yang tertera di atas. Pada
pembuatan node 1 – 100, dilakukan otomatis menggunakan for loop. Looping
dilakukan sebanyak 100 kali, sehingga didapatkan node 1 – 100.
Pada penghapusan node di awal, program berjalan dengan mengarahkan cursor
pada head, kemudian mendeklarasikan struct node* del. Head akan ditunjuk
sebagai del, dan cursor diarahkan ke head yang baru, sehingga node yang di awal
sebagai head sudah bisa dihapus.
Pada penghapusan node di akhir, program berjalan dengan mengarahkan
cursor pada head. Dengan menggunakan perulangan while dengan parameter
cursor tidak sama denga NULL, setelah memenuhi parameter tersebut, maka akan
terdapat if dengan parameter cursor->next->next==NULL. Jika keadaan
memenuhi parameter maka program akan mendeklarasikan cursor -> next sebagai
del. Kemudian cursor -> next sebagai del -> next. Setelah itu dilakukan free (del)
untuk menghapus node tersebut. Jika program tidak memenuhi parameter if maka
program akan membaca cursor = -> next dan melakukan looping sampai program
menemukan yang sesuai dengan parameter if.
Pada penambahan node 101 di awal, dilakukan dengan mendeklarasikan node,
kemudian menginputkan nilai node dan mendeklarasikan node -> next = head
sebagai deklarasi lokasi node yang baru.
Pada penambahan node 105 dan penambahan node 110, digunakan while loop
dan parameter if else. While akan jalan jika cursor tidak sama dengan NULL. if
berisi deklarasi isi data. if berjalan jika cursor berada pada data kedua.

You might also like