Linked List Implementation
Pada dasarnya Link dibagi menjadi beberapa bagian, diantaranya:
Single Linked List, Polynomial Representation, Circular Single Linked List, Doubly Linked List, Circular Doubly Linked List, Header Linked List
* Single Linked List
Contohnya:
#include <stdio.h>
#include <iostream.h>
#include <conio.h>
struct TNode{
int data;
TNode *next;
};
TNode *head, *tail;
void init(){
head = NULL;
tail = NULL;
}
int isEmpty(){
if(tail == NULL) return 1;
else return 0;
}
void insertDepan(int databaru){
TNode *baru;
baru = new TNode;
baru->data = databaru;
baru->next = NULL;
if(isEmpty()==1){
head=tail=baru;
tail->next=NULL;
}
else {
baru->next = head;
head = baru;
}
cout<<“Data masuk\n”;
}
void insertBelakang(int databaru){
TNode *baru,*bantu;
baru = new TNode;
baru->data = databaru;
baru->next = NULL;
if(isEmpty()==1){
head=baru;
tail=baru;
tail->next = NULL;
}
else {
tail->next = baru;
tail=baru;
}
cout<<“Data masuk\n”;
}
void tampil(){
TNode *bantu;
bantu = head;
if(isEmpty()==0){
while(bantu!=NULL){
cout<<bantu->data<<” “;
bantu=bantu->next;
}
} else cout<<“Masih kosong\n”;
}
void hapusDepan(){
TNode *hapus;
int d;
if (isEmpty()==0){
if(head!=tail){
hapus = head;
d = hapus->data;
head = head->next;
delete hapus;
} else {
d = tail->data;
head=tail=NULL;
}
cout<<d<<“terhapus”;
} else cout<<“Masih kosong\n”;
}
void hapusBelakang(){
TNode *bantu,*hapus;
int d;
if (isEmpty()==0){
bantu = head;
if(head!=tail){
while(bantu->next!=tail){
bantu = bantu->next;
}
hapus = tail;
tail=bantu;
d = hapus->data;
delete hapus;
tail->next = NULL;
}else {
d = tail->data;
head=tail=NULL;
}
cout<<d<<” terhapus\n”;
} else cout<<“Masih kosong\n”;
}
void clear()
{
TNode *bantu,*hapus;
bantu = head;
while(bantu!=NULL)
{
hapus = bantu;
bantu = bantu->next;
delete hapus;
}
head = NULL;
printf(“CLEAR”);
}
main()
{
int pil,databaru;
do
{
clrscr();
cout<<endl<<endl;
cout<<” ===========================”<<endl;
cout<<” = PROGRAM LINKED LIST =”<<endl;
cout<<” ===========================”<<endl;
cout<<” = 1. Insert Depan =”<<endl;
cout<<” = 2. Insert Belakang =”<<endl;
cout<<” = 3. Delete Depan =”<<endl;
cout<<” = 4. Delete Belakang =”<<endl;
cout<<” = 5. Tampil Data =”<<endl;
cout<<” = 6. Clear =”<<endl;
cout<<” = 7. Exit =”<<endl;
cout<<” ===========================”<<endl;
cout<<” Masukan Pilihan : “;cin>>pil;
switch (pil)
{
case 1: clrscr();{
cout<<“Masukkan Data = “;
cin>>databaru;
insertDepan(databaru);
break;
}
case 2: clrscr();{
cout<<“Masukkan Data = “;
cin>>databaru;
insertBelakang(databaru);
break;
}
case 3: clrscr();{
hapusDepan();
break;
}
case 4: clrscr();{
hapusBelakang();
break;
}
case 5: clrscr();{
tampil();
break;
}
case 6: clrscr();{
clear();
break;
}
case 7: {
return 0;
break;
}
default : clrscr();{
cout<<“\n Maaf, Pilihan yang anda pilih tidak tersedia!”;
}
}
getch();
}
while(pil!=7);
}
*Polynomial Representation
Polinomial dari : 6×3 + 9×2 + 1
Setiap istilah individu dalam polinom terdiri dari dua bagian, koefisien dan kekuatan. Di sini, 6, 9, 7, dan 1 adalah koefisien dari persyaratan yang masing-masing memiliki 3, 2, 1, dan 0 sebagai kekuatan masing-masing. Setiap istilah polinomial dapat direpresentasikan sebagai simpul dari linked list.
*Circular Single Linked List
Secara sirkuler, node terakhir berisi pointer ke node pertama, Kita bisa memiliki daftar terkait melingkar dan juga daftar ganda yang saling terkait. Tidak ada penyimpanan nilai NULL dalam daftar.
*Doubly Linked List
Daftar ganda atau linked list dua arah adalah data daftar tertaut. Struktur dengan dua link, satu yang berisi referensi ke data berikutnya dan satu yang berisi referensi ke data sebelumnya.
Contohnya:
#include <iostream>//pada aplikasi Dev.C++ compilenya mendukung format iostream seperti ini
#include <conio.h>
#include <stdio.h>
#include <windows.h>//mendukung format system(“CLS”) sebagai peganti clrscr()
using namespace std;//penambahan untuk header iostream
int pilih; void pilihan();
void insert_data();
void hapus_data();
void cetak_data();
struct node
{
int nomorinduk;
char nama [40];
char gender [20];
float nilai;
node *prev, *next;
};
node *baru, *head=NULL, *tail=NULL,*help,*del;
main()//interface monitor
{
do
{
system(“cls”);
cout<<“\tLIN. DOUBLY LINKED LIST”<<endl;
cout<<“\t==========================”<<endl;
cout<<“\t1. INSERT DATA”<<endl;
cout<<“\t2. HAPUS DATA”<<endl;
cout<<“\t3. CETAK DATA”<<endl;
cout<<“\t4. EXIT”<<endl;
cout<<“\tPilihan (1 – 4) : “;
cin>>pilih;
cout<<endl<<endl;
pilihan();
cout<<“===============================”<<endl;
}
while(pilih!=4);
}
void pilihan()//fungsi “pilihan” untuk pemrosesan
{
if(pilih==1)
insert_data();
else if(pilih==2)
hapus_data();
else if(pilih==3)
cetak_data();
else
{
cout<<“EXIT”;
cout<<“\nSampai Jumpa lagi”<<endl;
}
}
void buat_baru()//fungsi membuat data baru
{
baru = new(node);
cout<<“Masukkan Nomor Induk: “;cin>>baru->nomorinduk;
cout<<“Masukkan Nama: “;cin>>baru->nama;
cout<<“Masukkan Gender: “;cin>>baru->gender;
cout<<“Masukkan Nilai: “;cin>>baru->nilai;
cout<<“\n\t—Data telah dimasukkan—“;
cout<<“\n\nPRESS ENTER TO CONTINUE…”;
getch();
baru->prev=NULL;
baru->next=NULL;
}
void insert_data()
{
buat_baru();
if(head==NULL)
{
head=baru;
tail=baru;
}
else
{
baru->next=head;
head->prev=baru;
head=baru;
}
cout<<endl<<endl;
}
void hapus_data()//fungsi penghapusan data
{
int hapus,nomorinduk;
if(head==NULL)
{
cout<<“\nLinked List kosong, \nPenghapusan tidak dapat dilakukan”<<endl;//data yang habis maka tampilannya
}
else
{
hapus=head->nomorinduk;
cout<<“\nData yang dihapus adalah “;//pemilihan data yang akan dihapus
cin>>nomorinduk;
del = head;
head = head->next;
delete del;
}
}
void cetak_data()
{
if (head==NULL)
cout<<“\nData tidak dapat ditemukan!”<<endl;//data yang kosong
else
{
help=head;
while(help!=NULL)
{
cout<<” Nomor Induk : “<<help->nomorinduk;//data akan muncul dengan tampilan
cout<<” Nama : “<<help->nama;
cout<<” Gender : “<<help->gender;
cout<<” Nilai : “<<help->nilai<<endl;
help=help->next;
}
}
getch();
}
*Circular Doubly Linked List
Polanya mirip dengan linked list melingkar tunggal, tapi jumlah pointer di setiap node di sini adalah 2 pointer.
Contoh:
*Header Link List
Sebuah header linked list adalah tipe khusus linked list yang berisi node header di awal daftar. Jadi, dalam sebuah header linked list, START (L) tidak akan mengarah ke simpul pertama dari daftar tapi START (L) akan berisi alamat simpul header.
2 Responses to 02 – Linked List Implementation – 2101676504 – Alexander Michael Oei