top of page
Search

Review Single Linked List

  • Writer: michael kurniawan
    michael kurniawan
  • Mar 3, 2020
  • 3 min read

Pada perkuliahan pada hari ini adalah mereview kembali apa itu linked list dan pengaplikasiannya berikut adalah yang saya pelajari.


Perlu diketahui bahwa jika mengcoding untuk single linked list dia hanya memiliki "Next". kegunaan "Next" adalah untuk menyambungkan node awal kenode berikutnya sampai dia ketemu NULL.


Tetapi kekurangan dari single linked list dia tidak bisa mundur kenode sebelumnya yang biasa dinamakan "Prev/previous". "Prev" memungkinkan user untuk mundur kenode sebelumnya.


Structure

Dalam mengoding awal single linked list dia perlu namanya struct sebagai contoh sebuah nama dan umur.

source code:


Struct Data{

char name[51];

int age;

struct Data *next;

};


Keterangan

1. Pada struct Data *next jika dia single linked list maka hanya memiliki 1 pointer yaitu *next jika dia double linked list maka dia ada 2 pointer yaitu *next dan *prev karena dia bisa mundur.

2. Pada codingan struct bisa dituliskan dengan cara global jika menggunakan cara itu hanya tambahkan *head=NULL, *tail=NULL; sesudah }.


Memory Assign Function

membuat function ini agar tidak ada pengulangan penulisan pada saat mengassign sebuah memory

source code:


struct data* memoryAssign(char name[], int age){

//reserve memory

struct data *node=(struct data*)malloc(sizeof(struct data));

//assign value

strcpy(node->name, name);

(*node).age = age;

node->next = NULL;

return node;

}


Keterangan

1. Perlu diketahui malloc adalah memory alocation dimana memory akan dibuat jika ada node baru. Nah untuk malloc biasanya tidak tentu nilainya oleh karena itu digunakan lah yang namanya sizeof. Lalu jangan lupa untuk dicasting yaitu (struct Data*)

2. Pada node->next=NULL maka artinya jika node berikutnya berupa NULL/tidak ada data maka dia akan berhenti.


Push Function / Insert Data

Setelah membuat struct maka kita dapat membuat fungsi push

Push digunakan pada saat ingin menginsert data.

Push memiliki beberapa varian ada PushDepan, PushBelakang dan PushTengah.

source code:


Berikut function untuk PushDepan

void pushHead(struct data **head, struct data **tail, char name[], int age){

//function MemoryAssign

struct data *node = newNode(name, age);

//connect

if(*head == NULL){

*head = *tail = node;

}

else{

node->next = *head;

*head = node;

}

}


Keterangan

1. Karena kita akan banyak mengassign memory maka dibuatlah function memoryAssign sebelumnya sehingga pada saat digunakan hanya perlu dipanggil

2. Pada if(*head==NULL) digunakan jika list masih kosong.


Berikut function untuk PushBelakang

void pushTail(struct data **head, struct data **tail, char name[], int age){

//function MemoryAssign

struct data *node = newNode(name, age);

//connect

if(*head == NULL) {

*head = *tail = node;

}

else{

(*tail)->next = node;

*tail = node;

}

}


Keterangan

1. Pada dasarnya untuk PushDepan dan PushBelakang tidak berbeda jauh hanya tinggal mengganti pada bagian else dan nama function.


Berikut function untuk PushTengah

void pushTail(struct data **head, struct data **tail, char name[], int age){

//function MemoryAssign

struct data *node = newNode(name, age);

//connect

if(*head == NULL){

*head = *tail = node;

}

else if(age < (*head)->age){

//pushHead

node->next = *head;

*head = node;

}

else if(age >= (*tail)->age){

//pushTail

(*tail)->next = node;

*tail = node;

}

else{

struct data *curr = *head;

while(age >= curr->next->age){

curr = curr->next;

}

node->next = curr->next;

curr->next = node;

}

}


Keterangan

1. Untuk PushTengah adalah sebuah function paling susah karena dia harus tau dimana function yang berada diantarannya. Perlu diketahui jika memasukan sebuah node yang sama misal antonio, 19 dan michael, 19 pada data tersebut memiliki umur yang sama maka program akan membaca antonio terlebih dahulu karena dia mengikuti urutan pada masuknya node.

2. Pada PushTengah juga menggunakan PushDepan dan PushBelakang.


POP Function / Delete Data

Jika tadi sudah mengetahui apa itu Push Function maka ada juga function Pop.

Pop biasa digunakan jika ingin menghapus data pada juga memiliki beberapa varian PopDepan, PopBelakang, PopAll dan PopTengah.

source code:


Berikut Function untuk PopDepan

void popHead(struct data **head, struct data **tail){

if(*head == NULL){

printf("No Data to Delete\n");

}

else if(*head == *tail){

free(*head);

*head = *tail = NULL;

}

else{

struct data *curr = *head;

*head = (*head)->next;

free(curr);

}

}


Berikut Function untuk PopBelakang

void popTail(struct data **head, struct data **tail){

if(*head == NULL){

printf("No Data to Delete\n");

}

else if(*head == *tail){

free(*head);

*head = *tail = NULL;

}

else{

struct data *curr = *head;

while(curr->next!= *tail){

curr= curr->next;

}

free(*tail);

*tail = curr;

(*tail)->next= NULL;

}

}


Berikut Function untuk PopAll

void popAll(struct data **head, struct data **tail){

struct data *curr = *head;

if(*head == NULL){

printf("No Data to Delete\n");

}

else{

while(curr!=NULL){

*head = (*head)->next;

free(curr);

curr = *head;

}

*head = *tail = NULL;

}

}


Function Print Data

setelah membuat semua function untuk Push dan Pop maka ada function untuk mengeprint datanya

source code:


void printData(struct data *head){

if(head==NULL){

printf("No Data\n");

}

else{

struct data *curr = head;

while(curr!=NULL){

printf("%s %d\n", curr->name, curr->age);

curr = curr->next;

}

}

}


Keterangan

1. Jika Head==NULL maka pada saat itu juga data yang akan ditampilkan kosong atau tidak ada.


Cara Deklarasi

int main(){

struct data *head=NULL;

struct data *tail=NULL;


printData(head);

//untuk PushDepan

pushHead(&head, &tail, "Antonio", 19);

//untuk PushTengah

pushMiddle(&head, &tail, "Michael", 38);

//untuk PushBelakang

pushTail(&head, &tail, "Kurninawan", 76);

//untuk printData

printData(head);

//untuk PopDepan

popHead(&head, &tail);

//untuk PopBelakang

popTail(&head, &tail);

//untuk PopAll

popAll(&head, &tail);

printData(head);


return 0;

}


Keterangan

1. untuk data nama dan age bisa tergantung user pada cara deklarasi diatas merupakan contoh.

2. Setiap data yang dibuat perlu diprint menggunakan function PrintData.



Nama : Antonio Michael Kurniawan

NIM : 2301924063

 
 
 

Comments


About  Me
 

Hello, My name is Antonio Michael Kurniawan. I am currently studying in binus majoring in game application and technology. In this blog I will post about the tasks about data structure.

  • Facebook
  • Twitter

© 2023 by Antonio Michael Kurniawan. Proudly created with Wix.com

Contact

You can contact me via email michaelkurniawan137@gmail.com

Thanks for submitting!

bottom of page