Anda di halaman 1dari 6

TIF 2301: Struktur Data & Algoritma Sem.

Ganjil 2017

Kuliah 3: Linked Lists


Dosen : Sawaluddin

3.1 Membangun dan Menghapus Node dari Lists:


Kerangka dasar dari singly-linked list sudah selesai pada kuliah 2 sebelumnya. Sekarang
saatnya untuk melakukan beberapa operasi lain dalam list. Pada dasarnya, dua operasi
dilakukan pada linked list:

• Menyisip (Insertion)

• Menghapus(Deletion)

Menyisip:
Memasukkan node baru dalam linked list disebut insertion. Sebuah node baru dibuat dan
dimasukkan ke dalam linked list.
Ada tiga kasus yang dipertimbangkan saat memasukkan sebuah node:

• Menyisip diawal

• Menyisip diakhir

• Menyisip pada posisi tertentu

Menyisip diawal:
Menyisip node baru cukup sederhana. Ini hanya memerlukan algoritma 2 langkah yang
dilakukan untuk memasukkan node di awal dari singly linked list.

• Node baru harus dihubungkan ke node pertama, yang berarti kepala. Hal ini dapat
dicapai dengan meletakkan alamat kepala pada field berikutnya dari node baru.

• Node baru harus dianggap sebagai kepala. Hal ini dapat dicapai dengan menyatakan
kepala sama dengan node baru.

3-1
3-2 Lecture 3: Linked Lists

insertdiAwal(value) tambahkan sebuah node baru value kedalam list L. Node value di
sisipkan diawal list, making T (n) = Θ(1). Disini, temp adalah suatu node baru yang di
create akan sisipkan ke awal list. Implementasinya seperti ini:

insertdiAwal(value)
1 Node∗temp =new Node
2 temp- > key =value
3 temp- > next =head
4 head =temp

Menyisip diakhir:
Penyisipan sebuah node pada akhir linked list sama dengan yang kita lakukan pada fungsi
pembuatan node. Jika Anda perhatikan kemudian, kita memasukkan node yang baru dibuat
di akhir linked list. Jadi proses ini sama. lihat algoritma createNode.
Menyisip pada posisi tertentu:
Penyisipan node baru pada posisi tertentu agak sulit dipahami. Dalam kasus ini, kita tidak
mengganggu kepala dan ekor. Sebaliknya, sebuah node baru disisipkan di antara dua node
berturut-turut. Jadi, kedua node ini harus bisa diakses oleh kode kita. Kita sebut yang
satu node current dan yang lainnya node previous, dan node baru ditempatkan di antara
keduanya. Proses ini ditunjukkan pada diagram di bawah ini:
Sekarang node baru dapat disisipkan antara node previous dan current dengan hanya melakukan
dua langkah:

• Pass address node baru field berikutnya dari node previous.

• Pass address node current di field berikutnya dari node baru.

Kita akan mengakses node ini dengan meminta user pada posisi apa dia ingin memasukkan
node baru. Sekarang, kita akan memulai sebuah loop untuk mencapai node tertentu. Kita
menginisialisasi node current dengan head dan bergerak melintasi linked list. Pada akhirnya,
kita akan menemukan dua node berturut-turut.
Algoritma untuk penyisipan node adalah sebagai berikut:
Lecture 3: Linked Lists 3-3

insertPosisi(pos, value)
1 Node∗prev =new Node
2 Node∗curr =new Node
3 Node∗temp =new Node
4 curr =head
5 while i ≤pos
6 prev =curr
7 curr =curr - > next
8 i =i + 1
9 temp- > key =value
10 prev - > next =temp
11 temp- > next =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 diakhir:


Lihat kembali kuliah 2, sebelumnya.
Menghapus node pada posisi tertentu:
Dalam linked list, kita boleh menghapus node tertentu. Proses penghapusan itu seder-
hana. 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,
3-4 Lecture 3: Linked Lists

kita menghapus node kita saat ini dan meneruskan alamat simpul setelah ke pointer se-
belumnya. 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

Searching (Pencarian):
listSearch(k) mencari nilai key k dalam linear list L. Karena dimulai dari awal dari list
dan dan terus diperiksa masing-masing node sampai akhir, T (n) = Θ(n). Disini, temp
menyatakan “link” objek dalam list. Implementasi untuk linear list adalah seperti berikut:

listSearch(k)
1 temp =head
2 while x 6= nil and temp- > key 6= k
3 temp =temp- > next
4 return temp

Implementasi dengan C++ sebagai berikut:


Tambahkan code berikut kedalam program list2.cpp sebelumnya.

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;
Lecture 3: Linked Lists 3-5

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

dan code main-nya sbb:

int main() {
list p ;

cout << "Create linked list dengan elemen: " << endl;
p.createNode(50);
3-6 Lecture 3: Linked Lists

p.createNode(60);
p.createNode(70);
p.createNode(80);
p.display();
cout << "Hapus node akhir: " << endl ;
p.deleteLast();
p.display();
cout << "Create node baru:95 " << endl;
p.createNode(95);
p.display();
cout << "Insert diawal: " << endl ;
p.insertdiAwal(65) ;
p.display() ;
cout << "Insert pada posisi 3: " << endl ;
p.insertPosisi(3,88);
p.display() ;
cout << "Hapus node diawal: " << endl ;
p.deleteFirst() ;
p.display() ;
cout << "Hapus pada posisi 3: " << endl ;
p.deletePosisi(3);
p.display() ;
return 0 ;
}

Anda mungkin juga menyukai