ZDIRY-TUFWT-EBONM-EYJ00-IDBLANTER.COM
ZDIRY-TUFWT-EBONM-EYJ00
BLANTERWISDOM105

Cara membuat Link List di bahasa C

Monday, May 6, 2019
Hallo apa kabar semuanya. pada kesempatan kali ini sakan akan sedikit berbagi tentang bagaimana cara kita membuat LinkList pada bahasa C. Penjelasan kali ini mungkin akan sedikit rumit ya. karena codingan saya masukan di dalam artikel ini sangatlah panjang tolong teman-teman teliti dengan codingan di bawa ini yaa.

Oke saya akan jelaskan sedikit tentang bagaimana ptoses kerja codingan di bawa ini. Mungkin saya tidak akan menjelaskan terlalu panjang lebar, Karna codingan ini terlalu panjang teman-teman cukup copy saja dan pahami sendiri.
Link List merupakan Structur data yang bertipe sama yang terdiri dari sekumpulan node yang secara bersama-sama mempresentasikan sebiah urutan. Linkked list juga di sebut sebuah metode untuk menyimpan data dengan terstructur sehingga dapat secara otomatis menciptakan suatu tempat di memory untuk menyimpan data yang di butuhkan.

Ada beberapa Jenis dari Linked List sendiri, Antara lain :
  1. Single Linked list
  2. Double Linked list
  3. Circular Linked list
Gambar di bawah ini merupakan ilusrator Structtur Linked list :


Jika kita melihat gambar di atas kita akan melihat ada 4 buah Structur node, yang masing-masing menyimpan data dengan 10 - 20 - 30 dan 40. Pada setiap Pointer ke-1 berisi Structur node ke-2, kemudian pada Pointer ke-2 berisi Sructur noe ke-3, begitu juga pada Pointer ke-3 akan beisi angka di bawanya yaitu node ke-4.
Sedangkan untuk Structur pointer node ke-4 akan berisi NULL, hal ini terjadi karena dia menunjukan bahwa Node ke-4 berada pada akhir rangkain.

Untuk Structur Node sendiri seperti di bawah ini

Structur node{
   int data;
structur node *p;
};

Berikut contoh codingan Linked List pada bahasa c.

CODINGAN
 #include <stdio.h>

#include <stdlib.h>

#include <conio.h>

#include <string.h>


int i, j, count;


struct DATA{

char nama[100];

char kode[20];

char asal[100];

int umur;

char dpt[100];

struct DATA *next;

};


struct DATASEARCH{

char nama[100];

char kode[20];

char asal[100];

int umur;

char dpt[100];

struct DATASEARCH *nextsearch;

};


struct arr{

char nama[100];

char kode[20];

char asal[100];

int umur;

char dpt[100];

}a[1000];


void menu(){

system("@cls");

printf("\t=====================================\n");

printf("\t|| DATABASE KARYAWAN ||\n");

printf("\t|| 1. MEMBUAT DATABASE KARYAWAN ||\n");

printf("\t|| 2. TAMPILKAN DATA KARYAWAN ||\n");

printf("\t|| 3. TAMBAHKAN DATA KARYAWAN ||\n");

printf("\t|| 4. HAPUS DATA KARYAWAN ||\n");

printf("\t|| 5. EDIT DATA KARYAWAN ||\n");

printf("\t|| 6. CARI DATA KARYAWAN ||\n");

printf("\t|| 7. HISTORY CARI DATA ||\n");

printf("\t|| 8. SORTING DATA KARYAWAN ||\n");

printf("\t|| 9. AUTHORS ||\n");

printf("\t|| 10. EXIT ||\n");

printf("\t=====================================\n");

printf("\tMasukan Pilihan Anda : ");

}


void append(struct DATA **head){

struct DATA *new_node = (struct DATA*) malloc(sizeof(struct DATA));

printf("\n");

printf("\tInput Nama : "); scanf("%s", &new_node->nama);

printf("\tInput Kode Karyawan : "); scanf("%s", &new_node->kode);

printf("\tInput Asal : "); scanf("%s", &new_node->asal);

printf("\tInput Umur : "); scanf("%d", &new_node->umur);

printf("\tInput Departemen : "); scanf("%s", &new_node->dpt);

printf("\n");

new_node->next = NULL;

struct DATA *last = *head;

if(*head == NULL){

*head = new_node;

return;

}

while(last->next != NULL){

last = last->next;

}

last->next = new_node;

return;

}


