Anda di halaman 1dari 11

Tugas Personal ke-1

Week 3

Nama : Wahyu Affandi

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.

• popTail akan menghapus elemen yang berada paling akhir.

Data Structures
Berikut analogi yang menggambarkan operasi push dan pop.

Diberikan data awal linked list seperti berikut:

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.

Pada Circular Singly Linked List Terdapat 6 operasi yaitu :

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

• Next, yaitu pointer ke node selanjutnya pada list

Struktur sebuah node dapat dilihat pada kode

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!

Program tersebut memiliki pilihan(menu) sebagai berikut:

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.

3. Hapus data karyawan berdasarkan Employee ID

4. Hapus semua data karyawan

5. Keluar dari program.

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];

struct employee *next;

}*head, *tail, *current;

Data Structures
void pushHead(int nip, char nama[], char tempat[], char date[], char jabatan[]){

current = (struct employee*)malloc(sizeof(struct employee));

current->nip = nip;

strcpy(current->nama, nama);

strcpy(current->tempat, tempat);

strcpy(current->date, date);

strcpy(current->jabatan, jabatan);

if(head == NULL){

head = tail = current;

else{

current->next = head;

head = current;

void pushTail(int nip, char nama[], char tempat[], char date[], char jabatan[]){

current = (struct employee*)malloc(sizeof(struct employee));

current->nip = nip;

strcpy(current->nama, nama);

strcpy(current->tempat, tempat);

strcpy(current->date, date);

strcpy(current->jabatan, jabatan);

if(head == NULL){

head = tail = current;

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{

struct employee *temp=head;

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;

char nama[30], tempat[30],date[30], jabatan[50], hapustambah, pilihan, lagi;

awal:

system("clear");

printf("Masukkan Jumlah Data: "); scanf("%d", &jumlah);

for(i=1; i<=jumlah; i++){

printf("Masukkan data ke %d: \n", i);

printf("NIP: "); scanf("%d", &nip);

printf("Nama: "); scanf("%s", nama);

printf("Tempat Lahir: "); scanf("%s", tempat);

printf("Tanggal Lahir (DDMMYYYY): "); scanf("%s", &date);

printf("Jabatan: "); scanf("%s", jabatan);

if(i == 1){

pushHead(nip, nama, tempat, date, jabatan);

} else{

printf("Masukkan data ke Depan atau Belakang? (d untuk depan, b untuk belakang): ");

scanf("%s", &pilihan);

if(pilihan == 'd'){

pushHead(nip, nama, tempat, date, jabatan);

} else{

pushTail(nip, nama, tempat, date, jabatan);

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 %d: \n", i);

printf("NIP: "); scanf("%d", &nip);

printf("Nama: "); scanf("%s", nama);

printf("Tempat Lahir: "); scanf("%s", tempat);

printf("Tanggal Lahir: "); scanf("%s", &date);

printf("Jabatan: "); scanf("%s", jabatan);

printf("Masukkan data ke Depan atau Belakang? (d untuk depan, b untuk belakang): ");

scanf("%s", &pilihan);

if(pilihan == 'd'){

pushHead(nip, nama, tempat, date, jabatan);

} else{

pushTail(nip, nama, tempat, date, jabatan);

} else{

printf("Hapus Depan atau Belakang? (d untuk depan, b untuk belakang) ");

scanf("%s", &pilihan);

if(pilihan == 'd'){

popHead();

} else{

popTail();

Data Structures
print();

printf("Mau Menambah Data? (y untuk nambah, n untuk tidak) ");

scanf("%s", &lagi);

if(lagi == 'y'){

goto awal;

} else{

goto akhir;

akhir:

getchar();

return 0;

Data Structures
Output :

Data Structures

Anda mungkin juga menyukai