INTRO TO LINKED LIST : Simple Linked List

Pada postingan sebelumnya telah dipelajari definisi dan manfaat dari linked list atau daftar berantai dan bagaimana perbandingannya dengan array. Postingan kali ini akan memfokuskan pada bagaimana implementasi linked list pada bahasa pemrograman C, namun belum sekompleks penjelasan sebelumnya. Linked list kali ini hanya memuat dua fungsi yaitu input dan output. Input sebagai fungsi untuk membuat linked list dan output sebagai fungsi untuk mencetak data dari linked list.

Ada dua prinsip yang digunakan untuk menginput dan mencetak data dari linked list yaitu First In First Out atau yang lebih di kenal dengan FIFO dan Last In First Out atau lebih dikenal dengan LIFO. Meskipun sebenarnya proses mencetakan data pada linked list dapat dilakukan secara acak, namun proses penelusuran data hanya terbagi menjadi pada dua prinsip tersebut. Olehnya itu, linked list yang akan dibahas kali ini akan terbagi menjadi dua jenis berdasarkan prinsip diatas. (Source code untuk codingan dibawah ini dapat di download disini)

First In First Out (FIFO)

Prinsip FIFO mirip dengan sebuah antrian pada gedung bioskop. Jika tidak ada yang berbuat curang, maka yang pertama datang akan dilayani lebih awal dan yang terakhir datang akan mengantri dibelakang dan dilayani terakhir. Berikut ini adalah penerapan linked list dengan prinsip FIFO pada bahasa pemrograman C.

/* Try pointer Queue (Antrian)
First Input First Out (FIFO)
*/

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

/* ADT dideklarasikan sebelum program utama.
Hal ini dilakukan agar ADT dapat dibaca sebagai tipe data global
sehingga tidak perlu ada pendeklarasian kembali pada tiap fungsi.*/

struct datapointer{

int nilai;

struct datapointer *next;

} *first=NULL;  //variabel first di set NULL agar tercipta sebuah linked list kosong

void inputdata(void);
void outputdata(void);

int main(){

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

/* Variabel first di isi dengan sebuah alamat pada memory. Variabel first akan menjadi “head” atau kepala pada pointer. Pada algoritma inyi tidak ada perubahan nilai variabel first, sehingga data pertama yang di inputkan menjadi data pertama yang diproses saat penelusuran data*/

/* Perintah “malloc” merupakah perintah “memory allocation”. Perintah ini berfungsi mengalokasikan suatu alamat pada memory pada sebuah variabel*/

inputdata();
outputdata();

system(“pause”);
return 0;

}

void inputdata(void){

struct datapointer *newpointer;
char reply;
newpointer = first;
do{

printf(“Input Data List : “);
scanf(“%d”,&newpointer->nilai);//perintah pengisian data pada linked list

printf(“Is There More (Y/N) : “);
do reply=toupper(getch());
while (!(reply==’Y'||reply==’N'));

/* toupper merupakan perintah untuk meng-upcase (mengkapitalkan) sebuah karakter.
pada sebagian compiler perintah ini hanya terdapat pada librari ctype.h
perintah getch merupakan perintah untuk membaca inputan dari keyboard.
pada sebagian compiler perintah ini hanya terdapat pada librari conio.h*/

if(reply==’Y'){

newpointer->next = (struct datapointer*)malloc(sizeof(struct datapointer));
newpointer = newpointer->next;
/* Jika masih ada penambahan data, maka newpointer->next harus dialokasikan pada memory yang baru.
Selanjutnya newpointer akan mengambil alamat memory yang baru tersebut dan mengisikan nilai pada alamat tersebut*/

} else newpointer->next = NULL;

//jika tidak ada data yang dimasukkan lagi, maka sebagai penanda akhir dari linked list, newpointer->next di set NULL

printf(“\n”);

} while (reply==’Y');

}

void outputdata(void){

struct datapointer *temp;
temp = first;

while (temp){

printf(“Data Pointer = %d\n”,temp->nilai);
temp = temp->next;

}

/* Kondisi NULL dapat dianggap sebagai angka 0 dan kondisi non-NULL dianggap sebagai angka 1
sehingga perintah while (temp!=NULL) dan perintah while(temp) dianggap sama*/

}

Last In First Out (LIFO)

Untuk lebih memahami prinsip LIFO bayangkanlah sebuah tumpukkan. Pada sebuah tumpukkan, benda pertama akan diletakkan paling bawah lalu diletakkan benda kedua diatas benda pertama, benda ketiga diatas benda kedua, begitu seterusnya, sehingga benda terakhir yang diletakkan berada pada paling atas. Hal ini membuat benda terakhir menjadi benda pertama yang akan terambil. Berikut ini adalah penerapan linked list dengan prinsip LIFO pada bahasa pemrograman C.

/* Model pointer ialah Stack
yang berarti “Last Input First Out” (LIFO)
*/

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

struct trypointer{

int nilai;
struct trypointer *next;

} *first = NULL; //variabel first di set NULL agar tercipta sebuah linked list kosong

void inputdata (void);
void outputdata (void);

int main(){

inputdata();
outputdata();
system(“pause”);
return 0;

}

void inputdata (void){

int count=1;
char repeat;
struct trypointer *newpointer;

do{

newpointer = (struct trypointer*)malloc(sizeof(struct trypointer));
if(newpointer){
printf(“Input Nilai ke-%d : “,count);
scanf(“%d”,&newpointer->nilai);
newpointer->next = first;
first = newpointer;

/* pada linked list dengan prinsip LIFO terjadi perubahan nilai first. Perintah “newpointer->next = first” membuat data yang dimasukkan menunjuk pada data yang pertama dan perintah “first = newpointer” menjadikan first menunjuk pada data yang di inputkan. Sehingga data terakhir menjadi data pertama yang diproses pada saat penelusuran data.
proses ini sering juga disebut dengan PUSH yaitu proses untuk menyisipkan data baru pada awal linked list*/

count++;

printf(“Is There More (Y/N) : “);
do repeat=toupper(getch());
while (!(repeat==’Y'||repeat==’N'));
printf(“\n”);

} else {

puts(“Memorry Error”);
break;

}

} while (repeat==’Y');

}

void outputdata(void){

int count=1;
struct trypointer *temppointer;

system(“cls”);  //perintah clear screen
puts(“List Data”);

temppointer = first;
while(temppointer){

printf(“Value Number %d is : %d\n”,count,temppointer->nilai);
temppointer = temppointer->next;
count++;

}

}

Catatan :

*) Postingan ini hanya membahas tentang Input dan Output pada linked list.

*) Insert dan Delete pada linked list akan dibahas selanjutnya.


About this entry