void create(struct DATA **head){

int n;

printf("\tMasukan Jumlah Karyawan : ");

scanf("%d", &n);

for(i = 0; i < n; i++){

append(head);

}


}

void view(struct DATA *node){

int i = 1;

while(node != NULL){

printf("\n\n\t------------------------------------------------\n");

printf("\t| Data ke - [%d] \t\t|\n", i);

printf("\t________________________________________________|\n");

printf("\t| Nama : %s \t\t|\n", node->nama);

printf("\t| Kode Karyawan : %s \t\t|\n", node->kode);

printf("\t| Asal : %s \t\t|\n", node->asal);

printf("\t| Umur : %d \t\t|\n", node->umur);

printf("\t| Departemen : %s \t\t|\n", node->dpt);

printf("\t------------------------------------------------\n");

printf("\n");

node = node->next;

i++;

}

getch();

}


void deleteNode(struct DATA **head){

struct DATA* temp = *head, *prev;

int pil;

char key[50];

view(*head);

printf("\t-----------------------------------------------------\n");

printf("\t| Silakan pilih Keyword apa yang ingin digunakan : |\n");

printf("\t| 1. Kode Karyawan |\n");

printf("\t| 2. Nama Karyawan (Warning : BUKAN PRIMARY KEY) |\n");

printf("\t-----------------------------------------------------\n");

printf("\tPilihan : "); scanf("%d", &pil);

switch(pil){

case 1 :

printf("\tMasukan Kode Karyawan : ");

scanf("%s", &key);

break;

case 2 :

printf("\tMasukan Nama Karyawan : ");

scanf("%s", &key);

break;

default :

printf("\tPilihan Tidak Ada");

}


if(temp != NULL && (strcmp(temp->kode, key) == 0 || strcmp(temp->nama, key) == 0)){

*head = temp->next;

free(temp);

printf("\tData Berhasil di Hapus");

getch();

return;

}

while(temp != NULL && (strcmp(temp->kode, key) != 0 || strcmp(temp->nama, key) != 0)){

prev = temp;

temp = temp->next;


}

if(temp == NULL){

printf("\tData yang Ingin di Hapus Tidak Ada di Database\n");

getch();

return;

}

prev->next = temp->next;

free(temp);

printf("\tData Berhasil di Hapus!\n");

getch();

}


void editdata(struct DATA **head){

struct DATA* temp = *head, *prev;

int pil;

char key[50];

view(*head);

printf("\t----------------------------------------------------\n");

printf("\t| Silakan pilih Keyword apa yang ingin digunakan : |\n");

printf("\t| 1. Kode Karyawan |\n");

printf("\t| 2. Nama Karyawan (Warning : BUKAN PRIMARY KEY) |\n");

printf("\t----------------------------------------------------\n");

printf("\tPilihan : "); scanf("%d", &pil);

switch(pil){

case 1 :

printf("\tMasukan Kode Karyawan : ");

scanf("%s", &key);

break;

case 2 :

printf("\tMasukan Nama Karyawan : ");

scanf("%s", &key);

break;

default :

printf("\tPilihan Tidak Ada");

}

if(temp != NULL && (strcmp(temp->kode, key) == 0 || strcmp(temp->nama, key) == 0)){

printf("\tInput Nama : "); scanf("%s", &temp->nama);

printf("\tInput Kode Karyawan : "); scanf("%s", &temp->kode);

printf("\tInput Asal : "); scanf("%s", &temp->asal);

printf("\tInput Umur : "); scanf("%d", &temp->umur);

printf("\tInput Departemen : "); scanf("%s", &temp->dpt);

*head = temp;

printf("\tData berhasil diubah\n");

getch();

return;

}


while(temp != NULL && (strcmp(temp->kode, key) != 0 || strcmp(temp->nama, key) != 0)){

prev = temp;

temp = temp->next;

}

if(temp == NULL){

printf("\tData yang ingin diubah Tidak Ada di Database\n");

getch();

return;

}

printf("\tInput Nama : "); scanf("%s", &temp->nama);

printf("\tInput Kode Karyawan : "); scanf("%s", &temp->kode);

printf("\tInput Asal : "); scanf("%s", &temp->asal);

printf("\tInput Umur : "); scanf("%d", &temp->umur);

printf("\tInput Departemen : "); scanf("%s", &temp->dpt);

prev->next=temp;

printf("\tData berhasil diubah\n");

getch();

}


