Anda di halaman 1dari 10

STRUKTUR DATA DAN ALGORITMA

DISUSUN OLEH :

Muhammad Wahyu Pratama (171402032)


Muhammad Syafriansyah (171402068)
Alwi Arfizein Lubis (171402101)
Firda Mega Tasya Siregar (171402113)
Arnesa Julia Damanik (171402125)

KOM B
TEKNOLOGI INFORMASI
FAKULTAS ILMU KOMPUTER DAN TEKNOLOGI INFORMASI
UNIVERSITAS SUMATERA UTARA
MEDAN
Linked List
Linked List atau dikenal juga dengan sebutan senarai berantai adalah struktur data yang terdiri dari
urutan record data dimana setiap record memiliki field yang menyimpan alamat/referensi dari record
selanjutnya (dalam urutan). Elemen data yang dihubungkan dengan link pada Linked List disebut Node.
Biasanya didalam suatu linked list, terdapat istilah head dan tail.
 Head adalah elemen yang berada pada posisi pertama dalam suatu linked list

 Tail adalah elemen yang berada pada posisi terakhir dalam suatu linked list

Ada beberapa macam Linked List, yaitu :


1. Single Linked List
2. Double Linked List
3. Circular Linked List
4. Multiple Linked List

 Single Linked List


Single Linked List merupakan suatu linked list yang hanya memiliki satu variabel pointer saja. Dimana
pointer tersebut menunjuk ke node selanjutnya. Biasanya field pada tail menunjuk ke NULL.
contoh codingannya :
struct Mahasiswa{
char nama[25];
int usia;
struct Mahasiswa *next;
}*head,*tail;

 Double Linked List


Double Linked List merupakan suatu linked list yang memiliki dua variabel pointer yaitu pointer yang
menunjuk ke node selanjutnya dan pointer yang menunjuk ke node sebelumnya. Setiap head dan tailnya
juga menunjuk ke NULL.
contoh :

contoh codingannya :
struct Mahasiwa{
char nama[25];
int usia;
struct Mahasiswa *next,*prev;
}*head,*tail;

 Circular Linked List


Circular Linked List merupakan suatu linked list dimana tail (node terakhir) menunjuk ke head (node
pertama). Jadi tidak ada pointer yang menunjuk NULL. Ada 2 jenis Circular Linked List, yaitu :
 Circular Single Linked List

 Circular Double Linked List


 Multiple Linked List
Multiple Linked List merupakan suatu linked list yang memiliki lebih dar 2 buat variabel pointer. contoh :

 Mendeklarasikan Node
Linked list terdiri dari node, kita perlu mendeklarasikan sebuah struktur yang mendefenisikan
sebuah node tunggal. Struktur kita harus memiliki setidaknya satu variabel untuk bagian data dan pointer
untuk node berikutnya. Dalam C++ suatu node dideklarasi dengan cara:
struc Node {
int key ;
Node* next ;
};
atau
class Node {
int key ;
Node* next ;
};
 NULL Pointer
NULL pointer digunakan untuk menunjukkan akhir dari list. Akan selalu di uji (tested) sebelum
menggunakan pinter.

Node* p ;
while( p != NULL ) ......

atau dengan cara yang berikut, keduanya sama.

Node* p ;
while( !p ) ......
 Menghapus Node dari Lists
Jika sudah terbiasa dengan membuat linkedlist. Sekarang, saatnya melakukan manipulasi pada
linked list. Linked lists memberi kita _tur yang bagus untuk menghapus sebuah node. Proses penghapusan
juga mudah diterapkan. Struktur dasarnya adalah mendeklarasikan pointer sementara yang menunjuk node
yang akan dihapus. Lalu sedikit bekerja pada link dari node. Ada juga tiga kasus di node simpul dapat
dihapus :

_ Menghapus diakhir
_ Menghapus diawal
_ Menghapus pada posisi tertentu

 Menghapus Node diakhir


Menghapus node terakhir agak sulit dipahami dibanding node pertama. Dalam kasus node pertama,
Anda hanya memerlukan akses ke kepala dan Anda dapat menghapusnya. Tapi dalam kasus node terakhir,
Anda juga memerlukan akses ke node kedua dari node terakhir. dari linked list karena Anda akan
menghapus node terakhir dan membuat node sebelumnya sebagai tail linked list.
Algoritma harus mampu menemukan node yang datang sebelum node terakhir. Hal ini dapat
dicapai dengan melintasi linked list. Buat dua pointer sementara dan misalkan mereka bergerak melalui
seluruh linked list. Pada akhirnya, node sebelumnya akan menunjuk ke node kedua ke node terakhir dan
node saat ini akan menunjuk ke node terakhir, yaitu node yang akan dihapus. Kita akan menghapus node
ini dan membuat node sebelumnya sebagai tail.

deleteLast()
1 Node _ curr =new Node
2 Node _ prev =new Node
3 curr =head
4 while (curr- > next 6=NULL)
5 prev =curr
6 curr =curr- > next
7 tail =prev
8 prev- > next =NULL
9 delete curr
 Menghapus node diawal
