Nama: Sukma Adriyanto
Nim: 2001585146
Apa itu linked list ?
link list adalah menyimpan berbagai macam elemen, seperti array yang bisa berisi character atau integer. tiap elemen yang tersimpan di linked list dalam bentuk yang sebuah node.
Contoh gambar node:
Linked list terbuat ketika banyak node saling terhubung dan membentu semacam rangkaian, setiap node tersusun sesuai urutan. node pertama di namai Head dan node terakhir menunjukan NULL
Terdapat dua macam linked list:
– Single linked list
– Double linked list
Contoh codingan linked list:
struct node {
int data;
struct node *next;
};
#include <stdio.h>
#include <stdlib.h>
struct node {
int data;
struct node *next;
};
struct node *start = NULL;
void insert_at_begin(int);
void insert_at_end(int);
void traverse();
void delete_from_begin();
void delete_from_end();
int count = 0;
int main () {
int i, data;
for (;;) {
printf(“1. Insert an element at the beginning of linked list.\n“);
printf(“2. Insert an element at the end of linked list.\n“);
printf(“3. Traverse linked list.\n“);
printf(“4. Delete an element from beginning.\n“);
printf(“5. Delete an element from end.\n“);
printf(“6. Exit\n“);
scanf(“%d”, &i);
if (i == 1) {
printf(“Enter value of element\n“);
scanf(“%d”, &data);
insert_at_begin(data);
}
else if (i == 2) {
printf(“Enter value of element\n“);
scanf(“%d”, &data);
insert_at_end(data);
}
else if (i == 3)
traverse();
else if (i == 4)
delete_from_begin();
else if (i == 5)
delete_from_end();
else if (i == 6)
break;
else
printf(“Please enter valid input.\n“);
}
return 0;
}
void insert_at_begin(int x) {
struct node *t;
t = (struct node*)malloc(sizeof(struct node));
t->data = x;
count++;
if (start == NULL) {
start = t;
start->next = NULL;
return;
}
t->next = start;
start = t;
}
void insert_at_end(int x) {
struct node *t, *temp;
t = (struct node*)malloc(sizeof(struct node));
t->data = x;
count++;
if (start == NULL) {
start = t;
start->next = NULL;
return;
}
temp = start;
while (temp->next != NULL)
temp = temp->next;
temp->next = t;
t->next = NULL;
}
void traverse() {
struct node *t;
t = start;
if (t == NULL) {
printf(“Linked list is empty.\n“);
return;
}
printf(“There are %d elements in linked list.\n“, count);
while (t->next != NULL) {
printf(“%d\n“, t->data);
t = t->next;
}
printf(“%d\n“, t->data); // Print last node
}
void delete_from_begin() {
struct node *t;
int n;
if (start == NULL) {
printf(“Linked list is empty.\n“);
return;
}
n = start->data;
t = start->next;
free(start);
start = t;
count–;
printf(“%d deleted from the beginning successfully.\n“, n);
}
void delete_from_end() {
struct node *t, *u;
int n;
if (start == NULL) {
printf(“Linked list is empty.\n“);
return;
}
count–;
if (start->next == NULL) {
n = start->data;
free(start);
start = NULL;
printf(“%d deleted from end successfully.\n“, n);
return;
}
t = start;
while (t->next != NULL) {
u = t;
t = t->next;
}
n = t->data;
u->next = NULL;
free(t);
printf(“%d deleted from end successfully.\n“, n);
}
Source:
https://www.geeksforgeeks.org/data-structures/linked-list/singly-linked-list/
https://www.hackerearth.com/practice/data-structures/linked-list/singly-linked-list/tutorial/
https://www.programmingsimplified.com/c/data-structures/c-program-implement-linked-list