void print(struct DATA *curr){

printf("\tNama : %s\n", curr->nama);

printf("\tKode Karyawan : %s\n", curr->kode);

printf("\tAsal : %s\n", curr->asal);

printf("\tUmur : %d\n", curr->umur);

printf("\tDepartemen : %s\n", curr->dpt);

printf("\n");

count++;

}


void search(struct DATA **head, struct DATASEARCH **heads){

struct DATA *current = *head;

int pil;

count = 0;

char keyS[100];

int keyInt;

printf("\t---------------------------\n");

printf("\t| Cari Data Berdasarkan : |\n"

"\t| 1. Nama |\n"

"\t| 2. Kode Karyawan |\n"

"\t| 3. Asal |\n"

"\t| 4. Umur |\n"

"\t| 5. Departemen |\n"

"\t---------------------------\n"

"\tMasukan Pilihan : ");

scanf("%d", &pil);

switch(pil){

case 1 :

printf("\tMasukan Nama Karyawan : "); scanf("%s", &keyS); break;

case 2 :

printf("\tMasukan Kode Karyawan : "); scanf("%s", &keyS); break;

case 3 :

printf("\tMasukan Asal Karyawan : "); scanf("%s", &keyS); break;

case 4 :

printf("\tMasukan Umur : "); scanf("%d", &keyInt); break;

case 5 :

printf("\tMasukan Departemen Karyawan : "); scanf("%s", &keyS); break;

default :

printf("\tPilihan tidak ada !");

getch();

return;

}

int i = 1;

while(current != NULL){

if (strcmp(current->nama, keyS) == 0 && pil==1){

print(current);

push(current, heads);

} else if (strcmp(current->kode, keyS) == 0 && pil==2){

print(current);

push(current, heads);

} else if (strcmp(current->asal, keyS) == 0 && pil==3){

print(current);

push(current, heads);

} else if(current->umur == keyInt && pil==4){

print(current);

push(current, heads);

} else if(strcmp(current->dpt, keyS) == 0 && pil==5){

print(current);

push(current, heads);

}

current = current->next;

}

if(count > 0){

printf("\tDitemukan %d data\n", count);

getch();

return;

}

else if(current == NULL){

printf("Data yang Ingin dicari Tidak Ada di Database\n");

getch();

return;

}

getch();

}


void push(struct DATA *node, struct DATASEARCH **head){

struct DATASEARCH *new_node = (struct DATASEARCH*) malloc(sizeof(struct DATASEARCH));

strcpy(new_node->nama,node->nama);

strcpy(new_node->kode,node->kode);

strcpy(new_node->asal,node->asal);

new_node->umur = node->umur;

strcpy(new_node->dpt,node->dpt);

new_node->nextsearch = *head;

*head = new_node;

}


void searchhistory(struct DATASEARCH *node){

i = 1;

while(node != NULL){

printf("\tData ke - [%d]\n", i);

printf("\tNama : %s\n", node->nama);

printf("\tKode Karyawan : %s\n", node->kode);

printf("\tAsal : %s\n", node->asal);

printf("\tUmur : %d\n", node->umur);

printf("\tDepartemen : %s\n", node->dpt);

printf("\n");

i++;

node = node->nextsearch;

}

getch();

}


void tochararray(struct DATA *node){

i = 0;

while(node != NULL){

strcpy(a[i].nama, node->nama);

strcpy(a[i].kode, node->kode);

strcpy(a[i].asal, node->asal);

a[i].umur = node->umur;

strcpy(a[i].dpt, node->dpt);

i++;

count = i;

node = node->next;

}

// for(i = 0; i < count; i++){

// printf("nama : %s\n", a[i].nama);

// printf("nama : %s\n", a[i].kode);

// printf("nama : %s\n", a[i].asal);

// printf("nama : %d\n", a[i].umur);

// printf("nama : %s\n", a[i].dpt);

// printf("\n");

// }

// getch();

}


void sortingnama(){

char temp[50];

int tmp;

for(i = 0; i < count - 1 ;i++) {

for(j = 0; j < count - i - 1 ;j++) {

if(strcmp(a[j].nama,a[j+1].nama) >= 0) {

strcpy(temp,a[j].nama);

strcpy(a[j].nama,a[j+1].nama);

strcpy(a[j+1].nama,temp);


strcpy(temp,a[j].kode);

strcpy(a[j].kode,a[j+1].kode);

strcpy(a[j+1].kode,temp);


strcpy(temp,a[j].asal);

strcpy(a[j].asal,a[j+1].asal);

strcpy(a[j+1].asal,temp);


tmp = a[j].umur;

a[j].umur = a[j+1].umur;

a[j+1].umur = tmp;


strcpy(temp,a[j].dpt);

strcpy(a[j].dpt, a[j+1].dpt);

strcpy(a[j+1].dpt, temp);

}

}

}

}

void sortingkode(){

char temp[50];

int tmp;

for(i = 0; i < count - 1 ;i++) {

for(j = 0; j < count - i - 1;j++) {

if(strcmp(a[j].kode,a[j+1].kode)>=0) {

strcpy(temp,a[j].nama);

strcpy(a[j].nama,a[j+1].nama);

strcpy(a[j+1].nama,temp);


strcpy(temp,a[j].kode);

strcpy(a[j].kode,a[j+1].kode);

strcpy(a[j+1].kode,temp);


strcpy(temp,a[j].asal);

strcpy(a[j].asal,a[j+1].asal);

strcpy(a[j+1].asal,temp);


tmp = a[j].umur;

a[j].umur = a[j+1].umur;

a[j+1].umur = tmp;


strcpy(temp,a[j].dpt);

strcpy(a[j].dpt, a[j+1].dpt);

strcpy(a[j+1].dpt, temp);

}

}

}

}


void sortingasal() {

char temp[50];

int tmp;

for(i = 0; i < count - 1 ;i++) {

for(j = 0; j < count - i - 1 ;j++) {

if(strcmp(a[j].asal,a[j+1].asal)>=0) {

strcpy(temp,a[j].nama);

strcpy(a[j].nama,a[j+1].nama);

strcpy(a[j+1].nama,temp);


strcpy(temp,a[j].kode);

strcpy(a[j].kode,a[j+1].kode);

strcpy(a[j+1].kode,temp);


strcpy(temp,a[j].asal);

strcpy(a[j].asal,a[j+1].asal);

strcpy(a[j+1].asal,temp);


tmp = a[j].umur;

a[j].umur = a[j+1].umur;

a[j+1].umur = tmp;


strcpy(temp,a[j].dpt);

strcpy(a[j].dpt, a[j+1].dpt);

strcpy(a[j+1].dpt, temp);

}

}

}

}


void sortingumur(){

char temp[50];

int tmp;

for(i = 0; i < count - 1; i++) {

for(j = 0; j < count - i - 1;j++) {

if(a[j].umur > a[j+1].umur) {

strcpy(temp,a[j].nama);

strcpy(a[j].nama,a[j+1].nama);

strcpy(a[j+1].nama,temp);


strcpy(temp,a[j].kode);

strcpy(a[j].kode,a[j+1].kode);

strcpy(a[j+1].kode,temp);


strcpy(temp,a[j].asal);

strcpy(a[j].asal,a[j+1].asal);

strcpy(a[j+1].asal,temp);


tmp = a[j].umur;

a[j].umur = a[j+1].umur;

a[j+1].umur = tmp;


strcpy(temp,a[j].dpt);

strcpy(a[j].dpt, a[j+1].dpt);

strcpy(a[j+1].dpt, temp);

}

}

}

}


void sortingdepartemen(){

char temp[50];

int tmp;

for(i = 0; i < count - 1; i++) {

for(j = 0; j < count - i - 1;j++) {

if(strcmp(a[j].dpt,a[j+1].dpt)>=0) {

strcpy(temp,a[j].nama);

strcpy(a[j].nama,a[j+1].nama);

strcpy(a[j+1].nama,temp);


strcpy(temp,a[j].kode);

strcpy(a[j].kode,a[j+1].kode);

strcpy(a[j+1].kode,temp);


strcpy(temp,a[j].asal);

strcpy(a[j].asal,a[j+1].asal);

strcpy(a[j+1].asal,temp);


tmp = a[j].umur;

a[j].umur = a[j+1].umur;

a[j+1].umur = tmp;


strcpy(temp,a[j].dpt);

strcpy(a[j].dpt, a[j+1].dpt);

strcpy(a[j+1].dpt, temp);

}

}

}

}

