Rabu, 11 Juni 2014

sorting searching link list



PRAKTIKUM MANDIRI
SORTING dan SEARCHING


Nama   : ISNI FACHRI RIZAL
NIM    : F1D013049

A.  Tujuan
1.   Pengimplementasian Bubble sort dan sequensial search dalam pembuatan program, dengan penyimpanan link list
B.  Permasalahan
1.        Membuat program yang terdiri dari fungsi untuk sorting dan fungsi untuk searching
C.    Gambar Desain Program


D.    Penjelasan Desain
No
OPERASI
DESKRIPSI
C/C++
1
CONSTRUCT
Membuat/membangun link list dengan membuerikn nila 0 pada size, NULL pada head dan tail
Void bangun() {size=0; head=NULL; tail=NULL;};
2
ADD DATA
Untuk memasukan dan menambahkan data ke dalam link list.
void LL::addback (double dt)

3
REMOVE
Untuk menghapus data yang terdapat dalam link list.
void LL::remove (double dt)
4
SORTING
Untuk melakukan pengurutan data yang terdapat pada link list
void LL::bubblesort()
5
SEARCHING
Untuk melakukan pencarian data yang terdapat pada link list
void LL::sequensialsearch (double dt)
6
TAMPIL
Untuk menampilkan data yang terdapat pada link list
void LL::tampil()

E.     Kode Program
#include <iostream>
#include <conio.h>
using namespace std;

class LL{
private:
      struct node{
            double data;
            node*next;
            node*back;
      };
      node*head;
      node*tail;
      int size;
public:
      void bangun(){size=0;head=NULL;tail=NULL;};
      void addback(double dt);
      void remove(double dt);
      void sequensialsearch(double dt);
      void bubblesort();
      void tampil();
};

void LL::addback(double dt){
      node*tmp=new node;
      tmp->data=dt;
      tmp->next=NULL;
      tmp->back=NULL;
      if(size==0){
            head=tmp;
            tail=tmp;
            size++;
      }else{
            tmp->back=tail;
            tail->next=tmp;
            tail=tmp;
            size++;
      }
}

void LL::remove(double dt){
      bool cari;
      node*tmp=head;
      while(tmp!=NULL){
            if(tmp->data==dt){
                  cari=true;
                  break;
            }
            tmp=tmp->next;
      }
      if(cari){
            if(tmp==head){
                  head=head->next;
                  tmp->next=NULL;
                  head->back=NULL;
                  delete tmp;
            }else if(tmp==tail){
                  tail=tail->back;
                  tail->next=NULL;
                  tmp->back=NULL;
                  delete tmp;
            }else{
                  tmp->back->next=tmp->next;
                  tmp->next->back=tmp->back;
                  tmp->back=NULL;
                  tmp->next=NULL;
                  delete tmp;
            }
      }
}

void LL::sequensialsearch(double dt){
      node*tmp=head;
      int a=NULL, b=1;
      while(tmp!=NULL){
            if(tmp->data==dt){
                  a=b;
                  break;
            }
            b++;
            tmp=tmp->next;
      }
      cout<<"data yang anda cari adalah data yang ke-"<<a<<endl;
}

void LL::bubblesort(){
      int a=size;
      node*p;
      node*q;
      node*r=new node;
      for(int i=0;i<a;i++){
            p=head;
            q=p->next;
            while(q!=NULL){
                  if(p->data>q->data){
                        r->data=p->data;
                        p->data=q->data;
                        q->data=r->data;
                  }
                  p=p->next;
                  q=q->next;
            }
      }
}


void LL::tampil(){
      node*tmp=head;
      if(size==0){
            cout<<"KOSONG\n";
      }else{
            while(tmp!=NULL){
                  cout<<tmp->data<<" ";
                  tmp=tmp->next;
            }
      }
      cout<<endl;
}

void main(){
      LL a;
      int b, c, d;
      a.bangun();
      do{
      system("cls");
      cout<<"data yang tersimpan\n";
      a.tampil();
      cout<<"\npilihlah operasi yang ingin anda lakukan\n\n"
            <<"1. Memasukan/Menambahkan data\n"
            <<"2. Menghapus data\n"
            <<"3. Mengurutkan data\n"
            <<"4. Mencari data\n"
            <<"5. Mengakhiri proses\n";
      cin>>b;
      switch(b){
            case 1:
                  cout<<"masukan banyak data : ";cin>>d;
                  for(int i=0;i<d;i++){
                        cout<<"masukan data ke-"<<i<<" : ";cin>>c;
                        a.addback(c);
                  }
                  break;
            case 2:
                  cout<<"data yang ingin di hapus : ";cin>>c;
                  a.remove(c);
                  break;
            case 3:
                  a.bubblesort();
                  break;
            case 4:
                  cout<<"data yang dicari : ";cin>>c;
                  a.sequensialsearch(c);
                  getch();
                  break;
            default:
                  cout<<"Tampilan isi data\n";
                  a.tampil();
      }
      }while(b!=5);
      system ("pause");
}

F.     Tampilan Ketika Dijalankan
Tampilan ketika program pertama kali di jalankan

Tampilan ketika program meminta untuk memasukan data

Tampilan ketika data yang dimasukan telah disimpan
 
Tampilan program setelah melakukan sorting
Tampilan program setelah melakukan searching

Tampilan program ketika di akhiri


G.    Cara Kerja Program
Pertama program akan menampilkan menu pilihan kepada pengguna untuk memilih jenis operasi yang dilakukan.
Kemudian program akan menjalankan selection switch-case untuk melakukan penyeleksian jenis operasi yang ingin dilakukan oleh pengguna.
Jika pengguna memilih menu ke       :
1.      Maka program akan memanggil fungsi addback pada kelas LL yang berfungsi untuk memasukan/menambah isi data
2.      Maka program akan memanggil fungsi remove pada kelas LL yang berfungsi untuk melakukan penghapusan terhadap data yang diinginkan oleh pengguna
3.      Maka program akan memanggil fungsi bubblesort pada kelas LL yang berfungsi untuk melakukan pengueutan data
4.      Maka program akan memanggil fungsi sequensialsearch pada kelas LL yang berfungsi untuk melakukan pencarian terhadap data diinginkan oleh pengguna
5.      Maka program akan menampilkan isi dari data yang terakhir kalinya dan kemudian mengakhiri program.

2 komentar: