dengan menggunakan struktur data seperti berikut :
- data
- pointer penunjuk elemen setelahnya (next)
- pointer penunjuk elemen sebelumnya (prev)
dalam program ini diperlukan beberapa library yaitu :
#include<stdio.h> #include<stdlib.h>untuk merepresentasikannya bisa seperti ini
typedef struct simpul node; struct simpul { int data; node *prev; node *next; };lalu membuat variabel global untuk head, tail, dan baru
node *head = NULL, *tail = NULL, *baru;lalu buat fungsi untuk alokasi memori, dan disini diperlukan stdlib.h
void allocate_node (int x) { baru = (node *) malloc (sizeof(node)); if(baru==NULL) { printf("Alokasi Gagal\n"); exit(1); } else { baru->data=x; baru->next=NULL; baru->prev=NULL; } }setelah simpul baru dialokasikan, maka simpul baru bisa dibuat :
head = tail = baru;ada beberapa fungsi yang diperlukan untuk menambahkan (menyisipkan) simpul baru, yaitu :
- sisip awal
- sisip akhir
- sisip sebelum
- sisip sesudah
- hapus awal
- hapus akhir
- hapus simpul
- fungsi buat list
void buat_list() { printf("Data Masih Kosong, List akan dibuat dengan data tersebut\n"); system("PAUSE"); head = tail = baru; }
- fungsi sisip awal
void sisip_awal() { if(head==NULL && tail==NULL) buat_list(); else { baru->next=head; head->prev=baru; head=baru; } }
- fungsi sisip akhir
void sisip_akhir() { if(head==NULL && tail==NULL) buat_list(); else { baru->prev=tail; tail->next=baru; tail=baru; } }
- fungsi sisip sebelum
void sisip_sebelum(int s) { node *before=head; int cek=0; if(before->next==NULL) cek=1; else { while(before->next->data!=s) { before=before->next; if(before->next==NULL) { cek = 1; break; } } } if(cek==0) { baru->prev = before; baru->next = before->next; before->next->prev = baru; before->next = baru; } else gatot(); }
- fungsi sisip sesudah
void sisip_sesudah(int s) { node *after=tail; int cek=0; if(after->prev == NULL) cek=1; else { while(after->prev->data!=s) { after=after->prev; if(after->prev==NULL) { cek = 1; break; } } } if(cek==0) { baru->next = after; baru->prev = after->next; after->prev->next = baru; after->prev = baru; } else gatot(); }Lalu untuk menghapus diperlukan beberapa fungsi, yaitu :
- hapus simpul
void free_node(node *p) { free(p); p=NULL; printf("DATA TERHAPUS\n"); }
- hapus satu
void hapus_satu() { node *hapus = head; head = NULL; tail = NULL; free_node(hapus); }
- hapus awal
void hapus_awal() { node *hapus = head; head->next->prev = NULL; head = head->next; free_node(hapus); }
- hapus akhir
void hapus_akhir() { node *hapus = tail; tail->prev->next = NULL; tail = tail->prev; free_node(hapus); }
- hapus simpul tertentu
void hapus_tengah(int s) { node *hapus=head; int cek=0; while(hapus->data!=s) { if(hapus->next==NULL) { cek=1; break; } hapus = hapus->next; } if(cek==0) { hapus->prev->next = hapus->next; hapus->next->prev = hapus->prev; free_node(hapus); } else gadel(); }untuk menampilkan pesan diperlukan fungsi tambahan :
void gatot() { printf("SIMPUL BARU TIDAK DAPAT DISISIPKAN\n"); system("PAUSE"); } void gadel() { printf("TIDAK ADA DATA YANG DIHAPUS\n"); system("PAUSE"); }Dan juga untuk menampilkan data yang berada pada list bisa di representasikan seperti ini :
void tampil() { node *p= head; printf("\nData Simpul ==> "); while(p!=NULL) { printf("%d ", p->data); p=p->next; } printf("\n\n"); }Dan pada main bisa menggunakan code seperti ini :
void main() { head=baru; int pilih, data, s; char lagi='y'; while(lagi=='y') { system("CLS"); awal(); tampil(); printf("Menu Pilihan : \n"); printf("1. Sisip Awal\n"); printf("2. Sisip Akhir\n"); printf("3. Sisip Sebelum Simpul\n"); printf("4. Sisip Sesudah Simpul\n"); printf("5. Hapus Awal\n"); printf("6. Hapus Akhir\n"); printf("7. Hapus Tengah\n"); printf("\nPilih No : "); scanf("%d", &pilih); switch(pilih) { case 1 : printf("Masukkan data : "); scanf("%d", &data); allocate_node(data); sisip_awal(); break; case 2 : printf("Masukkan data : "); scanf("%d", &data); allocate_node(data); sisip_akhir(); break; case 3 : printf("Masukkan data : "); scanf("%d", &data); allocate_node(data); if(head==NULL && tail==NULL) buat_list(); else { printf("Dimasukkan sebelum : "); scanf("%d",&s); if(s==head->data) sisip_awal(); else sisip_sebelum(s); } break; case 4 : printf("Masukkan data : "); scanf("%d", &data); allocate_node(data); if(head==NULL && tail==NULL) buat_list(); else { printf("Dimasukkan sesudah : "); scanf("%d",&s); if(s==tail->data) sisip_akhir(); else sisip_sesudah(s); } break; case 5 : if(head == NULL && tail == NULL) gadel(); else if(head == tail) hapus_satu(); else hapus_awal(); break; case 6 : if(head == NULL && tail == NULL) gadel(); else if(head == tail) hapus_satu(); else hapus_akhir(); break; case 7 : printf("Data yang dihapus : "); scanf("%d", &data); if(head == NULL && tail == NULL) gadel(); else if(data == head->data && data == tail->data && head == tail) hapus_satu(); else if(data == head->data) hapus_awal(); else if(data == tail->data) hapus_akhir(); else hapus_tengah(data); break; } fflush(stdin); printf("Lagi (y/t) ? "); scanf("%c", &lagi); } }system(“PAUSE”) digunakan untuk menghentikan program sejenak.
system(“CLS”) digunakan untuk menghapus layar.
kedua command tersebut membutuhkan <stdlib.h> sama hal nya dengan penggunaan alokasi memori yang menggunakan malloc() , sizeof() , dan free() .
untuk download programnya bisa di download DISINI
Semoga postingan ini dapat bermanfaat dan berguna bagi sobat semua, selamat beraktifitas kembali dan sampai jumpa di postingan yang akan datang :) Trimakasih
panjang codingny hhe
ReplyDeletebtw ni struktur data macam mata kuliah di semester 3 bukan ya :D
keep blogging!
iya gan biar greget, ngga mumet kalo ngga panjang wkwkwk
Deletesemester 5 gan saya dapet ini:)
nnice share gan , numpang ngopi ya hehehe
ReplyDeletesilahkan gan, semoga bermanfaat :)
Deleteijin coba gan
ReplyDeletenice share. ijin coba gan :)
ReplyDeletesilahkan gan, semoga bermanfaat :)
Deleteilmu baru,, ijin coba gann
ReplyDeleteizin bookmark ya gan, harus dipelajari lebih detail nih.
ReplyDeletesip gan, semangat hehe :)
Delete