linked list dalam bahasa C
Linked list dalam bahasa C
Dalam bahasa pemrograman C, linked list adalah struktur data linier yang
terdiri dari sekelompok simpul (node) yang saling terhubung. Setiap
simpul dalam linked list menyimpan dua informasi utama: data dan alamat
(pointer) dari simpul berikutnya dalam urutan. Linked list memungkinkan
penyimpanan data secara dinamis dan dapat menyediakan fleksibilitas
dalam penambahan atau penghapusan elemen.
berikut merupakan penerapan linked list kedalam kode pemrograman
1.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// Struktur untuk merepresentasikan informasi buku
struct Book {
char title[100];
char author[50];
int year;
struct Book* next;
};
// Variabel global untuk menunjukkan kepala (head) dari linked list
struct Book* head = NULL;
// Fungsi untuk menambahkan buku baru ke linked list
void addBook(char title[], char author[], int year) {
struct Book* newBook = (struct Book*)malloc(sizeof(struct Book));
strcpy(newBook->title, title);
strcpy(newBook->author, author);
newBook->year = year;
newBook->next = head;
head = newBook;
}
// Fungsi untuk menghapus buku dari linked list berdasarkan judul
void deleteBook(char title[]) {
struct Book *current = head, *prev = NULL;
// Cari buku dengan judul yang sesuai
while (current != NULL && strcmp(current->title, title) != 0) {
prev = current;
current = current->next;
}
// Jika buku ditemukan, hapus dari linked list
if (current != NULL) {
if (prev == NULL) {
// Buku yang dihapus adalah buku pertama
head = current->next;
} else {
// Buku yang dihapus bukan buku pertama
prev->next = current->next;
}
free(current);
printf("Buku dengan judul '%s' telah dihapus.\n", title);
} else {
printf("Buku dengan judul '%s' tidak ditemukan.\n", title);
}
}
// Fungsi untuk menampilkan seluruh buku dalam linked list
void displayBooks() {
struct Book* current = head;
if (current == NULL) {
printf("Tidak ada buku dalam daftar.\n");
return;
}
printf("Daftar Buku:\n");
while (current != NULL) {
printf("Judul: %s | Penulis: %s | Tahun Terbit: %d\n", current->title, current->author, current->year);
current = current->next;
}
}
// Fungsi utama
int main() {
int choice;
char title[100], author[50];
int year;
do {
// Menu
printf("\n=== Sistem Manajemen Buku ===\n");
printf("1. Tambah Buku\n");
printf("2. Hapus Buku\n");
printf("3. Tampilkan Semua Buku\n");
printf("0. Keluar\n");
printf("Pilihan Anda: ");
scanf("%d", &choice);
switch (choice) {
case 1:
// Menambahkan buku baru
printf("Masukkan judul buku: ");
scanf(" %[^\n]", title);
printf("Masukkan nama penulis: ");
scanf(" %[^\n]", author);
printf("Masukkan tahun terbit: ");
scanf("%d", &year);
addBook(title, author, year);
break;
case 2:
// Menghapus buku berdasarkan judul
printf("Masukkan judul buku yang ingin dihapus: ");
scanf(" %[^\n]", title);
deleteBook(title);
break;
case 3:
// Menampilkan seluruh buku dalam linked list
displayBooks();
break;
case 0:
// Keluar dari program
printf("Program berakhir.\n");
break;
default:
printf("Pilihan tidak valid. Coba lagi.\n");
}
} while (choice != 0);
return 0;
}
output:
Struktur Data struct Book:
- Merepresentasikan informasi setiap buku dengan atribut judul (
title), penulis (author), tahun terbit (year), dan pointer ke buku berikutnya (next).
c
struct Book {
char title[100];
char author[50];
int year;
struct Book* next;
};
Variabel Global dan head:
struct Book* head: Menunjukkan kepala (head) dari linked list buku.- Inisialisasi dengan
NULLkarena awalnya linked list kosong.
c
struct Book* head = NULL;
Fungsi addBook:
- Menambahkan buku baru ke linked list.
- Membuat simpul baru, mengisinya dengan informasi buku, dan menambahkannya di awal linked list.
c
void addBook(char title[], char author[], int year) {
struct Book* newBook = (struct Book*)malloc(sizeof(struct Book));
strcpy(newBook->title, title);
strcpy(newBook->author, author);
newBook->year = year;
newBook->next = head;
head = newBook;
}
Fungsi deleteBook:
- Menghapus buku dari linked list berdasarkan judul.
- Mencari buku dengan judul yang sesuai, mengubah pointer sebelumnya untuk menghilangkan buku dari linked list, dan membebaskan memori.
c
void deleteBook(char title[]) {
struct Book *current = head, *prev = NULL;
while (current != NULL && strcmp(current->title, title) != 0) {
prev = current;
current = current->next;
}
if (current != NULL) {
if (prev == NULL) {
head = current->next;
} else {
prev->next = current->next;
}
free(current);
printf("Buku dengan judul '%s' telah dihapus.\n", title);
} else {
printf("Buku dengan judul '%s' tidak ditemukan.\n", title);
}
}
Fungsi displayBooks:
- Menampilkan seluruh buku dalam linked list.
- Menggunakan loop untuk mengunjungi setiap simpul buku dan mencetak informasinya.
c
void displayBooks() {
struct Book* current = head;
if (current == NULL) {
printf("Tidak ada buku dalam daftar.\n");
return;
}
printf("Daftar Buku:\n");
while (current != NULL) {
printf("Judul: %s | Penulis: %s | Tahun Terbit: %d\n", current->title, current->author, current->year);
current = current->next;
}
}
Fungsi main:
- Menu utama untuk berinteraksi dengan program.
- Pengguna dapat menambahkan buku, menghapus buku, menampilkan semua buku, atau keluar dari program.
c
int main() { // ... (Inisialisasi variabel dan loop menu) }
Program menggunakan alokasi dinamis untuk membuat simpul buku baru dan membebaskan memori setelah buku dihapus. Seluruh program berjalan dalam loop hingga pengguna memilih untuk keluar. Setiap pilihan menu diimplementasikan melalui pemanggilan fungsi yang sesuai.
2.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// Struktur untuk merepresentasikan informasi pasien
struct Patient {
char name[100];
int medicalRecordNumber;
char disease[50];
struct Patient* next;
};
// Variabel global untuk menunjukkan kepala (head) dari linked list antrian pasien
struct Patient* head = NULL;
// Fungsi untuk menambahkan pasien baru ke linked list antrian
void enqueuePatient(char name[], int medicalRecordNumber, char disease[]) {
struct Patient* newPatient = (struct Patient*)malloc(sizeof(struct Patient));
strcpy(newPatient->name, name);
newPatient->medicalRecordNumber = medicalRecordNumber;
strcpy(newPatient->disease, disease);
newPatient->next = NULL;
// Jika antrian kosong, pasien baru menjadi pasien pertama
if (head == NULL) {
head = newPatient;
} else {
// Jika antrian tidak kosong, tambahkan pasien baru di akhir antrian
struct Patient* current = head;
while (current->next != NULL) {
current = current->next;
}
current->next = newPatient;
}
printf("Pasien '%s' telah ditambahkan ke antrian.\n", name);
}
// Fungsi untuk memanggil pasien berikutnya dan menghapusnya dari linked list
void dequeuePatient() {
if (head == NULL) {
printf("Antrian kosong. Tidak ada pasien untuk dipanggil.\n");
} else {
struct Patient* temp = head;
head = head->next;
printf("Pasien '%s' dengan nomor rekam medis %d sedang dilayani.\n", temp->name, temp->medicalRecordNumber);
free(temp);
}
}
// Fungsi untuk menampilkan seluruh pasien dalam linked list antrian
void displayQueue() {
struct Patient* current = head;
if (current == NULL) {
printf("Antrian kosong. Tidak ada pasien.\n");
return;
}
printf("Antrian Pasien:\n");
while (current != NULL) {
printf("Nama: %s | Nomor Rekam Medis: %d | Penyakit: %s\n", current->name, current->medicalRecordNumber, current->disease);
current = current->next;
}
}
// Fungsi utama
int main() {
int choice;
char name[100], disease[50];
int medicalRecordNumber;
do {
// Menu
printf("\n=== Sistem Antrian Pasien ===\n");
printf("1. Tambah Pasien\n");
printf("2. Panggil Pasien Berikutnya\n");
printf("3. Tampilkan Antrian Pasien\n");
printf("0. Keluar\n");
printf("Pilihan Anda: ");
scanf("%d", &choice);
switch (choice) {
case 1:
// Menambahkan pasien baru ke antrian
printf("Masukkan nama pasien: ");
scanf(" %[^\n]", name);
printf("Masukkan nomor rekam medis: ");
scanf("%d", &medicalRecordNumber);
printf("Masukkan jenis penyakit: ");
scanf(" %[^\n]", disease);
enqueuePatient(name, medicalRecordNumber, disease);
break;
case 2:
// Memanggil pasien berikutnya
dequeuePatient();
break;
case 3:
// Menampilkan seluruh pasien dalam antrian
displayQueue();
break;
case 0:
// Keluar dari program
printf("Program berakhir.\n");
break;
default:
printf("Pilihan tidak valid. Coba lagi.\n");
}
} while (choice != 0);
return 0;
}
output :
Program tersebut adalah implementasi sederhana dari sistem antrian pasien di rumah sakit menggunakan linked list dalam bahasa C. Berikut adalah penjelasan untuk setiap bagian program:
Struktur Data
struct Patient:- Merepresentasikan informasi setiap pasien dengan atribut nama (
name), nomor rekam medis (medicalRecordNumber), jenis penyakit (disease), dan pointer ke pasien berikutnya (next).
c- Merepresentasikan informasi setiap pasien dengan atribut nama (
struct Patient {
char name[100];
int medicalRecordNumber;
char disease[50];
struct Patient* next;
};
Variabel Global dan head:
struct Patient* head: Menunjukkan kepala (head) dari linked list antrian pasien.- Inisialisasi dengan
NULLkarena awalnya antrian pasien kosong.
c
struct Patient* head = NULL;
Fungsi enqueuePatient:
- Menambahkan pasien baru ke linked list antrian.
- Membuat simpul baru dan menambahkannya di akhir antrian.
c
void enqueuePatient(char name[], int medicalRecordNumber, char disease[]) {
struct Patient* newPatient = (struct Patient*)malloc(sizeof(struct Patient));
strcpy(newPatient->name, name);
newPatient->medicalRecordNumber = medicalRecordNumber;
strcpy(newPatient->disease, disease);
newPatient->next = NULL;
if (head == NULL) {
head = newPatient;
} else {
struct Patient* current = head;
while (current->next != NULL) {
current = current->next;
}
current->next = newPatient;
}
printf("Pasien '%s' telah ditambahkan ke antrian.\n", name);
}
Fungsi dequeuePatient:
- Memanggil pasien berikutnya untuk dilayani dan menghapusnya dari linked list antrian.
- Menghapus simpul pertama dari linked list.
c
void dequeuePatient() {
if (head == NULL) {
printf("Antrian kosong. Tidak ada pasien untuk dipanggil.\n");
} else {
struct Patient* temp = head;
head = head->next;
printf("Pasien '%s' dengan nomor rekam medis %d sedang dilayani.\n", temp->name, temp->medicalRecordNumber);
free(temp);
}
}
Fungsi displayQueue:
- Menampilkan seluruh pasien dalam linked list antrian.
- Mencetak informasi setiap pasien dalam antrian.
c
void displayQueue() {
struct Patient* current = head;
if (current == NULL) {
printf("Antrian kosong. Tidak ada pasien.\n");
return;
}
printf("Antrian Pasien:\n");
while (current != NULL) {
printf("Nama: %s | Nomor Rekam Medis: %d | Penyakit: %s\n", current->name, current->medicalRecordNumber, current->disease);
current = current->next;
}
}
Fungsi main:
- Menu utama untuk berinteraksi dengan program.
- Pengguna dapat menambahkan pasien baru, memanggil pasien berikutnya, menampilkan seluruh pasien dalam antrian, atau keluar dari program.
c
3.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// Struktur untuk merepresentasikan informasi transaksi
struct Transaction {
int transactionNumber;
char date[20];
float totalAmount;
struct Transaction* next;
};
// Variabel global untuk menunjukkan kepala (head) dari linked list transaksi
struct Transaction* head = NULL;
// Fungsi untuk menambahkan transaksi baru ke linked list
void addTransaction(int transactionNumber, const char date[], float totalAmount) {
struct Transaction* newTransaction = (struct Transaction*)malloc(sizeof(struct Transaction));
newTransaction->transactionNumber = transactionNumber;
strcpy(newTransaction->date, date);
newTransaction->totalAmount = totalAmount;
newTransaction->next = NULL;
// Jika antrian kosong, transaksi baru menjadi transaksi pertama
if (head == NULL) {
head = newTransaction;
} else {
// Jika antrian tidak kosong, tambahkan transaksi baru di akhir antrian
struct Transaction* current = head;
while (current->next != NULL) {
current = current->next;
}
current->next = newTransaction;
}
printf("Transaksi #%d pada tanggal %s dengan total pembelian %.2f ditambahkan.\n", transactionNumber, date, totalAmount);
}
// Fungsi untuk menghapus transaksi dari linked list berdasarkan nomor transaksi
void deleteTransaction(int transactionNumber) {
struct Transaction *current = head, *prev = NULL;
// Cari transaksi dengan nomor transaksi yang sesuai
while (current != NULL && current->transactionNumber != transactionNumber) {
prev = current;
current = current->next;
}
// Jika transaksi ditemukan, hapus dari linked list
if (current != NULL) {
if (prev == NULL) {
// Transaksi yang dihapus adalah transaksi pertama
head = current->next;
} else {
// Transaksi yang dihapus bukan transaksi pertama
prev->next = current->next;
}
free(current);
printf("Transaksi #%d telah dihapus.\n", transactionNumber);
} else {
printf("Transaksi #%d tidak ditemukan.\n", transactionNumber);
}
}
// Fungsi untuk menampilkan seluruh transaksi dalam linked list
void displayTransactions() {
struct Transaction* current = head;
if (current == NULL) {
printf("Tidak ada transaksi dalam daftar.\n");
return;
}
printf("Daftar Transaksi:\n");
while (current != NULL) {
printf("Transaksi #%d pada tanggal %s dengan total pembelian %.2f\n", current->transactionNumber, current->date, current->totalAmount);
current = current->next;
}
}
// Fungsi utama
int main() {
int choice, transactionNumber;
char date[20];
float totalAmount;
do {
// Menu
printf("\n=== Sistem Pencatatan Transaksi Penjualan ===\n");
printf("1. Tambah Transaksi\n");
printf("2. Hapus Transaksi\n");
printf("3. Tampilkan Seluruh Transaksi\n");
printf("0. Keluar\n");
printf("Pilihan Anda: ");
scanf("%d", &choice);
switch (choice) {
case 1:
// Menambahkan transaksi baru ke linked list
printf("Masukkan nomor transaksi: ");
scanf("%d", &transactionNumber);
printf("Masukkan tanggal: ");
scanf(" %[^\n]", date);
printf("Masukkan total pembelian: ");
scanf("%f", &totalAmount);
addTransaction(transactionNumber, date, totalAmount);
break;
case 2:
// Menghapus transaksi berdasarkan nomor transaksi
printf("Masukkan nomor transaksi yang ingin dihapus: ");
scanf("%d", &transactionNumber);
deleteTransaction(transactionNumber);
break;
case 3:
// Menampilkan seluruh transaksi dalam linked list
displayTransactions();
break;
case 0:
// Keluar dari program
printf("Program berakhir.\n");
break;
default:
printf("Pilihan tidak valid. Coba lagi.\n");
}
} while (choice != 0);
// Dealokasi memori setelah program selesai
while (head != NULL) {
struct Transaction* temp = head;
head = head->next;
free(temp);
}
return 0;
}
output :
Penjelasan Program:
- Program menggunakan struktur
struct Transactionuntuk merepresentasikan informasi setiap transaksi. - Variabel global
headmenunjukkan kepala linked list transaksi. - Fungsi
addTransactionmenambahkan transaksi baru ke linked list di akhir antrian. - Fungsi
deleteTransactionmenghapus transaksi dari linked list berdasarkan nomor transaksi. - Fungsi
displayTransactionsmenampilkan seluruh transaksi dalam linked list. - Program utama menyediakan menu untuk menambah, menghapus, dan menampilkan transaksi. Program berjalan dalam loop hingga pengguna memilih untuk keluar (memasukkan pilihan 0).
- Memori yang dialokasikan untuk linked list akan di-dealokasi setelah program selesai.



Comments
Post a Comment