Double Link List Circular
struct simpul{
int data;
simpul *next, *prev;
} *awal=NULL,*akhir=NULL,*baru, *bantu, *hapus;
void tambah_awal(int x){ //doubly linked list circular
baru = new simpul; //membuat node baru
baru->data=x; //masukkan data ke node baru
baru->next=NULL;
baru->prev=NULL;
if(awal==NULL){ //apabila belum pernah membuat node, maka awal dan akhir adalah baru
awal = akhir = baru;
baru->next = baru ; //menunjuk ke
baru->prev = baru ; // dirinya sendiri
}
else {
baru->next=awal; //baru->next menunjuk ke awal
awal->prev=baru; //awal->prev menunjuk ke baru
baru->prev=akhir; //baru->prev menunjuk ke akhir
akhir->next=baru; //akhir->next menunjuk ke baru
awal=baru;
}
}
void tambah_akhir(int x){ //doubly linked list circular
baru = new simpul; //membuat node baru
baru->data=x; //masukkan data ke node baru
baru->next=NULL;
baru->prev=NULL;
if(awal==NULL){ //apabila belum pernah membuat node, maka awal dan akhir adalah baru
awal = akhir = baru;
baru->next = baru ; //baru menunjuk ke
baru->prev = baru ; // dirinya sendiri
}
else {
baru->next=awal; //baru->next menunjuk ke awal
awal->prev=baru; //awal->prev menunjuk ke baru
akhir->next=baru; //akhir->next menunjuk baru
baru->prev=akhir; //baru->prev menunjuk ke akhir
akhir=baru; //baru menjadi akhir
}
}
void insert_tengah(int x)
{
int count = 2, pos;
baru=new simpul; //membuat node baru
baru->data=x; //masukkan data ke node
baru->next=NULL;
baru->prev=NULL;
cout<<"Masukan data pada posisi ke = "; cin>>pos; //masukkan node ke posisi
bantu=awal;
while(bantu){
if(count == pos) //berheenti di posisi sebelum node yang akan ditambahkan
{
baru->next=bantu->next; //baru->next mengarah seperti arah bantu->next
bantu->next->prev=baru; //node setelah bantu prevnya mengarah ke node baru
baru->prev=bantu; //baru->prev mengarah ke bantu
bantu->next=baru; //bantu->next mengarah ke baru
break; //menghentikan while-do
}
bantu=bantu->next; //pindah ke node selanjutnya
count++;
}
}
void hapus_posisi(int number){
int count=1;
bantu=awal;
while(bantu!=NULL){
if(count==number-1){ //berhenti di posisi sebelum node yang akan dihapus
hapus=bantu->next; //hapus menjadi node setelah bantu
hapus->next->prev=bantu; //node setelah hapus prevnya mengarah ke bantu
bantu->next=hapus->next; //bantu->next mengarah sama seperti hapus->next
delete hapus; //delete hapus
break;
}
count++;
bantu=bantu->next;
}
}
void hapus_awal(){
if(awal!=akhir){
hapus = awal;
awal = awal->next;
akhir->next = awal;
awal->prev = akhir;
delete hapus;}
else{
awal=akhir=NULL;
}
}
void hapus_akhir(){
if(akhir!=awal){
hapus = akhir;
akhir = akhir->prev;
akhir->next = awal;
awal->prev = akhir;
delete hapus;
}
else{
awal=akhir=NULL;
}
}
void print(){
bantu=awal;
if(awal!=NULL){
do{ //eksekusi terlebih dahulu setelah itu di cek
cout<<"["<<bantu->data<<"] "; //print dimulai dari depan
bantu=bantu->next; //pindah ke belakang dan seterusnya
}while(bantu!=awal); //berhenti ketika bantu sama dengan head
}
}
int main()
{
int choice, num;//declaration variable
while (1)//looping while condition
{
system("cls");//to clear screen
cout<<"1.Insert Depan "<<endl;
cout<<"2.Insert Belakang "<<endl;
cout<<"3.Insert Tengah"<<endl;
cout<<"4.Delete Depan"<<endl;
cout<<"5.Delete Belakang "<<endl;
cout<<"6.Delete Posisi"<<endl;
cout<<"7.Print"<<endl;
cout<<"8.Exit"<<endl;
cout<<"Enter your choice : ";
cin>>choice;//to input the value of choise based on menu
switch(choice)//switch condition
{
case 1://to insert data in forward
cout<<"Masukkan data : "; cin>>num;
tambah_awal(num);
break;
case 2://to insert data in backward
cout<<"Masukkan data : "; cin>>num;
tambah_akhir(num);
break;
case 3://to insert data in middle or in position what user wants
cout<<"Masukkan data : "; cin>>num;
insert_tengah(num);//called function
break;
case 4://to delete data in forward
hapus_awal();//called function
break;
case 5://to delete data or list in backward
hapus_akhir();
break;
case 6://to delete list
cout<<"Hapus data ke "; cin>>num;
hapus_posisi(num);
break;
case 7://to display list
print();
getch();
break;
case 8://to exit program
exit(1);
default://if user not choose of the choices
cout<<"Wrong choice"<<endl;//display the sentence
}
}
}
int data;
simpul *next, *prev;
} *awal=NULL,*akhir=NULL,*baru, *bantu, *hapus;
void tambah_awal(int x){ //doubly linked list circular
baru = new simpul; //membuat node baru
baru->data=x; //masukkan data ke node baru
baru->next=NULL;
baru->prev=NULL;
if(awal==NULL){ //apabila belum pernah membuat node, maka awal dan akhir adalah baru
awal = akhir = baru;
baru->next = baru ; //menunjuk ke
baru->prev = baru ; // dirinya sendiri
}
else {
baru->next=awal; //baru->next menunjuk ke awal
awal->prev=baru; //awal->prev menunjuk ke baru
baru->prev=akhir; //baru->prev menunjuk ke akhir
akhir->next=baru; //akhir->next menunjuk ke baru
awal=baru;
}
}
void tambah_akhir(int x){ //doubly linked list circular
baru = new simpul; //membuat node baru
baru->data=x; //masukkan data ke node baru
baru->next=NULL;
baru->prev=NULL;
if(awal==NULL){ //apabila belum pernah membuat node, maka awal dan akhir adalah baru
awal = akhir = baru;
baru->next = baru ; //baru menunjuk ke
baru->prev = baru ; // dirinya sendiri
}
else {
baru->next=awal; //baru->next menunjuk ke awal
awal->prev=baru; //awal->prev menunjuk ke baru
akhir->next=baru; //akhir->next menunjuk baru
baru->prev=akhir; //baru->prev menunjuk ke akhir
akhir=baru; //baru menjadi akhir
}
}
void insert_tengah(int x)
{
int count = 2, pos;
baru=new simpul; //membuat node baru
baru->data=x; //masukkan data ke node
baru->next=NULL;
baru->prev=NULL;
cout<<"Masukan data pada posisi ke = "; cin>>pos; //masukkan node ke posisi
bantu=awal;
while(bantu){
if(count == pos) //berheenti di posisi sebelum node yang akan ditambahkan
{
baru->next=bantu->next; //baru->next mengarah seperti arah bantu->next
bantu->next->prev=baru; //node setelah bantu prevnya mengarah ke node baru
baru->prev=bantu; //baru->prev mengarah ke bantu
bantu->next=baru; //bantu->next mengarah ke baru
break; //menghentikan while-do
}
bantu=bantu->next; //pindah ke node selanjutnya
count++;
}
}
void hapus_posisi(int number){
int count=1;
bantu=awal;
while(bantu!=NULL){
if(count==number-1){ //berhenti di posisi sebelum node yang akan dihapus
hapus=bantu->next; //hapus menjadi node setelah bantu
hapus->next->prev=bantu; //node setelah hapus prevnya mengarah ke bantu
bantu->next=hapus->next; //bantu->next mengarah sama seperti hapus->next
delete hapus; //delete hapus
break;
}
count++;
bantu=bantu->next;
}
}
void hapus_awal(){
if(awal!=akhir){
hapus = awal;
awal = awal->next;
akhir->next = awal;
awal->prev = akhir;
delete hapus;}
else{
awal=akhir=NULL;
}
}
void hapus_akhir(){
if(akhir!=awal){
hapus = akhir;
akhir = akhir->prev;
akhir->next = awal;
awal->prev = akhir;
delete hapus;
}
else{
awal=akhir=NULL;
}
}
void print(){
bantu=awal;
if(awal!=NULL){
do{ //eksekusi terlebih dahulu setelah itu di cek
cout<<"["<<bantu->data<<"] "; //print dimulai dari depan
bantu=bantu->next; //pindah ke belakang dan seterusnya
}while(bantu!=awal); //berhenti ketika bantu sama dengan head
}
}
int main()
{
int choice, num;//declaration variable
while (1)//looping while condition
{
system("cls");//to clear screen
cout<<"1.Insert Depan "<<endl;
cout<<"2.Insert Belakang "<<endl;
cout<<"3.Insert Tengah"<<endl;
cout<<"4.Delete Depan"<<endl;
cout<<"5.Delete Belakang "<<endl;
cout<<"6.Delete Posisi"<<endl;
cout<<"7.Print"<<endl;
cout<<"8.Exit"<<endl;
cout<<"Enter your choice : ";
cin>>choice;//to input the value of choise based on menu
switch(choice)//switch condition
{
case 1://to insert data in forward
cout<<"Masukkan data : "; cin>>num;
tambah_awal(num);
break;
case 2://to insert data in backward
cout<<"Masukkan data : "; cin>>num;
tambah_akhir(num);
break;
case 3://to insert data in middle or in position what user wants
cout<<"Masukkan data : "; cin>>num;
insert_tengah(num);//called function
break;
case 4://to delete data in forward
hapus_awal();//called function
break;
case 5://to delete data or list in backward
hapus_akhir();
break;
case 6://to delete list
cout<<"Hapus data ke "; cin>>num;
hapus_posisi(num);
break;
case 7://to display list
print();
getch();
break;
case 8://to exit program
exit(1);
default://if user not choose of the choices
cout<<"Wrong choice"<<endl;//display the sentence
}
}
}
No comments:
Post a Comment