Dalam kasus ini, node pertama dari linked list akan dihapus. Ingat bahwa node pertama disebut
kepala. Jadi, kita akan menghapus node kepala. Proses penghapusan meliputi :
_ Declare a temp pointer and pass the address of the first node, i.e. head to this pointer.
_ Declare the second node of the list as head as it will be the first node of linked list
after deletion.
_ Delete the temp node.
Algoritma untk proses ini adalah sebagai berikut:
deleteFirst()
1 Node_temp =new Node
2 temp =head
3 head =head- > next
4 delete temp

 Menghapus node pada posisi tertentu


Dalam linked list, kita boleh menghapus node tertentu. Proses penghapusan itu sederhana. Disini
kita tidak menggunakan head dan tail node. Kami meminta pengguna untuk memasukkan posisi simpul
yang akan dihapus. Setelah itu, kita hanya memindahkan dua petunjuk sementara melalui linked list sampai
kita mencapai node spesifik kita. Sekarang, kita menghapus node kita saat ini dan meneruskan alamat
simpul setelah ke pointer sebelumnya. Dengan cara ini, node saat ini dihapus dari linked list dan link dibuat
antara node sebelumnya dan node berikutnya.
Algoritma untuk proses ini adalah sebagai berikut:
deletePosisi(pos)
1 Node_curr =new Node
2 Node_prev =new Node
3 curr =head
4 while i _pos
5 prev =curr
6 curr =curr- > next
7 i =i + 1
8 prev- > next =curr- > next
 Implementasi dengan C++ sebagai berikut :

#include <iostream>
using namespace std ;
// name of file:link_list.cpp
struct Node {
int key;
Node *next;
};
class Link_list {
private:
Node *head, *tail;

public:

Link_list() {
head=NULL;
tail=NULL;
}
void createNode(int value) {
Node *temp=new Node;
temp->key=value;
temp->next=NULL;
if(head==NULL) {
head=temp;
tail=temp;
temp=NULL;
}
else {
tail->next=temp;
tail=temp;
}
} // end of createnode
void insertdiAwal(int value){
Node *temp=new Node;
temp->key=value;
temp->next=head;
head=temp;
} // end of insertdiAwal
void insertPosisi(int pos, int value){
Node *prev=new Node;
Node *curr=new Node;
Node *temp=new Node;
curr=head;
int i = 1 ;
while ( i <= pos ) {
prev=curr;
curr=curr->next;
i = i + 1 ;
}
temp->key=value;
prev->next=temp;
temp->next=curr;
} // end of insertPosision

void deleteFirst() {
Node *temp=new Node;
temp=head;
head=head->next;
delete temp;
} // end of deleteFirst
void deletePosisi(int pos) {
Node *curr = new Node;
Node *prev = new Node;
curr = head;
int i = 1 ;
while( i < pos ) {
prev = curr ;
curr = curr->next;
i = i + 1 ;
}
prev->next=curr->next;
} // end of deletePosisi
void deleteLast() {
Node *curr, *prev ;

curr=head;
while(curr->next!=NULL) {
prev=curr ;
curr=curr->next;
}
tail=prev;
prev->next=NULL;
delete curr;
} //end deleteLast
void display() {
Node *temp= head;
//temp=head;
while(temp!=NULL) {
cout<<temp->key<<"\t";
temp=temp->next;
}
cout << endl;
} // end of display

};

int main() {
Link_list p ;
int i, v;

cout << "Elemen-elemen pada link list : " << endl;


p.createNode(10);
p.createNode(20);
p.createNode(30);
p.createNode(40);
p.display();
cout << "Delete node akhir: " << endl ;
p.deleteLast();
p.display();
cout << "Create node baru: " ; cin >> v;
p.createNode(v);
p.display();
cout << "Insert node diawal: "; cin >> v;
p.insertdiAwal(v) ;
p.display() ;
cout << "Insert node pada posisi : " << endl ; cout << "Posisi :
"; cin>>i; cout << "Nilai : "; cin>>v;
p.insertPosisi(i, v);
p.display() ;
cout << "Delete node diawal: " << endl ;
p.deleteFirst() ;
p.display() ;
cout << "Delete node pada posisi : " ; cin>>i;
p.deletePosisi(i);
p.display() ;
return 0 ;
}

Keterangan :
Pada contoh program diatas, menerapkan metode Link List yang terdapat di dalamnya fungsi
Create Node, Insert Node dan Delete Node. Pada fungsi Create Node, dimana kita definisikan head (bagian
awal node) sebagai NULL, NULL diartikan sebagai list yang masih kosong begitu juga dengan tail (bagian
akhir node).
Mengapa nilai node dapat bertambah? Sesuai pada source code diatas, bahwasanya kita telah
deklarasikan “key” sebagai integer. Kita inisialisasi atau beri nilai pada node dan set pointer tersebut . Dan
apabila kita ingin menambah 1(satu) node kita harus membuat source code dimana Node *pointer = new
Node, seperti pada kodingan dibawah ini :

void createNode(int value) {


Node *temp=new Node;
temp->key=value;
temp->next=NULL;
.........................................

int main() {
list p ;
cout << "Elemen-elemen pada link list: " << endl;
p.createNode(10);
p.createNode(20);
p.createNode(30);
p.createNode(40);
p.display();
.........................................

Anda mungkin juga menyukai