Skip to content

Instantly share code, notes, and snippets.

@defrindr
Last active April 26, 2021 11:15
Show Gist options
  • Save defrindr/e4130ca332eb39f83cae162de72fcdab to your computer and use it in GitHub Desktop.
Save defrindr/e4130ca332eb39f83cae162de72fcdab to your computer and use it in GitHub Desktop.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct simpul {
char nama[25];
int nrp;
struct simpul * prev;
struct simpul * next;
}
simpul;
struct simpul * ujung;
struct simpul * alokasi_simpul() {
struct simpul * new_val;
new_val = (struct simpul * ) malloc(sizeof(struct simpul));
if (new_val == NULL)
return NULL;
else
new_val -> prev = NULL;
new_val -> next = NULL;
return new_val;
}
struct simpul * add(struct simpul * head) {
struct simpul * ujung;
ujung = alokasi_simpul();
if (ujung == NULL) printf("Alokasi gagal");
else {
printf("Nama :");
scanf("%s", & ujung -> nama);
printf("NRP :");
scanf("%d", & ujung -> nrp);
}
if (head == NULL) {
ujung -> prev = NULL;
ujung -> next = head;
} else {
ujung -> prev = NULL;
head -> prev = ujung;
ujung -> next = head;
}
return ujung;
}
struct simpul * add_end(struct simpul * head) {
struct simpul * kembali = head;
struct simpul * ujung = alokasi_simpul();
if (ujung == NULL) printf("Alokasi gagal");
else {
printf("Nama :");
scanf("%s", & ujung -> nama);
printf("NRP :");
scanf("%d", & ujung -> nrp);
}
if (head == NULL) {
kembali = ujung;
} else {
while (head -> next != NULL) {
head = head -> next;
}
ujung -> next = NULL;
head -> next = ujung;
ujung -> prev = head;
}
return kembali;
}
struct simpul * add_after(struct simpul * head) {
struct simpul * kembali = head;
struct simpul * ujung = head;
struct simpul * data = alokasi_simpul();
struct simpul * sbl;
char nama[25];
if (ujung == NULL) {
printf("\n------------\nLinked List kosong\n------------\n\n");
return kembali;
}
printf("cari data berdasarkan nama : ");
scanf("%s", & nama);
printf("Nama :");
scanf("%s", & data -> nama);
printf("NRP :");
scanf("%d", & data -> nrp);
while (strcmp(ujung -> nama, nama) != 0) {
sbl = ujung;
ujung = ujung -> next;
}
if (ujung == NULL) {
printf("\n------------\nLinked List kosong\n------------\n\n");
return kembali;
}
data -> next = ujung -> next;
ujung -> next = data;
data -> prev = ujung;
return kembali;
}
struct simpul * add_before(struct simpul * head) {
struct simpul * kembali = head;
struct simpul * ujung = head;
struct simpul * data = alokasi_simpul();
struct simpul * sbl;
char nama[25];
if (ujung == NULL) {
printf("\n------------\nLinked List kosong\n------------\n\n");
return kembali;
}
printf("cari data berdasarkan nama : ");
scanf("%s", & nama);
printf("Nama :");
scanf("%s", & data -> nama);
printf("NRP :");
scanf("%d", & data -> nrp);
printf("%s \n", & ujung -> nama);
int i = 0;
while (strcmp(ujung -> nama, nama) != 0) {
sbl = ujung;
ujung = ujung -> next;
i++;
}
if (ujung == NULL) {
printf("\n------------\nLinked List kosong\n------------\n\n");
return kembali;
}
if (i == 0) {
data -> next = ujung;
ujung -> prev = data;
data -> prev = NULL;
return data;
} else {
data -> prev = ujung -> prev;
data -> prev -> next = data; // untuk fifo
data -> next = ujung;
ujung -> prev = data; // untuk lifo
}
return kembali;
}
struct simpul * hapus(struct simpul * head) {
char nama[25];
printf("cari data berdasarkan nama : ");
scanf("%s", & nama);
struct simpul * kembali = head;
struct simpul * hapus = head;
struct simpul * sbl;
struct simpul * ssd;
int i = 0;
if (head == NULL) {
printf("\n------------\nLinked List kosong\n------------\n\n");
} else {
while (hapus != NULL && strcmp(hapus -> nama, nama) != 0) {
sbl = hapus;
hapus = hapus -> next;
i++;
}
if (hapus == NULL) {
printf("\n------------\nData tidak ada\n------------\n\n");
} else {
if (i == 0) {
if (hapus -> next != NULL) {
hapus = hapus -> next;
hapus -> prev = NULL;
free(hapus);
return hapus;
} else {
free(hapus);
return NULL;
}
} else {
if (hapus -> prev == NULL && hapus -> next != NULL) {
hapus -> prev = NULL;
hapus = hapus -> next;
hapus -> prev = NULL;
} else if (hapus -> next != NULL && hapus -> prev != NULL) {
hapus -> prev -> next = hapus -> next;
hapus -> next -> prev = hapus -> prev;
} else {
hapus -> prev -> next = NULL;
}
}
}
free(hapus);
}
return kembali;
}
void tampil(struct simpul * tampil) {
int i = 1;
if (tampil == NULL) {
printf("\n------------\nLinked List kosong\n------------\n\n");
return;
}
printf("\n==================\n");
while (tampil != NULL) {
printf("%d. %s --- %d\n", i, tampil -> nama, tampil -> nrp);
tampil = tampil -> next;
i++;
}
printf("\n==================\n");
}
void tampil_lifo(struct simpul * tampil) {
int i = 1;
struct simpul * ujung = alokasi_simpul();
struct simpul * sbl;
if (tampil == NULL) {
printf("\n------------\nLinked List kosong\n------------\n\n");
} else {
while (tampil != NULL) {
sbl = tampil;
tampil = tampil -> next;
}
printf("\n==================\n");
while (sbl != NULL) {
printf("%d. %s --- %d\n", i, sbl -> nama, sbl -> nrp);
sbl = sbl -> prev;
i++;
}
printf("\n==================\n");
}
}
void cari_berdasarkan_nama(struct simpul * tampil) {
if (tampil == NULL) {
printf("\n------------\nLinked List kosong\n------------\n\n");
return;
}
char nama[25];
printf("cari data berdasarkan nama : ");
scanf("%s", & nama);
int flag = 0;
int i = 1;
while (tampil != NULL) {
if (strcmp(nama, tampil -> nama) == 0) {
flag = 1;
printf("\n------------\n%s Ketemu !!!!\nBerada di data ke-%d\n------------\n\n", tampil -> nama, i);
}
i++;
tampil = tampil -> next;
}
if (flag == 0) {
printf("\n------------\nLinked List kosong\n------------\n\n");
}
}
int main() {
while (1) {
int pil;
printf("1. Cari berdasarkan nama \n"\
"2. Tampil Semua \n"\
"3. Tampil LIFO \n"\
"4. Tambah Diawal \n"\
"5. Tambah Diakhir \n"\
"6. Hapus data \n"\
"7. Add After \n"\
"8. Add Before \n"\
"9. Keluar \n\nPilihan : ");
scanf("%d", & pil);
switch (pil) {
case 1:
cari_berdasarkan_nama(ujung);
break;
case 2:
tampil(ujung);
break;
case 3:
tampil_lifo(ujung);
break;
case 4:
ujung = add(ujung);
break;
case 5:
ujung = add_end(ujung);
break;
case 6:
ujung = hapus(ujung);
break;
case 7:
ujung = add_after(ujung);
break;
case 8:
ujung = add_before(ujung);
break;
case 9:
exit(0);
break;
default:
printf("Perintah Tidak ditemukan.\n");
break;
}
}
return 0;
}
@defrindr
Copy link
Author

defrindr commented Apr 5, 2021

bug di hapus data

@defrindr
Copy link
Author

defrindr commented Apr 7, 2021

  • hapus di tengah sudah bisa

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment