Last active
April 26, 2021 11:15
-
-
Save defrindr/e4130ca332eb39f83cae162de72fcdab to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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; | |
} |
- hapus di tengah sudah bisa
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
bug di hapus data