Review Single Linked List
- 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