pertemuan kedua 03-03-2020

Hari ini saya diajarkan pengaplikasian linked list menggunakan bahasa pemrograman tertentu yaitu bahasa C. Dibutuhkan sebuah library tambahan yaitu <stdlib.h>.

Single Linked List
Inisialisasi struct yang dibutuhkan seperti dibawah ini
struct data{
int value;
struct data*next;
}*head=NULL,*tail,*curr;

Saya diajarkan fungsi push dan pop yang masing-masing bisa dari depan maupun belakang.
dibawah ini adalah source code untuk masing-masing push dan pop.

Push depan
void pushdepan(int x){
curr = (struct data*)malloc(sizeof(struct data));
curr->value=x;

if(head==NULL){//linked list kosong
head=tail=curr;
}
else{
curr->next = head;
        head = curr;
    }
    tail->next = NULL;

}

push belakang
void pushbelakang(int x){
curr = (struct data*)malloc(sizeof(struct data));
curr->value=x;

if(head==NULL){//linked list kosong
head=tail=curr;
}
else{
tail->next = curr;
        tail = curr;
    }
    tail->next = NULL;

}

Pop depan
void popdepan(){
    curr = head;
    
    if(tail == head){
        free(curr);
        tail = head = curr = NULL;
    }
    else
    {
        curr = curr->next;
        free(head);
        head = curr;
    }

}

Pop belakang
void popbelakang(){
    curr = head;
    
    if(tail == head){
        free(curr);
        tail = head = curr = NULL;
    }
    else
    {
        while(curr->next!=tail){
            curr = curr->next;
        }
        free(tail);
        tail = curr;
        tail->next = NULL;
    }
}

Double Linked List
Hampir sama seperti inisialisasi struct pada Single Linked List, pada Double Linked List ditambahkan parameter tambahan yaitu "prev" seperti dibawah ini
struct Data
{
    int value;
    struct Data *next,*prev;
}*head,*curr,*tail;

Saya juga diajarkan fungsi push dan pop. dibawah ini adalah source code untuk masing-masing push dan pop.

Push
void push(int a)
{
    curr = (struct Data*)malloc(sizeof(struct Data));
    curr->value = a;
    
    if(head==NULL){
        head = tail = curr;
    }
    else{
        tail->next = curr;
        curr->prev = tail;
        tail = curr;
    }
    head->prev = tail->next = NULL;

}

Pop
void pop()
{
    if(tail == head){
        free(curr);
        tail = head = curr = NULL;
    }
    else
    {
        tail = tail->prev;
        free(tail->next);
        tail->next = NULL;
    }
}

Comments