setelah lama tidak main - main dengan dunia linked list jarang menggunakannya alangkah baiknya saya share ke pada kalain supaya tidak mubadzir ilmunya dan bermanfaat buat kita semua ammin :). berikut ini double linked list ada single dan ada double kalai ini yang double yang akan saya contoh kan . Membuat program Dobule Linked List dengan Operator Delete ada bebarapa macam teknik delete yang ada di double linked list salah satunya delete awal,delete akhir dan delete setelahnya. ini saya menggunakan bahasa C atau C++. tetapi ini juga bisa diterapkan di bahasa lainnya kok misal java,dll.
#include"stdio.h"
#include"stdlib.h"
void alokasi();
void awal();
void cetak();
void menu();
//void target();
void del_awal();
void del_after();
void del_akhir();
typedef struct simpul Node;
struct simpul
{
int data;
Node *next;
Node *prev;
};
int nilai;
char jawab;
Node *head;
Node *p, *before, *x, *prevhapus, *tail,*hapus,*after;
main()
{ char pil;
do
{
system("cls");
menu();
fflush(stdin);
printf("\n kembali ke menu utama (y/t) \n");
pil=getchar();
}while(pil=='y'||pil=='Y');
}
void menu()
{ char pil;
printf("\t delete data double list\n");
puts("create by achmad sayfudin\n");
puts("data yang ada ");
cetak();
puts("\t menu:");
puts("1. insert awal");
puts("2. delete awal");
puts("3. delete after");
puts("4. delete akhir");
//puts("5. delete target");
puts("6. cetak");
fflush(stdin);
printf("\nmasukan pilihan :> ");
pil=getchar();
if(pil=='1')
awal();
else if(pil=='2')
del_awal();
else if(pil=='3')
del_after();
else if(pil=='4')
del_akhir();
//else if(pil=='5')
//target();
else if(pil=='6')
cetak();
}
void alokasi()
{ fflush(stdin);
printf("nilai=");
scanf("%d",&nilai);
p=(Node *)malloc(sizeof(Node));
if(p==NULL)
{
puts("<<----- data-blogger-escaped-boss="" data-blogger-escaped-memori="" data-blogger-escaped-penuh="">>");
exit(0);
}
p->data=nilai;
p->next=NULL;
p->prev=NULL;
}
void awal()
{
char pil;
fflush(stdin);
do
{alokasi();
if(head==NULL)
{head=p; }
else
{p->next=head;
head->prev=p;
head=p;}
fflush(stdin);
printf("input lagi = ");
pil=getchar();
}while(pil=='y'||pil=='Y');
}
void cetak()
{
Node *baca;
baca=head;
while(baca!=NULL){
printf("nilai %d \n",baca->data);
baca=baca->next;
}
}
void del_awal()
{
//data tunggal
if((head!=NULL)&&(head->next==NULL))
{
head->next=NULL;
//puts("tak ada data yang dihapus");
}
//data banyak
if(head!=NULL)
{
hapus=head;
head=hapus->next;
hapus->prev=NULL;
}
free(hapus);
hapus=NULL;
}
void del_after()
{
int cari;
printf("cari data= ");
scanf("%d",&cari);
after=head;
while(after->data!=cari)
{ //prevhapus=after;
if(after->next==NULL)
{printf("tak ada data yang dihapus");}
else
after=after->next;//update
}
if(after->next==NULL)
puts("tak ada data yang dihapus");
else{
hapus=after->next;
//cek data diakhir
if(hapus->next==NULL)
after->next=NULL;
else
{
after->next=hapus->next;
hapus->next->prev=after;
}
free(hapus);
hapus=NULL;
printf("data %d berhasil dihapus\n",cari);
}
}
void del_akhir()
{
hapus=head;
if(head!=NULL)
if(head->next==NULL)//data tunggal
{del_awal();}
else
{
while(hapus->next!=NULL)
{hapus=hapus->next;}//update
hapus->prev->next=NULL;
}
free(hapus);
hapus=NULL;
}
/*void target()
{
int cari;
printf("cari data= ");
scanf("%d",&cari);
x=head;
while(x->data!=cari)
{ if(x->next==NULL)
exit(1);
else
prevx=x;
x=x->next;
}
prevx->next=x->next;
free(x);
x=NULL;
}*/
untuk outputnya bisa dijalankan sendiri di komputer masing-masing dengan kompiler kesukaan anda ok ? jika ada yang ditanyakan silakan komen ya terima kasih . Oya untuk programnya bisa di download disini.
luntas ilmu |