void viewsort(){

int x;

for (x = 0; x < count; x++){

printf("\tData ke - [%d]\n", x+1);

printf("\tNama : %s\n", a[x].nama);

printf("\tKode Karyawan : %s\n", a[x].kode);

printf("\tAsal : %s\n", a[x].asal);

printf("\tUmur : %d\n", a[x].umur);

printf("\tDepartemen : %s\n", a[x].dpt);

printf("\n");

}

}


void sorting(){

char pil;

while(pil != 'p'){

system("cls");

printf("\t----------------------------------------------------------\n"

"\t| Ketik huruf berikut untuk sortir berdasarkan : |\n"

"\t| [a] nama | [b] kode | [c] asal | |\n"

"\t| [d] umur | [e] departemen | [p] kembali| |\n"

"\t----------------------------------------------------------\n");

printf("Ketik Huruf : ");

pil = getche();

printf("\n");

switch(pil){

case 'a' :

sortingnama(); break;

case 'b' :

sortingkode(); break;

case 'c' :

sortingasal(); break;

case 'd' :

sortingumur(); break;

case 'e' :

sortingdepartemen(); break;

default :

printf("\tPilihan Tidak Ada!\n"); getch(); break;

}

viewsort();

printf("Ketik 'P' untuk keluar dari menu sorting.\n"

"Untuk masuk ke menu sorting ketik huruf apa saja.");

pil = getche();

}

}


void author(){

printf("\t__________________________________________\n");

printf("\t| Federick Jonathan (672016012) |\n");

printf("\t| Juan Andrew Suthendra (672016012) |\n");

printf("\t| Sirilus Armanda Dimas R.A. (672016181) |\n");

printf("\t| Geraldie Tanu Saputra (672016190) |\n");

printf("\t__________________________________________\n");

getch();

}


int main(){

struct DATA *head = NULL;

struct DATASEARCH *headsearch = NULL;

start:

menu();

int pil;

scanf("%d", &pil);

switch(pil){

case 1 :

if(head != NULL){

printf("\tDatabase Sudah Dibuat!");

getch(); break;

}

create(&head); break;

case 2 :

if(head == NULL){

printf("\tData Masih Kosong!");

getch(); break;

}

view(head); break;

case 3 :

if(head == NULL){

printf("\tDatabase Belum Dibuat!");

getch(); break;

}

append(&head); break;

case 4 :

if(head == NULL){

printf("\tData Masih Kosong!");

getch(); break;

}

deleteNode(&head); break;

case 5 :

if(head == NULL){

printf("\tData Masih Kosong!");

getch(); break;

}

editdata(&head); break;

case 6 :

if(head == NULL){

printf("\tData Masih Kosong!");

getch(); break;

}

search(&head, &headsearch); break;

case 7 :

if(headsearch == NULL){

printf("\tData Masih Kosong!");

getch(); break;

}

searchhistory(headsearch); break;

case 8 :

if(head == NULL){

printf("\tData Masih Kosong!");

getch(); break;

}

tochararray(head); sorting(); break;

case 9 : author(); break;

case 10 : _exit(0);

default :

{

printf("\tMaaf pilihan tidak ada di menu\n");

getch();

}

}

goto start;

}

   
OUTPUT





Itulah outputnya teman-teman,silahkan teman-teman copy paste dan coba sendiri. Semoga artikel ini dapat membantu teman-teman dalam mengerjakan tugas-tugas atau juga menambah ilmu pengethuan teman-teman tengan codinga bahasa C. 
loading...
Baca Juga
Share This :

1 Comments

loading...
Notification
Donasi yang kamu berikan akan saya gunakan untuk mengembangkan blog ini menjadi lebih baik.

Donate
 BANK BRI : 777201000999534 a/n Juan Karly Matheus.
 Paypal       : paypal.me/juanmatheus37
  PULSA       : 0823-9958-5050 (Telkomsel)
Done