Linked List adalah salah satu bentuk struktur data, berisi
kumpulan data
(node) yang tersusun secara sekuensial, saling
sambungmenyambung,
dinamis dan terbatas.
- Linked List sering disebut juga Senarai Berantai
- Linked List saling terhubung dengan bantuan variabel
pointer
- Masing-masing data dalam Linked List disebut dengan node
(simpul) yang
menempati alokasi memori secara dinamis dan biasanya berupa
struct
yang terdiri dari beberapa field.
Single Linked List adalah sebuah LINKED LIST yang
menggunakan sebuah variabel pointer saja untuk menyimpan banyak data dengan
metode LINKED LIST, suatu daftar isi yang saling berhubungan.
Ilustrasi single LINKED LIST:
Pada gambar di atas, data terletak pada sebuah lokasi dalam
sebuah memory, tempat yang disediakan memory untuk menyimpan data disebut node
? simpul, setiap node memiliki pointer ( penunjuk ) yang menunjuk ke node
berikutnya sehingga terbentuk suatu untaian yang disebut single LINKED LIST.
Bila dalam single LINKED LIST pointer hanya dapat bergerak ke satu arah saja,
maju / mundur, kanan / kiri, sehingga pencarian datanya juga hanya satu arah
saja.
Ada 2 Tipe Single Linked List yaitu
· Single
Linked List Circular
· Single
Linked List Non Circular
1. Single Linked
List Circular
Single Linked List Circular adalah Single Linked List yang
pointer nextnya menunjuk pada dirinya sendiri. Jika Single Linked List tersebut
terdiri dari beberapa node,
maka pointer next pada node terakhir akan menunjuk ke node
terdepannya.
Pengertian:
Single : artinya field pointer-nya hanya satu buah saja dan
satu arah.
Circular : artinya pointer next-nya akan menunjuk pada
dirinya sendiri sehingga berputar
Ilustrasi Single Linked List Circular
- Setiap node pada linked list mempunyai field yang berisi
pointer ke node
berikutnya, dan juga
memiliki field yang berisi data.
- Pada akhir linked list, node terakhir akan menunjuk ke
node terdepan
sehingga linked list
tersebut berputar. Node terakhir akan menunjuk lagi
ke head.
PEMBUATAN SINGLE LINKED LIST CIRCULAR
Deklarasi node
Dibuat dari struct berikut ini:
typedef struct TNode{
int data;
TNode *next;
};
Penjelasan:
- Pembuatan struct bernama TNode yang berisi 2 field, yaitu
field data
bertipe integer dan
field next yang bertipe pointer dari TNode
- Setelah pembuatan struct, buat variabel haed yang bertipe
pointer dari
TNode yang berguna
sebagai kepala linked list.
Pembentukan node baru
Digunakan keyword new yang berarti mempersiapkan sebuah node
baru
berserta alokasi memorinya.
TNode *baru;
baru = new TNode;
baru->data = databaru;
baru->next = baru;
SINGLE LINKED LIST CIRCULAR MENGGUNAKAN HEAD
- Dibutuhkan satu buah variabel pointer: head
- Head akan selalu menunjuk pada node pertama
Deklarasi Pointer Penunjuk Kepala Single Linked List
Manipulasi linked list tidak bisa dilakukan langsung ke node
yang dituju,
melainkan harus melalui node pertama dalam linked list.
Deklarasinya sebagai berikut:
TNode *head;
Fungsi Inisialisasi Single LinkedList
void init(){
head = NULL;
}
Function untuk mengetahui kosong tidaknya Single LinkedList
int isEmpty(){
if(head == NULL) return 1;
else return 0;
}
PENAMBAHAN DATA
Penambahan data di depan
Penambahan node baru akan dikaitan di node paling depan,
namun pada saat
pertama kali (data masih kosong), maka penambahan data
dilakukan pada
head nya.
Pada prinsipnya adalah mengkaitkan data baru dengan head,
kemudian head
akan menunjuk pada data baru tersebut sehingga head akan
tetap selalu
menjadi data terdepan. Untuk menghubungkan node terakhir
dengan node
terdepan dibutuhkan pointer bantu.
void insertDepan(int databaru){
TNode *baru,*bantu;
baru = new TNode;
baru->data = databaru;
baru->next = baru;
if(isEmpty()==1){
head=baru;
head->next=head;
}
else {
bantu = head;
while(bantu->next!=head){
bantu=bantu->next;
}
baru->next = head;
head = baru;
bantu->next = head;
}
cout<<"Data masuk\n";
}
Penambahan data di belakang Penambahan data dilakukan di
belakang, namun pada saat pertama kali data langsung ditunjuk pada head-nya.
Penambahan di belakang lebih sulit karena kita membutuhkan pointer bantu untuk
mengetahui data terbelakang, kemudian dikaitkan dengan data baru. Untuk
mengetahui data terbelakang perlu digunakan perulangan.
void insertBelakang (int databaru)
{
TNode *baru,*bantu;
baru = new TNode;
baru->data = databaru;
baru->next = baru;
if(isEmpty()==1){
head=baru;
head->next=head;
}
else {
bantu = head;
while(bantu->next != head){
bantu=bantu->next;
}
bantu->next = baru;
baru->next = head;
}
cout<<"Data masuk\n";
}
“Bagaimana dengan penambahan di tengah?”
MENAMPILKAN DATA
Function untuk menampilkan isi single linked list
void tampil(){ TNode *b;
b = head;
if(isEmpty()==0)
{
do
{
cout<data<<" ";
b=b->next;
}
while(b!=head);
cout<<<"Masih kosong\n";
}
- Function di atas digunakan untuk menampilkan semua isi
list, di mana linked list ditelusuri satu-persatu dari awal node sampai akhir
node. Penelusuran ini dilakukan dengan menggunakan suatu variabel node bantu,
karena pada prinsipnya variabel node head yang menjadi tanda awal list tidak
boleh berubah/berganti posisi.
- Penelusuran dilakukan terus sampai node terakhir ditemukan
menunjuk ke head lagi. Jika belum sama dengan head, maka node bantu akan
berpindah ke node selanjutnya dan membaca isi datanya dengan menggunakan field
next sehingga dapat saling berkait.
- Jika head masih NULL berarti data masih kosong!
PENGHAPUSAN DATA
Function untuk menghapus data terdepan
void hapusDepan ()
{ TNode *hapus,*bantu;
if (isEmpty()==0)
{
int d;
hapus = head; d = head->data;
if(head->next != head){
bantu = head;
while(bantu->next!=head){
bantu=bantu->next;
}
head = head->next;
delete hapus;
bantu->next = head;
}else{
head=NULL;
}
cout<<<" terhapus\n";
}
else cout<<"Masih kosong\n";
}
- Function di atas akan menghapus data teratas (pertama)
yang ditunjuk oleh head pada linked list
- Penghapusan node tidak boleh dilakukan jika keadaan node
sedang ditunjuk oleh pointer, maka harus ditampung dahulu pada variabel hapus
dan barulah kemudian menghapus variabel hapus dengan menggunakan perintah
delete.
- Sebelum data terdepan dihapus, head harus ditunjukkan ke
data sesudahnya terlebih dahulu sehingga
data setelah head lama akan menjadi head baru (data terdepan yang baru).
- Jika head masih NULL maka berarti data masih kosong!
Penghapusan data di belakang:
void hapusBelakang()
{ TNode *hapus,*bantu;
if (isEmpty()==0)
{
int d;
hapus = head;
if(head->next == head){
head = NULL;
}
else
{
bantu = head;
while(bantu->next->next != head){
bantu = bantu->next;
}
hapus = bantu->next;
d = bantu->data;
bantu->next = head;
delete hapus;
}
cout<<<" terhapus\n";
}
else
cout<<"Masih kosong\n";
}
- Membutuhkan pointer bantu dan hapus.
- Pointer hapus digunakan untuk menunjuk node yang akan
dihapus, dan pointer bantu digunakan untuk menunjuk node sebelum node yang
dihapus.
- Pointer bantu akan digunakan untuk menunjuk ke nilai NULL.
- Pointer bantu akan selalu bergerak bersama dengan pointer
hapus tapi letak pointer bantu harus selalu dibelakang pointer hapus.
Function untuk menghapus semua elemen Linked List
void clear(){ TNode *bantu,*hapus;
bantu = head;
while(bantu->next!=head){
hapus = bantu;
bantu = bantu->next;
delete hapus;
}
head = NULL;
}
SINGLE LINKED LIST MENGGUNAKAN HEAD DAN TAIL
- Dibutuhkan dua buah variabel pointer: head dan tail
- Head akan selalu menunjuk pada node pertama, sedangkan
tail akan
selalu menunjuk pada node terakhir.
Inisialisasi LinkedList
TNode *head, *tail;
Fungsi Inisialisasi LinkedList
void init(){
head = NULL;
tail = NULL;
}
Function untuk mengetahui kosong tidaknya LinkedList
int isEmpty(){
if(tail == NULL) return 1;
else return 0;
}
PENAMBAHAN DATA
Pengkaitan node baru ke linked list di depan
Penambahan data baru di depan akan selalu menjadi head.
void insertDepan(int databaru){
TNode *baru;
baru = new TNode;
baru->data = databaru;
baru->next = baru;
if(isEmpty()==1){
head=baru;
tail=baru;
head->next=head;
tail->next=tail;
}
else {
baru->next = head;
head = baru;
tail->next = head;
}
cout<<"Data masuk\n";
}
Penambahan Data di belakang Pada penambahan data di
belakang, data akan selalu dikaitkan dengan tail, karena tail terletak di node
paling belakang. Setelah dikaitkan dengan node baru, maka node baru tersebut
akan menjadi tail.
void tambahBelakang(int databaru){ TNode *baru;
baru = new TNode;
baru->data = databaru;
baru->next = baru;
if(isEmpty()==1){
head=baru;
tail=baru;
head->next=head;
tail->next=tail;
}
else
{
tail->next = baru;
tail = baru;
tail->next = head;
}
cout<<"Data masuk\n";
}
Kelebihan dari Single Linked List dengan Head & Tail
adalah pada penambahan data di belakang, hanya dibutuhkan tail yang mengikat
node baru saja tanpa harus menggunakan perulangan pointer bantu.
Function untuk menampilkan isi linked list:
void tampil(){ TNode *b;
b = head; if(isEmpty()==0)
{
do
{ cout<data<<" ";
b=b->next;
}
while(b!=tail->next);
cout<<<"Masih kosong\n";
}
Pada prinsipnya sama dengan function tampil sebelumnya.
Function untuk menghapus data di depan
void hapusDepan(){ TNode *hapus;
if (isEmpty()==0){ int d;
hapus = head;
d = head->data;
if(head != tail){
hapus = head;
head = head->next;
tail->next = head;
delete hapus;
}else{
head=NULL;
tail=NULL;
}
cout<<<" terhapus\n";
}
else cout<<"Masih kosong\n";
}
- Function di atas akan menghapus data terdepan (pertama)
yang ditunjuk oleh head pada linked list
- Penghapusan node tidak boleh dilakukan jika keadaan node
sedang ditunjuk oleh pointer, maka harus dilakukan penunjukkan terlebih dahulu
dengan variabel hapus pada head, kemudian dilakukan pergeseran ke node
berikutnya sehingga data setelah head menjadi head baru, kemudian menghapus
variabel hapus dengan menggunakan perintah delete.
- Jika tail masih NULL maka berarti data masih kosong!
Function untuk menghapus data di belakang:
Dengan menggunakan Single Linked List ber-Head dan Tail,
pengahapusan data di belakang akan mudah dilakukan, tidak seperti pada Single
Linked List hanya ber-Head saja.
void hapusBelakang(){ TNode *hapus,*bantu;
if (isEmpty()==0){ int d;
if(head == tail){ d = tail->data;
head = NULL;
tail = NULL;
}
else
{
bantu = head;
while(bantu->next != tail){
bantu = bantu->next;
}
hapus = tail;
tail = bantu;
d = hapus->data;
tail->next = head;
delete hapus;
}
cout<<<" terhapus\n";
}
else cout<<"Masih kosong\n";
}
- Function di atas akan menghapus data terbelakang
(terakhir) yang ditunjuk oleh tail pada linked list
- Penghapusan node tidak boleh dilakukan jika keadaan node
sedang ditunjuk oleh pointer, maka harus dilakukan penunjukkan terlebih dahulu
dengan variabel hapus pada tail, kemudian dibutuhkan pointer bantu untuk
membantu pergeseran dari head ke node berikutnya sampai sebelum tail, sehingga
tail dapat ditunjukkan ke bantu tersebut, dan bantu tersebut akan menjadi tail
yang baru. Setelah itu hapus variabel hapus dengan menggunakan perintah delete.
- Jika tail masih NULL maka berarti data masih kosong!
Function untuk menghapus semua elemen LinkedList
void clear(){ TNode *bantu,*hapus;
if(isEmpty() == 0){ bantu = head;
while(bantu->next!=head){
hapus = bantu;
bantu = bantu->next;
delete hapus;
}
head = NULL;
tail = NULL;
}
}
- Menggunakan pointer bantu yang digunakan untuk bergerak
sepanjang
list, dan menggunakan pointer hapus yang digunakan untuk
menunjuk
node-node yang akan dihapus.
- Pada saat pointer hapus menunjuk pada node yang akan
dihapus, pointer
bantu akan bergerak ke node selanjutnya, dan kemudian
pointer hapus
akan didelete.
2. Single Linked List
Non Circular
Pengertian:
Single : artinya field pointer-nya hanya satu buah saja dan
satu arah.
Linked List : artinya node-node tersebut saling terhubung
satu sama lain.
Ilustrasi Linked List
- Setiap node pada linked list mempunyai field yang berisi
pointer ke node
berikutnya, dan juga memiliki field yang berisi data.
- Pada akhir linked list, node terakhir akan menunjuk ke
NULL yang akan
digunakan sebagai kondisi berhenti pada saat pembacaan isi
linked list
Contoh program single linked list non circular tambah list
di depan :
# include<stdio.h>
# include<stdlib.h>
# include<conio.h>
# include<iostream.h>
# include<ctype.h>
# include<string.h>
struct simpul
{
int angka;
struct
simpul*berikut;
} ;
struct simpul *awal=NULL;
int bil;
void tambah_list_didepan(int info);
void isi_list();
void tampil_list();
void hapus_list();
void main ()
{
clrscr();
isi_list();
clrscr();
tampil_list();
hapus_list();
getch();
}
void tambah_list_didepan(int info)
{
struct
simpul *baru;
baru=(struct simpul *)malloc(sizeof(struct simpul));
baru->angka=info;
baru->berikut=awal;
awal=baru;
}
void isi_list()
{
char
jawab;
do
{
clrscr();
cout<<"\ninput bilangan :";
cin>>bil;
tambah_list_didepan(bil);
cout<<"\ntambah data Y/T :" ;
cin>>jawab;
}
while
(toupper(jawab)!='T');
}
void tampil_list()
{
struct
simpul* baca;
int i;
baca=awal;
i=1;
while(baca!=NULL)
{
cout<<"\nbilangan ke-"<<i<<"yang dibaca
:"<<baca->angka;
i++;
baca=baca->berikut;
}
}
void hapus_list()
{
struct
simpul*hapus;
hapus=awal;
while(hapus!=NULL)
{
awal=hapus->berikut;
free(hapus);
hapus=awal;
}
}
Contoh program single linked list non circular tambah di
belakang :
#include <stdio.h>
#include <stdlib.h>
#include <constream.h>
#include <ctype.h>
#include <string.h>
struct siswa
{
char nrp[8],nama[20];
int umur;
float ipk;
};
struct simpul
{
char nrp[8],nama[20];
int umur;
float ipk;
struct simpul
*berikut;
};
struct simpul *awal = NULL, *akhir = NULL;
struct siswa mhs;
void tambah_list_dibelakang(struct siswa info);
void isi_list();
void tampil_list();
void hapus_list();
void main()
{
clrscr();
isi_list();
clrscr();
tampil_list();
hapus_list();
getch();
}
void tambah_list_dibelakang(struct siswa info)
{
struct simpul *baru;
baru = (struct simpul
*) malloc(sizeof(struct simpul));
strcpy (baru ->
nrp,info.nrp);
strcpy (baru ->
nama,info.nama);
baru -> umur =
info.umur;
baru -> ipk = info.ipk;
if (awal == NULL)
{
awal = baru;
}
else
{
akhir -> berikut
= baru;
}
akhir = baru;
akhir -> berikut =
NULL;
}
void isi_list()
{
char jawab;
do
{
clrscr();
cout<<"NRP :
";cin>>mhs.nrp;
cout<<"Nama :
";cin>>mhs.nama;
cout<<"Umur :
";cin>>mhs.umur;
cout<<"IPK :
";cin>>mhs.ipk;
tambah_list_dibelakang(mhs);
cout<<"\nTambah Data [Y/T]? : ";
cin>>jawab;
}
while (toupper(jawab)
!= 'T');
}
void tampil_list()
{
struct simpul *baca;
int i;
baca = awal;
i = 1;
while (baca != NULL)
{
cout<<"Data Ke : "<<i<<endl;
cout<<"NRP :
"<<baca -> nrp<<endl;
cout<<"Nama :
"<<baca -> nama<<endl;
cout<<"Umur :
"<<baca -> umur<<endl;
cout<<"IPK :
"<<baca -> ipk<<endl;
cout<<endl;
i++;
baca = baca ->
berikut;
}
}
void hapus_list()
{
struct simpul *hapus;
hapus = awal;
while (hapus != NULL)
{
awal = hapus ->
berikut;
free (hapus);
hapus = awal;
}
}
Contoh program single linked list non circular tambah list
ditengah :
#include <stdio.h>
#include <constream.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
struct siswa
{
char nama[20];
int umur;
};
struct simpul
{
char nama[20];
int umur;
struct simpul
*berikut;
};
struct simpul *awal=NULL,*akhir=NULL;
struct siswa mhs;
void tambah_list_belakang(struct siswa info);
void isi_list();
void sisip_list(struct simpul *first,struct siswa info,char
posisi[20]);
void sisip_isi_list();
void tampil_list();
void hapus_list();
void main()
{
clrscr();
isi_list();
clrscr();
tampil_list();
sisip_isi_list();
tampil_list();
hapus_list();
getch();
}
void tambah_list_dibelakang(struct siswa info)
{
struct simpul *baru;
baru=(struct
simpul*)malloc(sizeof(struct simpul));
strcpy(baru->nama,info.nama);
baru->umur=info.umur;
if (awal==NULL)
{
awal=baru;
}
else
{
akhir->berikut=baru;
}
akhir=baru;
akhir
->berikut=NULL;
}
void isi_list()
{
char jawab;
do
{
clrscr();
cout<<"Nama: ";gets(mhs.nama);
cout<<"Umur: ";cin>>mhs.umur;
tambah_list_dibelakang(mhs);
cout<<"\nTambah Data [Y/T]: ";
cin>>jawab;
}
while
(toupper(jawab)!='T');
}
void sisip_list(struct simpul *first,struct siswa info,char
posisi[20])
{
struct simpul *bantu,*baru;
baru = new simpul;
strcpy(baru->nama,info.nama);
baru->umur=info.umur;
bantu=first;
do
{
if (strcmp(posisi,bantu->nama)!=0) {bantu=bantu->berikut;}
}
while (bantu!=NULL &&
strcmp(posisi,bantu->nama)!=0);
baru->berikut=bantu->berikut;
bantu->berikut=baru;
}
void sisip_isi_list()
{
char cari[20];
struct siswa ganti;
cout<<"\nInput Data Baru :";
cout<<"\nNama :";gets(ganti.nama);
cout<<"\nUmur :";cin>>ganti.umur;
cout<<"\n";
cout<<"\nData Akan Disisipkan Setelah Nama:
";
gets(cari);
sisip_list(awal,ganti,cari);
}
void tampil_list()
{
struct simpul *baca;
int i;
baca=awal;
i=1;
while(baca!=NULL)
{
cout<<"\nNama : "<<baca->nama;
cout<<"\nUmur : "<<baca->umur;
cout<<"\n";
i++;
baca=baca->berikut;
}
}
void hapus_list()
{
struct simpul *hapus;
hapus=awal;
while(hapus!=NULL)
{
awal=hapus->berikut;
free(hapus);
hapus=awal;
}
}
Contoh program single linked list non circular untuk
menghapus semua list ataupun salah satu dengan menggunakan menu:
#include <constream.h>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
struct nasabah
{
char norek[12];
char nama[25];
char alamat[50];
double saldo;
};
struct simpul
{
char norek[12];
char nama[25];
char alamat[50];
double saldo;
struct simpul
*berikut;
};
struct simpul *awal=NULL, *akhir=NULL;
struct nasabah bank;
void tambah_list_dibelakang(struct nasabah info);
void isi_list();
void sisip_list(struct simpul *first,struct nasabah
info,char posisi[20]);
void sisip_isi_list();
void tampil_list();
void hapus_simpul(char info);
void hapus_data();
void hapus_list();
void menu();
void main()
{
clrscr();
menu();
getch();
}
void menu()
{
int pil;
clrscr();
cout<<"Programmer : Shandy
Johan_6311171"<<endl<<endl;
cout<<"Pilih Transaksi : "<<endl;
cout<<" 1. Isi List"<<endl;
cout<<" 2. Sisip List"<<endl;
cout<<" 3. Tampil List"<<endl;
cout<<" 4. Hapus Salah
Satu"<<endl;
cout<<" 5. Hapus Semua
List"<<endl;
cout<<" 6. Exit"<<endl<<endl;
cout<<"Tentukan Pilihan : ";
cin>>pil;
switch (pil)
{
case 1:
isi_list();
break;
case 2:
sisip_isi_list();
break;
case 3:
tampil_list();
break;
case 4:
hapus_data();
break;
case 5:
hapus_list();
break;
case 6:
clrscr();
gotoxy(21,13);cout<<"Terima Kasih Telah Menggunakan Program
Ini";
break;
}
}
void isi_list()
{
char jawab;
do
{
clrscr();
cout<<"No
Rekening : ";
cin>>bank.norek;
cout<<"Nama :
";
cin>>bank.nama;
cout<<"Alamat :
";
cin>>bank.alamat;
cout<<"Saldo Awal :
";
cin>>bank.saldo;
tambah_list_dibelakang(bank);
cout<<"\n\nTambah Data [Y/T] : ";
cin>>jawab;
}
while
(toupper(jawab)!='T');
menu();
}
void tambah_list_dibelakang(struct nasabah info)
{
struct simpul *baru;
baru = (struct simpul
*) malloc (sizeof(struct simpul));
strcpy (baru ->
norek,info.norek);
strcpy (baru ->
nama,info.nama);
strcpy (baru ->
alamat,info.alamat);
baru -> saldo =
info.saldo;
if (awal == NULL)
{
awal = baru;
}
else
{
akhir -> berikut
= baru;
}
akhir = baru;
akhir -> berikut =
NULL;
}
void tampil_list()
{
clrscr();
struct simpul *baca;
int i;
baca = awal;
i = 1;
while (baca != NULL)
{
cout<<"Data Ke : "<<i<<endl;
cout<<"No
Rekening : "<<baca ->
norek<<endl;
cout<<"Nama :
"<<baca -> nama<<endl;
cout<<"Alamat :
"<<baca -> alamat<<endl;
cout<<"Saldo Awal :
"<<baca -> saldo<<endl;
cout<<endl;
i++;
baca = baca ->
berikut;
}
getch();
menu();
}
void hapus_list()
{
struct simpul *hapus;
hapus = awal;
while (hapus != NULL)
{
awal = hapus ->
berikut;
free(hapus);
hapus = awal;
}
menu();
}
void sisip_list(struct simpul *first, struct nasabah info,
char posisi[20])
{
struct simpul
*bantu,*baru;
baru = new simpul;
strcpy (baru ->
norek,info.norek);
strcpy (baru ->
nama,info.nama);
strcpy (baru ->
alamat,info.alamat);
baru-> saldo =
info.saldo;
bantu = first;
do
{
if
(strcmp(posisi,bantu->norek)!=0)
{
bantu =
bantu->berikut;
}
}
while (bantu !=NULL
& strcmp(posisi,bantu->norek)!=0);
baru->berikut =
bantu -> berikut;
bantu -> berikut =
baru;
}
void sisip_isi_list()
{
char cari[20];
struct nasabah ganti;
clrscr();
cout<<"Input Data Baru"<<endl;
cout<<"No
Rekening : ";
cin>>ganti.norek;
cout<<"Nama :
";
cin>>ganti.nama;
cout<<"Alamat :
";
cin>>ganti.alamat;
cout<<"Saldo Awal :
";
cin>>ganti.saldo;
cout<<endl;
cout<<"Data Akan Disisipkan Setelah No Rekening : ";
gets(cari);
sisip_list(awal,ganti,cari);
menu();
}
void hapus_simpul(char info[20])
{
struct simpul
*bantu,*hapus;
if (awal==NULL) {
cout<<"\n Data List Kosong ";}
else
{
if
(strcmp(awal->norek,info)==0)
{
hapus=awal;
awal=hapus->berikut;
free(hapus);
}
else
{
bantu=awal;
while
((strcmp(info,bantu->berikut->norek)!=0) &&
(bantu->berikut!=NULL))
{
bantu=bantu->berikut;
}
hapus=bantu->berikut;
if (hapus!=NULL)
{
if (hapus!=akhir)
{ bantu->berikut=hapus->berikut;}
else
{
akhir=bantu;
akhir->berikut=NULL;
}
free(hapus);
}
}
}
}
void hapus_data()
{
char cari[20];
char jawab;
clrscr();
cout<<"\nAda data yang akan dihapus
Y/T :";cin>>jawab;
if
(toupper(jawab)=='Y')
{
cout<<"\nNo.Rekening yang akan dihapus :";
gets(cari);
hapus_simpul(cari);
menu();
}
}
RezaMaulana 1401123200
@R16Maulana
Tidak ada komentar:
Posting Komentar