fbpx

Struktur Data : Deklarasi Single Linked List dalam Bahasa C

๐Ÿ“‹ Daftar Isi

Deklarasi

Deklarasi single linked list ini diawali dengan membuat setiap node dimana setiap node akan berbentuk struct dan memilili satu buah field bertipe struct yang sama yang berfungsi sebagai pointer.

#include <stdio.h>

struct mahasiswa
{
  char nim[25];
  char nama[25];
  int usia;
};

Deklarasi dan akses:

struct mahasiswa mhs1;
struct mahasiswa mhs1 = {100, "Stat", 19};
printf ("%s", mhs1.nama);

Variabel pointer (yang menyimpan alamat memory struct)

struct mahasiswa mhs1, *p_mhs1;
struct mahasiswa mhs1 = {100, "Stat", 19};

p_mhs1 = &mhs1;

printf("%s", p_mhs1->nim);
printf("%s", p_mhs1->nama);

Setiap node akan berbentuk struct dan memiliki satu buah field bertipe struct yang sama berfungsi sebagai pointer.

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

*next pada struct di atas akan menyimpan alamat node setelahnya yang juga bertipe struct node, maka pointer next juga harus bertipe sama.

Perlu diingat bahwa pointer harus bertipe sama dengan alamat yang ditunjuk.


Membuat Node Menggunakan Alokasi Memory Dinamis

struct mynode
{
  int data;
  struct mynode *next;
}
struct mynode *head = NULL;
struct munode *second = NULL;

head = (struct mynode*)malloc(sizeof(struct mynode));
second = (struct mynode*)malloc(sizeof(struct mynode));

head->data = 1;
head->next = second;

second->data = 2;
second->next = NULL;
  • Pertama membuat yaitu membuat struktur. Struktur ini bisa disimpan sebagai global atau lokal
  • Node head = NULL menunjukkan linked list masih kosong
  • Alokasikan memory secara dinamis dengan malloc
  • Isi elemen data dan pointer next disetiap node
  • Akhir sebuah list (pointer node terakhir mengarah ke NULL)

Membuat Linked List

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

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

int main()
{
  struct node *head = NULL;
  struct node *dua = NULL;
  struct node *tiga = NULL;
  head = (struct node*)malloc(sizeof(struct node));
  dua = (struct node*)malloc(sizeof(struct node));
  tiga = (struct node*)malloc(sizeof(struct node));
 
  head->data = 10;
  head->next = dua;
  
  dua->data = 20;
  dua->next = tiga;

  tiga->data = 30;
  tiga->next = NULL;

  printf("Isi dari linked list :\n");
  struct node *n = head;
  while (n != NULL)
  {
    printf("%d\n", n->data);
    n = n->next;
  }
  return 0;
}

Output:

Isi dari linked list:
10
20
30

Iterasi setiap node dalam sebuah linked list:

node n;
n = head;
while (n != NULL)
{
  ...
  n = n->next;
}

node n adalah node bantuan. Lakukan printf() field data dari setiap node dari head, node berikutnya, dan seterusnya sampai node tersebut NULL.

Apabila jumlah node dalam sebuah linked list ditentukan secara dinamis (misal dari input user), tidak ditentukan di awal. Bagaimana cara membentuk linked list?

Contoh statis (tidak dinamis) adalah ketika dideklarasikan secara statis 3 buah node dalam linked list tersebut

struct node *head = NULL;
struct node *dua = NULL;
struct node *tiga = NULL;
head = (struct node*)malloc(sizeof(struct node));
dua = (struct node*)malloc(sizeof(struct node));
tiga = (struct node*)malloc(sizeof(struct node));

Penggunaan Typedef

struct node
{
  int value;
  struct node *next;
};
typedef struct node *mynode;

typedef digunakan untuk mendefiniskan tipe data baru atau memberi alias/nama baru suatu tipe data.

  • Coding lebih rapi/bersih (menyederhanakan tipe data yang panjang dan complex)
  • Tidak perlu menuliskan struct di semua tempat

Contoh lain penggunaan typdef

typedef unsigned char HURUF;
HURUF b1, b2;
typedef long long int LLI;
int x = sizeof(LLI);


Fungsi Untuk Membuat Node

mynode createnode(int nilai)
{
  mynode p;
  p = (mynode)malloc(sizeof(struct node));
  p->value = nilai;
  p->next = NULL;
  return(p);
}

Bagaimana jika tidak mendeklarasikan typedeft struct node *mynode?

struct node* createnode(int nilai)
{ 
  struct node* p;
  p = (struct node*)malloc(sizeof(struct node));
  p->value = nilai;
  p->next = NULL:
  return(p)
}

Fungsi free() Pada Linked List

Kegunaan dari free() adalah untuk membebaskan memoryy yang dialokasikan untuk node tersebut

void free_node(mynode node)
{
  free(node);
}

Materi Lengkap

Silakan baca juga beberapa artikel menarik kami tentang Single Linked List, daftar lengkapnya adalah sebagai berikut.


Tonton juga video pilihan dari kami berikut ini

Bagikan ke teman-teman Anda

Contact Us

How to whitelist website on AdBlocker?

How to whitelist website on AdBlocker?

  1. 1 Click on the AdBlock Plus icon on the top right corner of your browser
  2. 2 Click on "Enabled on this site" from the AdBlock Plus option
  3. 3 Refresh the page and start browsing the site
error: Content is protected !!