kali ini saya akan membuat program Linked List didalam Microsoft Visual Studio C++, sedikit penambahan, Linkes list yang saya buat ini berguna untuk mencari, memasukan, dan menghapus suatu data
karya : VANNY MONIAGA
jurusan : Ilmu Komputer
Universitas International Batam
matakuliah : Algoritma
Dosen: Yuniansyah, S.kom, M.kom
Berikut coding-coding dibawah ini :
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define CLS system("cls");
#define PAUSE {printf("\n"); system("pause");}
// membandingkan dua buah string (ignore case)
int _tmain(int argc, _TCHAR* argv[])
{
}
int compare(char *str1, char *str2) {
int len = strlen(str1);
int beda = 0;
for (int i=0; i<len; i++) {
if (str1[i] >= 'A' && str1[i] <= 'Z') str1[i] += 32;
if (str2[i] >= 'A' && str2[i] <= 'Z') str2[i] += 32;
if (str1[i] != str2[i]) beda++;
if (str2[i] == 'beda') {
beda++;
return beda;
}
}
if (strlen(str2) < len) {
beda += strlen(str2) - len;
}
return beda;
}
int main()
{
struct list {
char npm[16];
char nama[64];
float nilai;
struct list *next;
};
struct list *awal, *akhir, *p, *Psbl, *baru;
awal = akhir = NULL;
int pilihan = 1, posisi, posisi_sekarang,posisi_data;
char cari[64], konfirmasi;
do {
switch (pilihan) {
case 1: // tambah data kedalam list
CLS;
baru = (struct list *) malloc(sizeof(struct list)); // alokasikan list baru di memori
if (baru == NULL) {
CLS;
printf("\nMemori tidak cukup.");
PAUSE;
break;
}
printf("\nNPM : "); scanf("%s", baru->npm); getchar();
printf("Nama : "); scanf("%[^\n]", baru->nama);
printf("Nilai : "); scanf("%f", &baru->nilai);
if (awal == NULL) {
baru->next = NULL;
awal = baru;
akhir = baru;
} else {
printf("\nTambahkan Data di (Default = akhir) : \n");
printf("1. Awal\n2. Tengah\n3. Akhir\n\nPilihan Anda : ");
scanf("%d", &posisi);
switch(posisi) {
case 1:
// tambah data di awal list
baru->next = awal;
awal = baru;
PAUSE;
break;
case 2:
printf("Masukan posisi data : "); scanf("%d", &posisi_data);
p = awal;
Psbl = NULL;
posisi_sekarang = 1;
while (p != NULL && posisi_sekarang < posisi_data) {
//Psbl = p;
p = p->next;
posisi_sekarang++;
}
if (p != NULL) {
// tambahkan data di tengah (posisi_data)
Psbl = p;
baru->next = p->next;
Psbl->next = baru;
}
break;
case 3:
default:
// tambah data di akhir list
akhir->next = baru;
akhir = baru;
baru->next = NULL;
PAUSE;
break;
}
}
break;
case 2:
CLS;
p = awal;
printf("\n------------------------------------------\n");
if (p == NULL) {
printf("\n List Kosong\n");
printf("\n------------------------------------------\n");
break;
} else {
while (p != NULL) {
printf("\nNPM : %s", p->npm);
printf("\nNama : %s", p->nama);
printf("\nNilai : %.2f", p->nilai);
printf("\n------------------------------------------\n");
p = p->next;
}
}
printf("\n");
printf("Masukan NPM/Nama dari data yang ingin dihapus : ");
scanf("%s", cari);
CLS;
Psbl = NULL;
p = awal;
while (p != NULL) {
if (compare(p->npm, cari) == 0 || compare(p->nama, cari) == 0) {
printf("\n\n------------------------------------------\n");
printf("\nNPM : %s", p->npm);
printf("\nNama : %s", p->nama);
printf("\nNilai : %.2f", p->nilai);
printf("\n------------------------------------------\n");
printf("\nIngin menghapus data di atas (y/n) : ");
scanf("%s", &konfirmasi);
if (konfirmasi == 'y' || konfirmasi == 'Y') {
if (awal->next == NULL) {
awal = NULL;
akhir = awal;
} else if (p == awal) {
// hapus di awal
Psbl = awal;
awal = Psbl->next;
} else if (p == akhir) {
// hapus di akhir
Psbl->next = NULL;
akhir = Psbl;
}
else {
// hapus di tengah
Psbl->next = p->next;
}
printf("\nData berhasil dihapus.\n\n");
} else {
printf("\nData tidak jadi dihapus.\n\n");
}
break;
}
Psbl = p;
p = p->next;
}
if (p == NULL) {
printf("\n\nNPM/Nama tidak ditemukan !\n\n");
}
PAUSE;
break;
case 3:
CLS;
printf("\nMasukan NPM/Nama yang di cari : ");
scanf("%s", cari);
p = awal;
while (p != NULL) {
if (compare(p->npm, cari) == 0 || compare(p->nama, cari) == 0) {
printf("\n\n------------------------------------------\n");
printf("\nNPM : %s", p->npm);
printf("\nNama : %s", p->nama);
printf("\nNilai : %.2f", p->nilai);
printf("\n------------------------------------------\n");
PAUSE;
break;
}
p = p->next;
}
if (p == NULL) {
printf("\nData tidak ditemukan ! \n\n");
PAUSE;
}
break;
case 4: // tampilkan list
CLS;
p = awal;
printf("\n------------------------------------------\n");
if (p == NULL) {
printf("\n List Kosong\n");
printf("\n------------------------------------------\n");
} else {
while (p != NULL) {
printf("\nNPM : %s", p->npm);
printf("\nNama : %s", p->nama);
printf("\nNilai : %.2f", p->nilai);
printf("\n------------------------------------------\n");
p = p->next;
}
}
printf("\n");
PAUSE;
break;
case 0: break;
default:
printf("\nPilihan salah !\n");
break;
}
CLS;
printf("\n1. Tambahkan data kedalam list\n"
"2. Hapus data\n"
"3. Pencarian data\n"
"4. Tampilkan list\n"
"0. Keluar\n\n");
printf("Pilihan Anda : ");
scanf("%d", &pilihan);
} while (pilihan > 0);
return 0;
}