Home » » Single Linked List Non Circular

Single Linked List Non Circular

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
          }
}

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++;
                  }
  
}

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;                       
     }
}

void hapus_awal(){
 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;
       }
}

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
       };
 }

}

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;
 }
}

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 main()

    {

        int choice, num;

        while (1)

        {
   system("cls");
            cout<<"-----------------"<<endl;

            cout<<"Operations on DLLNC"<<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 : ";

            cin>>choice;

            switch(choice)

            {

            case 1:
    cout<<"Masukkan data : "; cin>>num;
                front_insert(num);
                break;

            case 2:
    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;

            case 5:
    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:

                exit(1);

            default:

                cout<<"Wrong choice"<<endl;

            }

        }

    }
   

0 komentar: