Tugas Struktur Data Imam Syawalulail
Tugas Struktur Data Imam Syawalulail
#include <iostream> using namespace std; struct data { char nama[20]; int npm; float nilai; data* next; data* prev; }; typedef data* pointer; typedef pointer List; void createList(List& First) { First=NULL; } void createElement(pointer& pBaru) { pBaru=new data; cout<<"Data Mahasiswa"<<endl; cout<<"NPM ="; cin>>pBaru->npm; cout<<"Nama ="; cin>>pBaru->nama; cout<<"Nilai ="; cin>>pBaru->nilai; pBaru->next=NULL; pBaru->prev=NULL; } void output(List First) { pointer pBantu; int nmr=1; pBantu=First; cout<<"Nomor\tNPM\tNama\tNilai"<<endl; do{ cout<<nmr<<"\t"; cout<<pBantu->npm<<"\t"; cout<<pBantu->nama<<"\t"; cout<<pBantu->nilai<<endl; nmr++; pBantu=pBantu->next;
}while(pBantu!=First); } void nilaiRata2(List First,float &jumlah,float &rata) { pointer pBantu; float nmr=0; jumlah=0; rata=0; pBantu=First; do{ jumlah=jumlah+pBantu->nilai; nmr++; pBantu=pBantu->next; }while(pBantu!=First); rata=jumlah/nmr; cout<<"Rata-rata ="<<rata; } void nilaiMax(List First, float &max) { pointer pBantu; max=0; int nmr=1; pBantu=First; do{ if(pBantu->nilai>max) { max=pBantu->nilai; } pBantu=pBantu->next; }while(pBantu!=First); do{ if(pBantu->nilai==max) { cout<<endl<<"Nilai Maksimum\n"<<endl<<"Nomor\tNPM\tNama\tNilai"<<endl; cout<<nmr<<"\t"; cout<<pBantu->npm<<"\t"; cout<<pBantu->nama<<"\t"; cout<<pBantu->nilai<<endl; } nmr++; pBantu=pBantu->next; }while(pBantu!=First); } void nilaiMin(List First, float &min) { pointer pBantu;
min=101; int nmr=1; pBantu=First; do{ if(pBantu->nilai<min) { min=pBantu->nilai; } pBantu=pBantu->next; }while(pBantu!=First); do{ if(pBantu->nilai==min) { cout<<"\nNilai Minimum\n"<<endl<<"Nomor\tNPM\tNama\tNilai\n"; cout<<nmr<<"\t"; cout<<pBantu->npm<<"\t"; cout<<pBantu->nama<<"\t"; cout<<pBantu->nilai<<endl; } nmr++; pBantu=pBantu->next; }while(pBantu!=First); } void insertFirst(List &First, pointer &pBaru) { pointer last; if(First==NULL) { First=pBaru; pBaru->next=First; pBaru->prev=First; } else if(First->next==First) { First->next=pBaru; First->prev=pBaru; pBaru->prev=First; pBaru->next=First; First=pBaru; } else { last=First; do { last=last->next; }while(last->next!=First); First->prev=pBaru;
last->next=pBaru; pBaru->next=First; pBaru->prev=last; First=pBaru; } } void insertLast(List &First, pointer &pBaru) { pointer last; if(First==NULL) { First=pBaru; pBaru->next=pBaru; pBaru->prev=pBaru; } else if(First->next==First) { First->next=pBaru; First->prev=pBaru; pBaru->prev=First; pBaru->next=First; } else { last=First; do { last=last->next; }while(last->next!=First); last->next=pBaru; pBaru->prev=last; pBaru->next=First; First->prev=pBaru; } } void deleteFirst(pointer &First, pointer &pHapus) { if(First==NULL) { cout<<"List Tak ADA!!!"<<endl; } else if(First->next==First) { pHapus=First; First=NULL; } else
{ pointer last; last=First; do { last=last->next; }while(last->next!=First); pHapus=First; First=First->next; First->prev=last; last->next=First; pHapus->next=NULL; pHapus->prev=NULL; } } void deleteLast(pointer &First, pointer &pHapus) { if(First==NULL) { cout<<"List Tak ADA!!!"<<endl; } else if(First->next==First) { pHapus=First; First=NULL; } else { pointer last; pHapus=First; do { pHapus=pHapus->next; }while(pHapus->next!=First); last=pHapus->prev; First->prev=last; last->next=First; pHapus->next=NULL; pHapus->prev=NULL; } } void insertBefore(List &First, pointer &pBaru) { char cari[20]; pointer pCari,last; int ketemu=0; pCari=First;
last=First; cout<<"Masukkan nama yang ingin disisipkan sebelumnya = "; cin>>cari; do{ last=last->next; }while(last->next!=First); do{ if(strcmp(pCari->nama,cari)==0) { ketemu=1; if(pCari->prev==last) { last->next=pBaru; First->prev=pBaru; pBaru->prev=last; pBaru->next=First; First=pBaru; } else { pBaru->prev=pCari->prev; pBaru->next=pCari; pCari->prev->next=pBaru; pCari->prev=pBaru; } } pCari=pCari->next; }while(ketemu==0 && pCari!=First); if(ketemu==0) { cout<<"Tidak ada di data!!!"; } } void insertAfter(List &First, pointer &pBaru) { char cari[20]; pointer pCari; int ketemu=0; pCari=First; cout<<"Masukkan nama yang ingin disisipkan setelahnya = "; cin>>cari; do{ if(strcmp(pCari->nama,cari)==0) { ketemu=1; if(pCari->next==First) { First->prev=pBaru;
pBaru->prev=pCari; pCari->next=pBaru; pBaru->next=First; } else { pBaru->prev=pCari; pBaru->next=pCari->next; pCari->next->prev=pBaru; pCari->next=pBaru; } } pCari=pCari->next; }while(ketemu==0 && pCari!=First); if(ketemu==0) { cout<<"Tidak ada di data!!!"; } } void deleteBefore(List &First,pointer &pHapus) { char cari[20]; pointer pCari,last; int ketemu=0; pCari=First; last=First; cout<<"Masukkan nama yang ingin dihapus sebelumnya = "; cin>>cari; do{ last=last->next; }while(last->next!=First); do{ if(strcmp(pCari->nama,cari)==0) { ketemu=1; if(pCari==First) { cout<<"Tidak ada yang dapat dihapus"; } else if(pCari==First->next) { pCari->prev=last; last->next=pCari; First->next=NULL; First->prev=NULL; First=pCari; } else
{ pHapus=pCari->prev; pCari->prev=pHapus->prev; pHapus->prev->next=pCari; pHapus->next=NULL; pHapus->prev=NULL; } } pCari=pCari->next; }while(ketemu==0 && pCari!=First); if(ketemu==0) { cout<<"Tidak ada di data!!!"; } } void deleteAfter(List &First, pointer &pHapus) { char cari[20]; pointer pCari; int ketemu=0; pCari=First; cout<<"Masukkan nama yang ingin disisipkan setelahnya = "; cin>>cari; do{ if(strcmp(pCari->nama,cari)==0) { ketemu=1; pHapus=pCari->next; if(pCari->next==First) { cout<<"Tidak ada yang dapat dihapus"; } else { pCari->next=pHapus->next; pHapus->next->prev=pCari; pHapus->next=NULL; pHapus->prev=NULL; } } pCari=pCari->next; }while(ketemu==0 && pCari!=First); if(ketemu==0) { cout<<"Tidak ada di data!!!"; } }
void deletePcari(List &First) { char cari[20]; pointer pCari,last; int ketemu=0; pCari=First; last=First; cout<<"Masukkan nama yang ingin dihapus sebelumnya = "; cin>>cari; do{ last=last->next; }while(last->next!=First); do{ if(strcmp(pCari->nama,cari)==0) { ketemu=1; if(First->next==First) { pCari=First; First=NULL; } else if(pCari==First) { pCari->next->prev=last; last->next=pCari->next; First=pCari->next; pCari->next=NULL; pCari->prev=NULL; } else { pCari->prev->next=pCari->next; pCari->next->prev=pCari->prev; pCari->next=NULL; pCari->prev=NULL; } } pCari=pCari->next; }while(ketemu==0 && pCari!=First); if(ketemu==0) { cout<<"Tidak ada di data!!!"; } } int main() { pointer pertamax,ilang; List mahasiwa;
int pilih; float jumlah,max,min,rata; char lanjutkan; lanjutkan='y'; createList(mahasiwa); while(lanjutkan=='y') { cout<<" Nama : Imam syawalulail"; cout<<" NPM : 140110100039\n"; cout<<" Program : Membuat data nilai mahasiswa\n\n"; cout<<"Menu:\n"; cout<<"1.Insert First (Penambahan data di awal)\n"; cout<<"2.Insert Before (Penambahan data sebelum suatu data)\n"; cout<<"3.Insert After (Penambahan data setelah suatu data)\n"; cout<<"4.Insert Last (Penambahan data di akhir)\n"; cout<<"5.Delete First (Penghapusan data di awal)\n"; cout<<"6.Delete Before (Penghapusan data sebelum suatu data)\n"; cout<<"7.Delete After (Penghapusan data setelah suatu data)\n"; cout<<"8.Delete pCari (Penghapusan data yang dipilih)\n"; cout<<"9.Delete Last (Penghapusan data di akhir)\n"; cout<<"10.Tampilkan Data\n"; cout<<"11.Nilai Rata-rata\n"; cout<<"12.Nilai Maksimum\n"; cout<<"13.Nilai Minimum\n"; cout<<"14.Exit (Tidak perlu di jelaskan lagi)\n"; cout<<"Pilih nomor (1-10) :"; cin>>pilih; switch(pilih) { case 1: createElement(mahasiwa); insertFirst(pertamax,mahasiwa); break; case 2: createElement(mahasiwa); insertBefore(pertamax,mahasiwa); break; case 3: createElement(mahasiwa); insertAfter(pertamax,mahasiwa); break; case 4: createElement(mahasiwa); insertLast(pertamax,mahasiwa); break; case 5:
deleteFirst(pertamax,ilang); break; case 6: deleteBefore(pertamax,ilang); break; case 7: deleteAfter(pertamax,ilang); break; case 8: deletePcari(pertamax); break; case 9: deleteLast(pertamax,ilang); break; case 10: output(pertamax); break; case 11: nilaiRata2(pertamax,jumlah,rata); break; case 12: nilaiMax(pertamax,max); break; case 13: nilaiMin(pertamax,min); break; case 14: return 0; break; default: cout<<"Tak ada dalam daftar"<<endl; } cout<<endl<<"Lanjutkan (y/n)?"; cin>>lanjutkan; system("cls"); } return 0; } Output :