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 :
- 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;
}
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
Posting Komentar