Lompat ke konten Lompat ke sidebar Lompat ke footer

Linked List Bahasa C Beserta Fungsi dan Penjelasannya

Tidak seperti C++ dan Java, Bahasa C merupakan bahasa pemrograman yang tidak mendukung keyword linked list. Namun, untuk dapat melakukan hal tersebut, pada bahasa C dapat digunakan pointer void dan fungsi pointer untuk implementasi fungsi yang sama seperti linked list. Hal yang menaik tentang pointer void adalah pointer tersebut dapat digunakan untuk menunjuk ke tipe data jenis apapun. Juga, ukuran dari segala tipe pointer adalah selalu bernilai sama, sehingga dapat selalu dilakukan alokasi memori ke sebuah node linked list


Sebelum memahami lebih dalam materi tentang Linked List Bahasa C Beserta Fungsi dan Penjelasannya, terlebih dahulu pelajari materi tentang: Pointer Near, Far, dan Huge Bahasa C Beserta Penjelasannya, Pointer Ke Fungsi Bahasa C Beserta Penjelasannya, dan Pointer NULL Bahasa C Beserta Fungsi dan Penjelasannya.

Fungsi pointer juga dibutuhkan pada pembuatan linked list Bahasa C untuk memproses penyimpanan konten aktual pada alamat yang dituju oleh pointer void. Berikut adalah contoh sederhana Bahasa C untuk mendemonstrasikan cara kerja dari linked list.

Contoh:

// Program Bahasa C untuk

// generic linked list

#include<stdio.h>

#include<stdlib.h>


/* Node linked list */

struct Node

{

// Tipe data apapun dapat

// disimpan pada node ini.

void *data;

struct Node *next;

};


/* Fungsi untuk menambahkan

 sebuah node pada bagian awal

 dari Linked List. Fungsi ini

 menerima sebuah pointer ke

 data yang akan ditambahkan

 nilai dan ukuran dari tipe

 datanya. */

void push(struct Node** head_ref, void *new_data, size_t data_siz)

{

// Alokasi memori untuk node

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

new_node->data = malloc(data_size);

new_node->next = (*head_ref);


// Konten duplikasi dari

// new_data ke alokasi memori

// terbaru.



// Diasumsikan: char

// mengalokasikan memori

// sebesar 1 byte.

int i;

for (i=0; i<data_size; i++)

*(char *)(new_node->data + i) = *(char *)(new_data + i);

// Mengubah pointer head

// sebagai node baru pada

// bagian awal.

(*head_ref) = new_node;

}


/* Fungsi untuk mencetak node

 yang diberikan pada linked

 list. fpitr digunakan untuk

 mengakses fungsi yang akan

 digunakan untuk mencetak

 nilai node data saat ini.*/ 


/*Catatan: tipe data yang

 berbeda juga membutuhkan

 specifier yang berbeda pula

 untuk dapat dicetak pada

 printf(). */

void printList(struct Node *node, void (*fptr)(void *))

{

while (node != NULL)

{

(*fptr)(node->data);

node = node->next;

}

}


// Fungsi untuk mencetak nilai

// integer.

void printInt(void *n)

{printf(" %d", *(int *)n);}


// Fungsi untuk mencetak

// sebuah float

void printFloat(void *f)

{printf(" %f", *(float *)f);}


/* Program untuk mengetes

 fungsi yang dibuat

 sebelumnya. */

int main()

{

struct Node *start = NULL;


// Membuat dan mencetak nilai

// integer linked list.

unsigned int_size = sizeof(int);

int arr[] = {10, 20, 30, 40, 50}, i;


for (i=4; i>=0; i--)

push(&start, &arr[i], int_size);


printf("Created integer linked list is \n");


printList(start, printInt);


// Membuat dan mencetak sebuah

// float linked list

unsigned float_size = sizeof(float);


start = NULL;


float arr2[] = {10.1, 20.2, 30.3, 40.4, 50.5};


for (i=4; i>=0; i--)

push(&start, &arr2[i], float_size);


printf("\n\nCreated float linked list is \n");


printList(start, printFloat);


return 0;

}

Output:
Created integer linked list is
10 20 30 40 50
Created float linked list is
10.100000 20.200001 30.299999 40.400002 50.500000


Linked list merupakan salah satu struktur data yang banyak digunakan dalam pemrograman untuk mengelola data secara dinamis. Dalam bahasa C, linked list memainkan peran penting karena mampu memberikan fleksibilitas dalam pengelolaan data dibandingkan dengan array. Struktur data ini terdiri atas kumpulan node, dimana setiap node berisi data dan pointer yang menunjuk ke node berikutnya. Dengan sifat dinamisnya, linked list memungkinkan pengelolaan memori secara lebih efisien, terutama ketika ukuran data tidak dapat diprediksi sejak awal.

Dalam implementasinya, linked list memiliki berbagai jenis, yaitu singly linked list, doubly linked list, dan circular linked list. Singly linked list adalah jenis paling sederhana dimana setiap node hanya memiliki satu pointer yang menunjuk ke node berikutnya. Doubly linked list memiliki dua pointer di setiap node, satu untuk menunjuk ke node sebelumnya dan satu lagi untuk menunjuk ke node berikutnya. Circular linked list adalah variasi dimana node terakhir menunjuk kembali ke node pertama, menciptakan struktur melingkar.

Struktur Node dalam Linked List

Sebuah linked list terdiri atas node-node yang saling terhubung. Dalam bahasa C, node biasanya didefinisikan menggunakan struktur (struct). Struktur ini mencakup dua elemen utama: data yang menyimpan nilai dan pointer yang menunjuk ke node lain. Pendekatan ini memungkinkan node-node dalam linked list disimpan di lokasi memori yang tidak berdekatan. Fleksibilitas ini sangat berguna dalam kasus dimana data harus sering ditambahkan atau dihapus, sesuatu yang sulit dilakukan dengan array karena keterbatasan alokasi memori statis.

Fungsi-Fungsi dalam Linked List

Pengelolaan linked list melibatkan berbagai operasi dasar seperti penambahan, penghapusan, pencarian, dan traversing. Fungsi-fungsi ini dirancang untuk memastikan linked list dapat dimodifikasi sesuai kebutuhan tanpa kehilangan integritas data.
  • Penambahan Node (Insertion): Penambahan node merupakan salah satu operasi utama dalam linked list. Node baru dapat ditambahkan di awal, tengah, atau akhir list. Dalam penambahan di awal, node baru dibuat dan pointer-nya diarahkan ke node pertama yang sudah ada. Proses ini relatif cepat karena hanya melibatkan perubahan pointer. Untuk menambahkan node di akhir, traversal diperlukan untuk menemukan node terakhir, sehingga pointer-nya dapat diarahkan ke node baru. Proses ini membutuhkan waktu lebih lama karena melibatkan iterasi.
  • Penghapusan Node (Deletion): Penghapusan node juga menjadi fitur penting dalam linked list. Node yang dihapus bisa berada di awal, tengah, atau akhir list. Untuk menghapus node di awal, pointer head cukup diarahkan ke node berikutnya. Penghapusan di tengah atau akhir memerlukan traversal untuk menemukan node yang tepat, diikuti dengan pembaruan pointer agar node sebelumnya mengarah ke node setelahnya, melewati node yang dihapus.
  • Pencarian Node (Search): Fungsi pencarian digunakan untuk menemukan node dengan nilai tertentu. Proses ini melibatkan iterasi dari node pertama hingga node terakhir, membandingkan nilai di setiap node dengan nilai yang dicari. Meskipun proses ini sederhana, waktu yang dibutuhkan bersifat linear (O(n)), yang berarti semakin banyak node dalam list, semakin lama waktu yang dibutuhkan untuk pencarian.
  • Traversal: Traversal adalah proses untuk mengunjungi setiap node dalam linked list, biasanya untuk membaca atau memproses data. Fungsi ini berguna dalam berbagai kasus, seperti menampilkan isi linked list atau melakukan operasi pada setiap elemen. Traversal dilakukan dengan iterasi dari node pertama hingga node terakhir, menggunakan pointer untuk berpindah dari satu node ke node berikutnya.
  • Penghitungan Panjang Linked List: Fungsi untuk menghitung panjang linked list sering kali diperlukan dalam implementasi. Fungsi ini bekerja dengan cara iterasi melalui seluruh node dalam list dan menghitung jumlah node yang dilewati. Meskipun sederhana, fungsi ini sangat berguna untuk memastikan integritas linked list dalam aplikasi yang lebih kompleks.
  • Pembuatan Linked List Kosong: Sebelum menggunakan linked list, diperlukan fungsi untuk menginisialisasinya. Biasanya, linked list diinisialisasi sebagai kosong dengan menetapkan pointer kepala (head) ke NULL. Pendekatan ini memastikan linked list siap digunakan dan tidak mengandung data yang tidak valid.
  • Pengurutan Node (Sorting): Dalam beberapa kasus, linked list perlu diurutkan berdasarkan nilai data. Pengurutan dalam linked list dapat dilakukan menggunakan algoritma seperti bubble sort atau merge sort. Proses ini lebih kompleks dibandingkan pengurutan array karena melibatkan perubahan pointer di setiap node.

Keunggulan Linked List dalam Bahasa C

Keunggulan utama linked list adalah fleksibilitas dalam pengelolaan data. Tidak seperti array, linked list tidak memerlukan alokasi memori statis. Node baru dapat ditambahkan atau dihapus tanpa perlu mengalokasikan ulang memori seluruhnya. Hal ini membuat linked list sangat berguna dalam aplikasi yang membutuhkan pengelolaan data dinamis, seperti implementasi antrian, tumpukan, atau graf.

Linked list juga lebih efisien dalam penggunaan memori karena hanya memerlukan memori yang sesuai dengan jumlah data yang ada. Dalam aplikasi yang memerlukan penambahan dan penghapusan data secara sering, linked list dapat mengurangi overhead dibandingkan array, yang mungkin membutuhkan operasi mahal seperti penggeseran elemen.

Kelemahan Linked List dalam Bahasa C

Meskipun memiliki banyak keunggulan, linked list juga memiliki beberapa kelemahan. Salah satu kelemahan utama adalah efisiensi waktu dalam beberapa operasi. Karena node-node dalam linked list tidak disimpan secara berdekatan dalam memori, operasi pencarian atau traversing membutuhkan waktu lebih lama dibandingkan array, yang dapat mengakses elemen secara langsung menggunakan indeks.

Selain itu, linked list memerlukan tambahan memori untuk menyimpan pointer di setiap node. Dalam kasus dimana jumlah data sangat besar, penggunaan memori untuk pointer ini dapat menjadi signifikan. Kompleksitas implementasi juga lebih tinggi dibandingkan array, terutama dalam pengelolaan pointer dan penghindaran kebocoran memori.

Kesimpulan

Linked list dalam bahasa C adalah struktur data yang sangat berguna untuk pengelolaan data dinamis. Dengan kemampuannya untuk menambah dan menghapus data dengan mudah, linked list memberikan fleksibilitas yang tidak dimiliki oleh array. Namun, penggunaannya harus disesuaikan dengan kebutuhan aplikasi, karena memiliki kelemahan dalam efisiensi waktu untuk beberapa operasi. Pemahaman yang mendalam tentang fungsi-fungsi dasar seperti penambahan, penghapusan, pencarian, dan traversal sangat penting untuk memanfaatkan linked list secara optimal. Dengan pendekatan yang tepat, linked list dapat menjadi solusi yang efisien untuk berbagai tantangan pengelolaan data.

5 komentar untuk "Linked List Bahasa C Beserta Fungsi dan Penjelasannya"

  1. Apa yang dimaksud dengan linked list pada bahasa C?

    BalasHapus
    Balasan
    1. Linked list pada bahasa C merupakan bentuk struktur data linier, dimana setiap linked list memiliki dua bagian, yaitu bagian data dan bagian alamat yang menyimpan alamat elemen berikutnya dalam suatu daftar tertentu, yang disebut dengan node.

      Hapus
    2. Linked list bahasa C merupakan urutan struktur data yang berhubungan satu sama lain melalui suatu tautan tertentu.

      Hapus
    3. Linked list merupakan urutan link berisi item-item data.

      Hapus
    4. Setiap tautan linked list pada Bahasa C berisi koneksi ke tautan lainnya, dimana linked list tersebut paling banyak digunakan setelah penggunaan array pada bahasa C.

      Hapus

Hubungi admin melalui Wa : +62-896-2414-6106

Respon komentar 7 x 24 jam, mohon bersabar jika komentar tidak langsung dipublikasi atau mendapatkan balasan secara langsung.

Bantu admin meningkatkan kualitas blog dengan melaporkan berbagai permasalahan seperti typo, link bermasalah, dan lain sebagainya melalui kolom komentar.

- Ikatlah Ilmu dengan Memostingkannya -