Advertisement
agusbd

queuewlinked

Jan 7th, 2018
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.38 KB | None | 0 0
  1. #include <iostream>
  2. #include <string.h>
  3. #include <algorithm>
  4. using namespace std;
  5.  
  6.  
  7.  
  8. struct  mobil{
  9.         int jumlah_antrian;//untuk kepala saja
  10.         char nama[30];
  11.         char plat[30];
  12.         void print_info(){
  13.             cout<<nama<<" \t "<<plat<<endl;
  14.         };
  15.         mobil *next;
  16. };
  17.  
  18.  
  19. mobil *kepala, *ekor;
  20.  
  21.  
  22. void buat_queue(){
  23.  
  24.       kepala = new mobil();
  25.       kepala->jumlah_antrian = 0;
  26.  
  27. }
  28.  
  29. bool queueIsEMpety(){
  30.     return (kepala->jumlah_antrian == 0);
  31.     };
  32.  
  33. void enque(mobil *data){
  34.  
  35.     if(queueIsEMpety()){
  36.             kepala -> next = ekor = data;
  37.  
  38.     }else{
  39.         ekor->next = data;
  40.         ekor = data;
  41.     }
  42.  
  43.     kepala->jumlah_antrian++;
  44. }
  45.  
  46. mobil * deque(){
  47.         mobil *hasil = kepala;
  48.         kepala = kepala->next;
  49.         kepala->jumlah_antrian--;
  50.         return hasil;
  51. }
  52.  
  53.  
  54. void baca(){
  55.         mobil *bantu = kepala ->next;
  56.         int i = 0;
  57.        while(bantu != NULL){
  58.          cout<< ++i << ". ";bantu->print_info();
  59.         bantu = bantu->next;
  60.        }
  61. }
  62.  
  63.  
  64.  
  65. void  sorting(){
  66.  
  67.  
  68.     //create copy of data;
  69.     int jumlahData = kepala->jumlah_antrian;
  70.     mobil *data[jumlahData];
  71.     mobil *bantu = kepala;
  72.     for(int i = 0; i<jumlahData; i++ ){
  73.         data[i] = bantu->next;
  74.         bantu = bantu->next;
  75.     }
  76.  
  77.  
  78.  
  79.  
  80.     // sort with bubble sort
  81.  
  82.     for(int i  = 0 ; i< jumlahData; i++){
  83.         for(int j = 0 ; j < jumlahData -1 ; j++){
  84.  
  85.             if(strcmp(data[j]->nama,data[j+1]->nama)> 0 )
  86.                 swap(data[j],data[j+1]);
  87.         }
  88.     }
  89.  
  90.  
  91.     //print
  92.  
  93.  
  94.     for(int i = 0; i<jumlahData; i++ ){
  95.         cout<< i +1 <<". ";data[i]->print_info();
  96.     }
  97.  
  98.  
  99.  
  100.  
  101.  
  102. }
  103.  
  104. void cari(char target[30]){
  105.  
  106.  
  107.     mobil *bantu = kepala;
  108.     bool found;
  109.     while((bantu= bantu->next) != NULL)
  110.         if(strcmp(target,bantu->nama)==0){
  111.                     found = true;
  112.                     break;
  113.         }
  114.  
  115.  
  116.     if(found)
  117.         bantu->print_info();
  118.     else
  119.         cout<<target<<" tidak ada dalam antrian"<<endl;
  120.  
  121.  
  122.  
  123.  
  124.  
  125. }
  126.  
  127.  
  128. void input(){
  129.         int num;
  130.         mobil *tmp = new mobil();
  131.         cout<<"Nama mobil : ";cin>>tmp->nama;
  132.         cout<<"Nomor plat : ";cin>>tmp->plat;
  133.         enque(tmp);
  134.  
  135. }
  136.  
  137.  
  138.  
  139.  
  140.  
  141.  
  142.  
  143. int main(){
  144.     buat_queue();
  145.     int menu;
  146.     char yn = 'y';
  147.  
  148.     do{
  149.     cout<<"Menu"<<endl;
  150.     cout<<"1. Input antrian Mobil "<<endl;
  151.     cout<<"2. Layani antrian pertama "<<endl;
  152.     cout<<"3. Lihat Antrian "<<endl;
  153.     cout<<"4. Cari antrian (nama mobil) "<<endl;
  154.     cout<<"5. sorting (mobil ascending)"<<endl;
  155.     cout<<"Masukan pilihan : ";cin>>menu;
  156.  
  157.     switch(menu){
  158.     case 1  :
  159.         input();
  160.         cout<<"kembali ke menu utama ? <y/n>";cin>>yn;
  161.     break;
  162.     case 2 :
  163.         cout<<"sukses layani antrian pertama! "<<endl;
  164.         deque()->print_info();
  165.         cout<<"kembali ke menu utama ? <y/n>";cin>>yn;
  166.     break;
  167.     case 3:
  168.         if(!queueIsEMpety()) baca(); else cout<<"antrian masih kosong "<<endl;
  169.         cout<<"kembali ke menu utama ? <y/n>";cin>>yn;
  170.     break;
  171.     case 4:
  172.         char nama[30];
  173.         cout<<"masukan nama mobil yang dicari :";cin>>nama;
  174.         cari(nama);
  175.         cout<<"kembali ke menu utama ? <y/n>";cin>>yn;
  176.     break;
  177.     case 5:
  178.         sorting();
  179.         cout<<"kembali ke menu utama ? <y/n>";cin>>yn;
  180.     break;
  181.  
  182.     }
  183.     }while(yn == 'y');
  184.  
  185.  
  186.  
  187. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement