Anda di halaman 1dari 10

Nama: Bayu Permana Putra

NIM: 2440116675

Mata Kuliah: Data Structure

Tugas Personal ke-1

Week 2

Single Linked List

Learning Outcome:
LO1: Explain the concept of data structure and its usage in application
LO2: Demonstrate how to create any learned data structure

Soal Review

1. Uraikan pengertian single linked list? Ilustrasikan cara membuat single linked list!

2. Uraikan representasi linked list dalam memori dengan menggunakan contoh!

3. Buatlah tabel perbandingan antara linked list dan array! Mana yang lebih baik dan kapan
digunakan?

Soal Case

Buatlah sebuah program database sederhana dengan menggunakan single linked list!

Program tersebut memiliki pilihan langkah sebagai berikut:

1. Push data mahasiswa. Ketika dijalankan, akan diminta input berupa nim, nama, dan
jurusan. Validasi nim maksimal 10 angka, nama maksimal 30 karakter, dan jurusan
maksimal 50 karakter. Validasi jumlah data yang dapat diinput maksimal 5 data.

2. Menampilkan semua daftar nim, nama, dan jurusan tiap mahasiswa. Pada saat ditampilkan
diurutkan (sort) berdasarkan nim.

3. Pop semua data mahasiswa.

4. Keluar dari program.

COMP6601 – Data Structures


Soal Review

1. Single Linked List adalah sebuah struktur data yang terdiri dari sebuah urutan nodes
yang berisi sebuah reference (link) ke node selanjutnya secara berurutan. Linked List
memungkinkan penambahan dan penghapusan nodes di manapun di dalam list dan dapat
dilakukan hanya jika link antara node yang ditambahkan dan dihapus tersebut selalu
terjaga.

Ilustrasi dari Single Linked List

2. Representasi Linked List dalam memori

a. Single Linked List


* Node pertama dari head node dan itu menunjuk ke node berikutnya secara
berurutan.
* Referensi dari Node terakhir adalah null yang menunjukkan akhir dari list.
Contoh:

b. Double Linked List


* Setiap node memiliki 2 pointers, satu untuk menunjukkanke node berikutnya dan
kedua untuk menunjukkan ke node sebelumnya.
* Pointer berikutnya dari node terakhir dan pointer sebelumnya dari the node pertama

COMP6601 – Data Structures


(head) adalah null
Contoh:

c. Circular Linked List


* Circular Linked List sangat mirip dengan single linked list kecuali bahwa, di sini
node terakhir menunjuk ke node pertama menjadikannya circular list.
Contoh:

3. Perbandingan antara Linked List & Array

Linked List Array

Linear collection of Linear collection of data elements

Nilai tidak disimpan dalam memory Nilai disimpan dalam memory locations
locations yang berurutan (acak) yang berurutan

Hanya bisa diakses secara berurutan Dapat diakses secara acak

Soal Case
Untuk compilernya, saya menggunakan replit.com.
tp1_data_structures - Replit

#include <stdio.h>

#include <malloc.h>

#include <math.h>

COMP6601 – Data Structures


#include <stdlib.h>

#include <string.h>

struct SMahasiswa

unsigned long int nim;

unsigned char name[30];

unsigned char major[50];

struct node *next;

};

void insert();

void display();

void deleted();

typedef struct SMahasiswa MAHASISWA;

MAHASISWA *head_node, *first_node, *temp_node = 0, *prev_node, next_node;

int main(void)

int option = 0;

printf("Single Linked List - Data Mahasiswa\n");

COMP6601 – Data Structures


while (option < 4)

printf("Options\n");

printf("1: Insert Data\n");

printf("2: Display Data\n");

printf("3: Pop Data\n");

printf("Other Number: Exit Program\n");

printf("Enter your option: ");

scanf("%d", &option);

switch (option)

case 1:

insert();

break;

case 2:

display();

break;

case 3:

deleted();

break;

COMP6601 – Data Structures


default:

break;

return 0;

// Insert Data

void insert()

MAHASISWA dMahasiswa;

printf("============== INSERT Data Mahasiswa ============= \n");

printf("NOTE: for input NAME & MAJOR, use CamelCase or Snake_case (no space) \n");

printf("NIM: ");

scanf("%lu", &dMahasiswa.nim);

printf("Nama: ");

scanf("%s", dMahasiswa.name);

printf("Jurusan: ");

scanf("%s", dMahasiswa.major);

int nNim = 0; // counted nim

unsigned long int realNim = dMahasiswa.nim; // save nim;

COMP6601 – Data Structures


// Count NIM

do

++nNim;

dMahasiswa.nim = dMahasiswa.nim / 10;

} while (dMahasiswa.nim);

if (nNim != 10)

printf("NIM must have 10 digits! \n");

else if (strlen(dMahasiswa.name) > 30)

printf("Name must only 30 char below! \n");

else if (strlen(dMahasiswa.major) > 50)

printf("Major must only 50 char below! \n");

else

temp_node = (MAHASISWA *)malloc(sizeof(MAHASISWA));

temp_node->nim = realNim;

*temp_node->name = *dMahasiswa.name;

*temp_node->major = *dMahasiswa.major;

COMP6601 – Data Structures


if (first_node == 0)

first_node = temp_node;

else

head_node->next = temp_node;

temp_node->next = 0;

head_node = temp_node;

fflush(stdin);

// Display Data

void display()

int count = 0;

temp_node = first_node;

printf("\n Display Data : \n");

if (temp_node == 0)

printf("-- Empty List --");

else

COMP6601 – Data Structures


while (temp_node != 0)

printf("# NIM = %lu \n", temp_node->nim);

printf("# Name = %s \n", temp_node->name);

printf("# Major = %s \n", temp_node->major);

printf("###################################");

count++;

temp_node = temp_node->next;

printf("\nNo of Items In Linked List : %d\n", count);

// Pop Data

void deleted()

printf("============== DELETE Data Mahasiswa ============= \n");

struct SMahasiswa *ptr, *ptr1;

if (first_node == NULL)

printf("\nList is Empty\n");

COMP6601 – Data Structures


}

else if (first_node->next == NULL)

first_node = NULL;

free(first_node);

printf("\nOnly node of the list deleted ...\n");

else

ptr = first_node;

while (ptr->next != NULL)

ptr1 = ptr;

ptr = ptr->next;

ptr1->next = NULL;

free(ptr);

printf("Popped Data at Last Node...\n");

COMP6601 – Data Structures

Anda mungkin juga menyukai