Week 3
NIM : 2502157950
Soal Review
1. Uraikan pengertian singly linked list? Ilustrasikan cara membuat singly linked list!
2. Uraikan pengertian circular singly linked list? Ilustrasikan cara membuat circular singly
linked list!
3. Uraikan perbedaan antara singly linked list dan circular linked list!
Jawaban :
1. Single Linked List merupakan linked list yang hanya punya satu variabel pointer saja,
dan variabel ini menunjuk pada node selanjutnya. Pada single linked list ada satu variabel
pointer yang dijadikan sebagai acuan, atau referensi, yaitu pointer Head, yang menunjuk
pada node pertama pada suatu linked list.
Ada 2 (dua) operasi pada single linked list, yaitu push dan pop.
a. Push merupakan operasi untuk menambahkan suatu record data pada suatu linked list.
Ada dua operasi push, ada dua buah aksi, yaitu pushHead dan pushTail.
• pushHead adalah suatu aksi menambahkan elemen baru pada single linked list
dimana elemen tersebut diletakkan pada posisi terdepan atau paling awal.
• pushTail adalah aksi menambahkan elemen baru dalam suatu single linked list
dengan posisi paling akhir.
b. Pop merupakan kebalikan dari operasi push, yaitu menghapus elemen pada suatu
single linked list. Ada dua aksi, yaitu popHead dan popTail.
• popHead adalah aksi untuk menghapus elemen linked list yang berada diurutan
pertama.
Data Structures
Berikut analogi yang menggambarkan operasi push dan pop.
Kemudian dilakukan aksi pushHead dengan data 2, sehingga data 2 akan menjadi
Head yang baru, maka akan menjadi:
Kemudian dilakukan aksi popTail, sehingga data dengan nilai 6 akan menghilang,
dan data dengan nilai 3 akan menjadi Tail yang baru:
2. Circular Singly Linked List adalah variasi singly linked list yang berbentuk melingkar..
Bentuk melingkar ini memberikan konsekuensi tidak adanya field next yang bernilai null.
Field Next elemen terakhir pada circular singly, linked list akan bernilai sama dengan
nilai awal list sehingga akan ada anak panah yang berasal dari field next elemen terakhir
menuju field info elemen pertama.
a. Menyisip di belakang
b. Menyisip di tengah
c. Menyisip di depan
d. Menghapus di belakang
e. Menghapus di tengah
f. Menghapus di depan
Pada Circular Singly Linked List node terakhir pada list akan menunjuk pada node
pertama. Sehingga akan terbentuk seperti lingkaran yang saling terhubung.
Data Structures
Node (elemen) circular linked list saling berkait melalui pointer. Bagian next sebuah
node menunjuk alamat node selanjutnya. pList: pointer yang menunjuk salah satu node
pada list. Node terakhir menunjuk node pertama. Setiap node terdiri atas:
• Isi data
struct node {
//bagian data
tipedata data 1;
tipedata data 2;
…
tipedata data n;
//pointer ke node selanjutnya
struct node *next;
}; typedef struct node node;
Deklarasi pList diperlukan sebelum membuat circular linked list, yaitu pointer yang
menunjuk salah satu node dari circular linked list.
3. Perbedaan antara Circular Singly Linked List dengan Singly Linked List yakni, Circular
Singly Linked List merupakan suatu linked list dimana tail menunjuk ke head. Jadi, tidak
ada pointer yang menunjuk NULL. Sedangkan pada Singly Linked List merupakan suatu
linked list yang hanya memiliki satu variabel pointer saja.
Data Structures
Soal Case
Buatlah sebuah program database sederhana dengan menggunakan singly linked list!
1. Push data karyawan. Ketika dijalankan, akan diminta input berupa Employee ID, Nama
Lengkap, Tempat Lahir, Tanggal Lahir, dan Jabatan. Validasi Employee ID maksimal 5
angka, Nama Lengkap dan Tempat lahir maksimal 30 karakter, dan Jabatan maksimal 50
karakter. Validasi jumlah data yang dapat diinput adalah maksimal 5 data.
2. Menampilkan semua daftar Karyawan di database terdiri dari Employee ID, Nama
Lengkap, Tempat Tanggal Lahir, dan Jabatan. Data karyawan ditampilkan secara terurut
(sort) berdasarkan Employee ID.
Jawaban :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct employee{
int nip;
char nama[30];
char tempat[30];
char date[30];
char jabatan[50];
Data Structures
void pushHead(int nip, char nama[], char tempat[], char date[], char jabatan[]){
current->nip = nip;
strcpy(current->nama, nama);
strcpy(current->tempat, tempat);
strcpy(current->date, date);
strcpy(current->jabatan, jabatan);
if(head == NULL){
else{
current->next = head;
head = current;
void pushTail(int nip, char nama[], char tempat[], char date[], char jabatan[]){
current->nip = nip;
strcpy(current->nama, nama);
strcpy(current->tempat, tempat);
strcpy(current->date, date);
strcpy(current->jabatan, jabatan);
if(head == NULL){
Data Structures
}
else{
tail->next = current;
tail = current;
tail->next = NULL;
void popHead(){
current=head;
if(head==NULL){
printf("No data");
}else if(head==tail){
head=tail=NULL;
free(current);
}else{
head=head->next;
free(current);
void popTail(){
if(head==NULL){
printf("No data");
}else if(head==tail){
Data Structures
head=tail=NULL;
free(current);
}else{
while(temp->next!=tail){
temp=temp->next;
current=tail;
tail=temp;
free(current);
tail->next=NULL;
void print(){
current = head;
while(current != NULL){
printf ("NIP : %d\n Nama :%s\n Tempat Lahir : %s\n Tanggal Lahir : %s\n Jabatan :
%s\n ",current->nip,current->nama,current->tempat,current->date,current->jabatan);
current = current->next;
int main(){
Data Structures
int jumlah, i, nip;
awal:
system("clear");
if(i == 1){
} else{
printf("Masukkan data ke Depan atau Belakang? (d untuk depan, b untuk belakang): ");
scanf("%s", &pilihan);
if(pilihan == 'd'){
} else{
print();
Data Structures
printf("Mau Menghapus atau Menambah Data? (y untuk nambah, n untuk hapus) ");
scanf("%s", &hapustambah);
if(hapustambah == 'y'){
printf("Masukkan data ke Depan atau Belakang? (d untuk depan, b untuk belakang): ");
scanf("%s", &pilihan);
if(pilihan == 'd'){
} else{
} else{
scanf("%s", &pilihan);
if(pilihan == 'd'){
popHead();
} else{
popTail();
Data Structures
print();
scanf("%s", &lagi);
if(lagi == 'y'){
goto awal;
} else{
goto akhir;
akhir:
getchar();
return 0;
Data Structures
Output :
Data Structures