struct simpul{
int data;
simpul *next;
} *awal=NULL,*akhir=NULL,*baru, *bantu, *hapus, *temp1, *temp2;
void front_insert(int x){ //single linked list non-circular
baru = new simpul; //membuat node baru
baru->data=x; //masukkan data ke node baru
baru->next=NULL;
if(awal==NULL){ //apabila belum pernah membuat node, maka awal dan akhir adalah baru
awal = akhir = baru;
}
else {
baru->next=awal; //baru->next menunjuk ke awal
awal=baru; //baru menjadi awal
}
}
int data;
simpul *next;
} *awal=NULL,*akhir=NULL,*baru, *bantu, *hapus, *temp1, *temp2;
void front_insert(int x){ //single linked list non-circular
baru = new simpul; //membuat node baru
baru->data=x; //masukkan data ke node baru
baru->next=NULL;
if(awal==NULL){ //apabila belum pernah membuat node, maka awal dan akhir adalah baru
awal = akhir = baru;
}
else {
baru->next=awal; //baru->next menunjuk ke awal
awal=baru; //baru menjadi awal
}
}
void rear_insert(int x){ //doubly linked list circular
baru = new simpul; //membuat node baru
baru->data=x; //masukkan data ke node baru
baru->next=NULL;
if(awal==NULL){ //apabila belum pernah membuat node, maka awal dan akhir adalah baru
awal = akhir = baru;
}
else {
akhir->next=baru; //akhir->next menunjuk baru
akhir=baru; //baru menjadi akhir
}
}
void insert_tengah(int k)
{
int count = 2, pos;
baru=new simpul; //membuat node baru
baru->data=k; //masukkan data ke node
baru->next=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=baru; //bantu->next mengarah ke baru
break; //menghentikan while-do
}
bantu=bantu->next; //pindah ke node selanjutnya
count++;
}
}
baru = new simpul; //membuat node baru
baru->data=x; //masukkan data ke node baru
baru->next=NULL;
if(awal==NULL){ //apabila belum pernah membuat node, maka awal dan akhir adalah baru
awal = akhir = baru;
}
else {
akhir->next=baru; //akhir->next menunjuk baru
akhir=baru; //baru menjadi akhir
}
}
void insert_tengah(int k)
{
int count = 2, pos;
baru=new simpul; //membuat node baru
baru->data=k; //masukkan data ke node
baru->next=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=baru; //bantu->next mengarah ke baru
break; //menghentikan while-do
}
bantu=bantu->next; //pindah ke node selanjutnya
count++;
}
}
void hapus_tengah(int number){
int count=1;
bantu=awal;
while(bantu){
if(count==number-1){ //berhenti di posisi sebelum node yang akan dihapus
hapus=bantu->next; //hapus menjadi node setelah bantu
bantu->next=hapus->next; //bantu->next mengarah sama seperti hapus->next
delete hapus; //delete hapus
break;
}
count++;
bantu=bantu->next;
}
}
int count=1;
bantu=awal;
while(bantu){
if(count==number-1){ //berhenti di posisi sebelum node yang akan dihapus
hapus=bantu->next; //hapus menjadi node setelah bantu
bantu->next=hapus->next; //bantu->next mengarah sama seperti hapus->next
delete hapus; //delete hapus
break;
}
count++;
bantu=bantu->next;
}
}
void hapus_awal(){
hapus = awal;
awal = awal->next;
delete hapus;
}
hapus = awal;
awal = awal->next;
delete hapus;
}
void hapus_akhir(){
bantu=awal;
while(bantu){
if(bantu->next==akhir){
hapus=akhir;
akhir=bantu;
akhir->next=NULL;
delete hapus;
break;
}
bantu=bantu->next;
}
}
bantu=awal;
while(bantu){
if(bantu->next==akhir){
hapus=akhir;
akhir=bantu;
akhir->next=NULL;
delete hapus;
break;
}
bantu=bantu->next;
}
}
void print(){
bantu=awal;
if(awal!=NULL){
while(bantu!=NULL){
cout<<"["<<bantu->data<<"] "; //print dimulai dari depan
bantu=bantu->next; //pindah ke belakang dan seterusnya
};
}
bantu=awal;
if(awal!=NULL){
while(bantu!=NULL){
cout<<"["<<bantu->data<<"] "; //print dimulai dari depan
bantu=bantu->next; //pindah ke belakang dan seterusnya
};
}
}
void sum(){
int total=0;
bantu=awal;
if(awal!=NULL){
while(bantu!=NULL){
total=total+bantu->data;
bantu=bantu->next; //pindah ke belakang dan seterusnya
};
cout<<"\nTotal = ["<<total<<"]"<<endl;
}
}
int total=0;
bantu=awal;
if(awal!=NULL){
while(bantu!=NULL){
total=total+bantu->data;
bantu=bantu->next; //pindah ke belakang dan seterusnya
};
cout<<"\nTotal = ["<<total<<"]"<<endl;
}
}
void highest_value(){
int data;
//data=awal->data;
temp1=awal;
temp2=awal->next;
if(awal!=NULL){
while(temp2!=NULL){
if(temp1->data<temp2->data){
data=temp2->data;
}
temp2=temp2->next; //pindah ke belakang dan seterusnya
};
cout<<"Nilai data terbesar : ["<<data<<"]"<<endl;
}
}
int data;
//data=awal->data;
temp1=awal;
temp2=awal->next;
if(awal!=NULL){
while(temp2!=NULL){
if(temp1->data<temp2->data){
data=temp2->data;
}
temp2=temp2->next; //pindah ke belakang dan seterusnya
};
cout<<"Nilai data terbesar : ["<<data<<"]"<<endl;
}
}
int main()
{
int choice, num;
while (1)
{
system("cls");
cout<<"-----------------"<<endl;
system("cls");
cout<<"-----------------"<<endl;
cout<<"Operations on DLLNC"<<endl;
cout<<"---ueazyqbirydoc---"<<endl;
cout<<"---ueazyqbirydoc---"<<endl;
cout<<"-----------------"<<endl;
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 Tengah"<<endl;
cout<<"7.Print"<<endl;
cout<<"8.Total"<<endl;
cout<<"9.Nilai Terbesar"<<endl;
cout<<"10.Exit"<<endl;
cout<<"Enter your choice : ";
cout<<"8.Total"<<endl;
cout<<"9.Nilai Terbesar"<<endl;
cout<<"10.Exit"<<endl;
cout<<"Enter your choice : ";
cin>>choice;
switch(choice)
{
case 1:
cout<<"Masukkan data : "; cin>>num;
front_insert(num);
break;
cout<<"Masukkan data : "; cin>>num;
front_insert(num);
break;
case 2:
cout<<"Masukkan data : "; cin>>num;
rear_insert(num);
break;
cout<<"Masukkan data : "; cin>>num;
rear_insert(num);
break;
case 3:
cout<<"Masukkan data : "; cin>>num;
insert_tengah(num);
break;
case 4:
hapus_awal();
break;
cout<<"Masukkan data : "; cin>>num;
insert_tengah(num);
break;
case 4:
hapus_awal();
break;
case 5:
hapus_akhir();
break;
hapus_akhir();
break;
case 6:
cout<<"Hapus data ke "; cin>>num;
hapus_tengah(num);
break;
case 7:
print();
getch();
break;
case 8:
sum();
getch();
break;
case 9:
highest_value();
getch();
break;
case 10:
cout<<"Hapus data ke "; cin>>num;
hapus_tengah(num);
break;
case 7:
print();
getch();
break;
case 8:
sum();
getch();
break;
case 9:
highest_value();
getch();
break;
case 10:
exit(1);
default:
cout<<"Wrong choice"<<endl;
}
}
}
0 komentar:
Posting Komentar