Pertemuan 8

Nama : Fakhrian Elanta

Kelas : Struktur Data D

Pertemuan : 8

Pertemuan 8

Linked List

Merupakan tipe data yang setiap datanya berkaitan dengan data selanjutnya  dan sebelumnya

Linked list sendiri terdapat beberapa jenis, yakni : 

  1. Singular linked list
Singular linked list merupakan tipe data yang di dalamnya data-datanya terhubung dengan next data, dan data terakhir terhubung dengan NULL

#include <bits/stdc++.h>
using namespace std;

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

Node* insert(Node* node, int val){
    Node* newNode = new Node();
    newNode->data = val;
    newNode->next = NULL;

    if(node == NULL){
        return newNode;
    }

    Node* temp = node;
    while(temp->next != NULL){
        temp = temp->next;
    }
    temp->next = newNode;

    return node;
}

void traversal(Node* node){
    Node* temp = node;
    while(temp != NULL){
        cout << temp->data << " -> ";
        temp = temp->next;
    }
   
    cout << "NULL\n";
}

int main(){
    Node* node = NULL;

    int n;
    cout << "Banyak data: ";
    cin >> n;

    while(n--){
        int x;
        cout << "Masukkan data: ";
        cin >> x;

        node = insert(node, x);
    }

    cout << "Visualisasi:\n";
    traversal(node);

    return 0;
}



2. Doubly linked list

Merupakan linked list yang terhubung ke data sebelum dan berikutnya

#include <bits/stdc++.h>
using namespace std;

struct Node{
    int data;
    Node* next;
    Node* prev;
};

Node* insert(Node* node, int val){
    Node* newNode = new Node();
    newNode->data = val;
    newNode->next = NULL;
    newNode->prev = NULL;

    if(node == NULL){
        return newNode;
    }

    Node* temp = node;
    while(temp->next != NULL){
        temp = temp->next;
    }

    temp->next = newNode;
    newNode->prev = temp;

    return node;
}

void forward(Node* node){
    Node* temp = node;
    while(temp != NULL){
        cout << temp->data << " <-> ";
        temp = temp->next;
    }

    cout << "NULL\n";
}

void backward(Node* node){
    if(node == NULL) return;

    Node* temp = node;
    while(temp->next != NULL){
        temp = temp->next;
    }

    while(temp != NULL){
        cout << temp->data << " <-> ";
        temp = temp->prev;
    }
    cout << "NULL\n";
}

int main(){
    Node* node = NULL;

    int n;
    cout << "Banyak data: ";
    cin >> n;

    while(n--){
        int x;
        cout << "Masukkan data: ";
        cin >> x;

        node = insert(node, x);
    }

    cout << "Visualisasi:\n";
    cout << "Forward: ";
    forward(node);
    cout << "Backward: ";
    backward(node);

    return 0;
}

3. Circular linked list

Merupakan linked list yang kembali ke data awal ketika sudah mencapai data terakhir

#include <bits/stdc++.h>
using namespace std;

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

Node* insert(Node* node, int val){
    Node* newNode = new Node();
    newNode->data = val;
    newNode->next = NULL;

    if(node == NULL){
        newNode->next = newNode;
        return newNode;
    }

    Node* temp = node;
    while(temp->next != node){
        temp = temp->next;
    }

    temp->next = newNode;
    newNode->next = node;

    return node;
}

void traversal(Node* node){
    if(node == NULL) return;

    Node* temp = node;
    do{
        cout << temp->data << " -> ";
        temp = temp->next;
    } while(temp != node);

    cout << "(Kembali ke head)\n";
}

int main(){
    Node* node = NULL;

    int n;
    cout << "Banyak data: ";
    cin >> n;

    while(n--){
        int x;
        cout << "Masukkan data: ";
        cin >> x;

        node = insert(node, x);
    }

    cout << "Visualisasi:\n";
    traversal(node);

    return 0;
}


Source code :github

Komentar

Postingan populer dari blog ini

overviewc++

Stack