Blog information
Category: Kuliah
Posted By: AglaBridgeMedia
Post date: 06 Oct 2020
Keywords: single linked list bahasa c, penerapan single linked list bahasa c, penerapan linked list bahasa c, contoh linked list bahasa c aglabridgemedia
Views: 2152
Contoh Program Single Linked List Menggunakan Bahasa C
Assalamualaikum Wr. Wb.
Pada kesempatan yang lalu, kita sudah membahas tentang Single Linked List dan contoh penerapan sederhana menggunakan Bahasa C. Jika teman-teman belum membacanya, silakan menuju ke sini untuk bisa membaca dan mempelajari apa itu single linked list beserta contohnya. Pada kesempatan kali ini, saya akan memberikan contoh penerapan sederhana yang lain dari single linked list, menggunakan Bahasa C tentunya. Skenario kali ini adalah menyimpan dan menampilkan data single linked list dari data karyawan, meliputi Nama, Jenis Kelamin, Kota, Status Karyawan (Tetap/Tidak Tetap), Status Kawin (Kawin/Tidak Kawin) dan Umur. Nah langsung saja simak kode programnya sebagai berikut ya.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct karyawan{
char nama[30]; //menampung karakter nama karyawan
int jenis_kelamin; //menampung jenis kelamin karyawan
char kota[30]; //menampung karakter kota karyawan
int status_karyawan; //menampung status karyawan
int status_kawin; //menampung status kawin karyawan
int umur; //menampung integer umur karyawan
struct karyawan *next; //menampung alamat data selanjutnya
}*head, *tail, *current;
//head => pointer yang menyimpan alamat data pertama
//tail => pointer yang menyimpan alamat data terakhir
//current => pointer yang digunakan sebagai temporary variabel
void pushHead(char nama[], int jenis_kelamin, char kota[], int status_karyawan, int status_kawin, int umur){
//alokasi memory untuk data baru
current = (struct karyawan*)malloc(sizeof(struct karyawan));
strcpy(current->nama, nama); //copy nilai variabel parameter nama ke current->nama
current->jenis_kelamin = jenis_kelamin; //assign data ke dalam struct
strcpy(current->kota, kota); //copy nilai variabel parameter kota ke current->kota
current->status_karyawan= status_karyawan; //assign data ke dalam struct
current->status_kawin= status_kawin; //assign data ke dalam struct
current->umur = umur; //assign data ke dalam struct
if(head == NULL){ //jika nilai head adalah null, maka set head = tail = current
head = tail = current; //set nilai head = tail = current
}
else{ //jika nilai head tidak null, maka
current->next = head; //set nilai current->next = head
head = current; //kemudian set nilai head = current
}
}
void pushTail(char nama[], int jenis_kelamin, char kota[], int status_karyawan, int status_kawin, int umur){
current = (struct karyawan*)malloc(sizeof(struct karyawan)); //alokasi memory untuk data baru
strcpy(current->nama, nama); //copy nilai variabel parameter nama ke current->nama
current->jenis_kelamin = jenis_kelamin; //assign data ke dalam struct
strcpy(current->kota, kota); //copy nilai variabel parameter kota ke current->kota
current->status_karyawan= status_karyawan; //assign data ke dalam struct
current->status_kawin= status_kawin; //assign data ke dalam struct
current->umur = umur; //assign data ke dalam struct
if(head == NULL){ //jika nilai head adalah null, maka set head = tail = current
head = tail = current; //set nilai head = tail = current
}
else{ //jika nilai head tidak null, maka
tail->next = current; //set nilai tail->next = current
tail = current; //kemudian set nilai tail = current
}
tail->next = NULL; //kemudian set nilai tail menjadi null
}
void popHead(){
current=head; //set nilai current sebagai head
if(head==NULL){ //jika head bernilai null
printf("No data"); //tampilkan info tidak ada data
}else if(head==tail){ //jika nilai head = tail
head=tail=NULL; //set nilai head = tail = null
free(current); //hapus nilai current (head)
}else{ //jika nilai head bukan null dan bukan tail
head=head->next; //set nilai head menjadi data selanjutnya dari head
free(current);// hapus nilai current (head)
}
}
void popTail(){
if(head==NULL){ //jika nilai head = null
printf("No data"); //tampilkan info tidak ada data
}else if(head==tail){ //jika nilai head = tail
head=tail=NULL; //set nilai head = tail = null
free(current); //hapus nilai current
}else{ //jika nilai head bukan null dan bukan tail
struct karyawan *temp=head; //buat variabel penampung baru dan assign/beri nilai mulai dari head
while(temp->next!=tail){ //looping untuk mencari posisi 1 data sebelum tail
temp=temp->next; //set nilai temp menjadi 1 data setelahnya
}
current=tail; //set nilai current menjadi tail
tail=temp; //set nilai tail menjadi 1 data sebelum tail (hasil looping)
free(current); //hapus nilai current
tail->next=NULL; //set nilai setelah next menjadi null/pointer next punya tail diset null
}
}
void print(){
char *jk, *status, *statKawin;
current = head; //set current sebagai head
while(current != NULL){ //looping selama current bukan null
if(current->jenis_kelamin == 1){
jk = "Laki-laki";
} else if(current->jenis_kelamin == 0){
jk = "Perempuan";
} else{
jk = "Bukan Manusia";
}
if(current->status_karyawan == 1){
status = "Tetap";
} else if(current->status_karyawan == 0){
status = "Tidak Tetap";
} else{
status = "Bukan Karyawan";
}
if(current->status_kawin == 1){
statKawin = "Kawin";
} else{
statKawin = "Tidak Kawin";
}
printf("Nama: %s \t Jenis Kelamin: %s \t Kota: %s \t Status Karyawan: %s \t Status Kawin: %s \t Umur: %d \n",current->nama, jk, current->kota, status, statKawin, current->umur); //tampilkan data karyawan
current = current->next; //set current menjadi nilai setelahnya
}
}
int main(){
int jumlah, i, jk, status_karyawan, status_kawin, umur;
char nama[30], kota[30], 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("Nama: "); scanf("%s", nama);
printf("Jenis Kelamin (1 untuk Laki-laki, 0 untuk Perempuan): "); scanf("%d", &jk);
printf("Kota: "); scanf("%s", kota);
printf("Status Karyawan (1 untuk Tetap, 0 untuk Tidak Tetap): "); scanf("%d", &status_karyawan);
printf("Status Kawin (1 untuk Kawin, 0 untuk Tidak Kawin): "); scanf("%d", &status_kawin);
printf("Umur: "); scanf("%d", &umur);
if(i == 1){
pushHead(nama, jk, kota, status_karyawan, status_kawin, umur);
} else{
printf("Masukkan data ke Depan atau Belakang? (d untuk depan, b untuk belakang): ");
scanf("%s", &pilihan);
if(pilihan == 'd'){
pushHead(nama, jk, kota, status_karyawan, status_kawin, umur);
} else{
pushTail(nama, jk, kota, status_karyawan, status_kawin, umur);
}
}
}
print();
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("Nama: "); scanf("%s", nama);
printf("Jenis Kelamin (1 untuk Laki-laki, 0 untuk Perempuan): "); scanf("%d", &jk);
printf("Kota: "); scanf("%s", kota);
printf("Status Karyawan (1 untuk Tetap, 0 untuk Tidak Tetap): "); scanf("%d", &status_karyawan);
printf("Status Kawin (1 untuk Kawin, 0 untuk Tidak Kawin): "); scanf("%d", &status_kawin);
printf("Umur: "); scanf("%d", &umur);
printf("Masukkan data ke Depan atau Belakang? (d untuk depan, b untuk belakang): ");
scanf("%s", &pilihan);
if(pilihan == 'd'){
pushHead(nama, jk, kota, status_karyawan, status_kawin, umur);
} else{
pushTail(nama, jk, kota, status_karyawan, status_kawin, umur);
}
} else{
printf("Hapus Depan atau Belakang? (d untuk depan, b untuk belakang) ");
scanf("%s", &pilihan);
if(pilihan == 'd'){
popHead();
} else{
popTail();
}
}
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;
}
blog comments powered by Disqus
Popular Posts
- Binary Tree dan Contoh Program Sederhana Menggunakan Bahasa C
- SIngle Linked List dan Contoh Penerapan dalam Bahasa C
- Contoh Program Menghitung Faktorial Dengan Bahasa C
- Contoh Program Membuat Pola Bentuk Hati Dengan Bahasa C
- Hubungan Pointer dengan Array, String, Fungsi dan Pointer Lain
