Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <stdlib.h>
- using namespace std;
- struct data{
- string nama;
- int npm;
- };
- struct node{
- int index;
- data data;
- node *next;
- };
- node *baru,*awal=NULL,*akhir=NULL,*bantu,*bantu2;
- int indeks=-1;
- void buatNode(string thisNama,int thisNpm){
- indeks++;
- baru = new node;
- baru->next = NULL;
- baru->index = indeks;
- baru->data.nama = thisNama;
- baru->data.npm = thisNpm;
- if(awal==NULL){
- awal=akhir=baru;
- }else{
- akhir->next = baru;
- akhir=baru;
- }
- }
- void tambahData(){
- string thisNama;
- int thisNpm;
- cout << "Masukkan nama :";
- cin >> thisNama;
- cout << "Masukkan npm :";
- cin >> thisNpm;
- buatNode(thisNama,thisNpm);
- }
- void view(){
- if(indeks!=-1){
- cout << "Data : " << endl;
- cout << "No. \tNPM \t-> \tNAMA \t-> \tINDEX NODE" << endl;
- bantu = awal;
- for(int i=0;i<=indeks;i++){
- cout << i+1 << ". \t" << bantu->data.npm << "\t-> \t" << bantu->data.nama << "\t-> \t" << bantu->index << endl;
- bantu=bantu->next;
- }
- }
- }
- void urutkanMenaik(){
- node *tmp;
- bantu = awal;
- for(int i=0;i<indeks;i++){
- bantu=bantu2=awal;
- while(bantu->next!=NULL){
- if(bantu->data.npm>bantu->next->data.npm){
- tmp = bantu->next;
- bantu->next = bantu->next->next;
- tmp->next = bantu;
- if(bantu==awal){
- awal=bantu2=tmp;
- }else{
- bantu2->next=tmp;
- }
- bantu=tmp;
- }
- bantu2 = bantu;
- bantu = bantu->next;
- }
- }
- }
- void acak(){
- node *tmp;
- bantu = awal;
- for(int i=0;i<indeks;i++){
- bantu=bantu2=awal;
- while(bantu->next!=NULL){
- tmp = bantu->next;
- bantu->next = bantu->next->next;
- tmp->next = bantu;
- if(bantu==awal){
- awal=bantu2=tmp;
- }else{
- bantu2->next=tmp;
- }
- bantu=tmp;
- bantu2 = bantu;
- bantu = bantu->next;
- }
- }
- }
- void urutkanMenurun(){
- node *tmp;
- bantu = awal;
- for(int i=0;i<indeks;i++){
- bantu=bantu2=awal;
- while(bantu->next!=NULL){
- if(bantu->data.npm<bantu->next->data.npm){
- tmp = bantu->next;
- bantu->next = bantu->next->next;
- tmp->next = bantu;
- if(bantu==awal){
- awal=bantu2=tmp;
- }else{
- bantu2->next=tmp;
- }
- bantu=tmp;
- }
- bantu2 = bantu;
- bantu = bantu->next;
- }
- }
- }
- void ulang(){
- indeks = -1;
- awal=akhir=NULL;
- }
- bool cekUrutMenaik(){
- if(indeks == -1 || indeks == 0){
- return true;
- }
- bantu = awal;
- for(int i=0;i<indeks;i++){
- if(bantu->data.npm > bantu->next->data.npm ){
- return false;
- }
- bantu=bantu->next;
- }
- return true;
- }
- bool cekUrutMenurun(){
- if(indeks == -1 || indeks == 0){
- return true;
- }
- bantu = awal;
- for(int i=0;i<indeks;i++){
- if(bantu->data.npm < bantu->next->data.npm ){
- return false;
- }
- bantu=bantu->next;
- }
- return true;
- }
- node *cariTengah(node *awalNode,node *akhirNode){
- if(awalNode == NULL){
- return NULL;
- }
- node *sekarang = awalNode;
- node *depan = awalNode->next;
- while(depan!=akhirNode){
- depan = depan->next;
- if(depan!=akhirNode){
- sekarang = sekarang->next;
- depan = depan->next;
- }
- }
- return sekarang;
- }
- void cari(){
- if(cekUrutMenaik() || cekUrutMenurun()){
- bantu = awal;
- bantu2 = NULL;
- int cariNpm;
- cout << "Masukkan npm yang mau di cari : ";
- cin >> cariNpm;
- do{
- node *tengah = cariTengah(bantu,bantu2);
- if(tengah == NULL){
- cout << "Data kosong" << endl;
- system("pause");
- break;
- }
- if(tengah->data.npm == cariNpm){
- cout << "Data ditemukan pada index ke-" << tengah->index << endl;
- cout << "NPM \t: " << tengah->data.npm << endl << "Nama \t: " << tengah->data.nama << endl;
- system("pause");
- break;
- }
- if(cekUrutMenaik() == true && cekUrutMenurun() == false){
- if(tengah->data.npm < cariNpm){
- bantu = tengah->next;
- }else{
- bantu2 = tengah;
- }
- }else{
- if(tengah->data.npm > cariNpm){
- bantu = tengah->next;
- }else{
- bantu2 = tengah;
- }
- }
- }while(bantu2==NULL || bantu2->next != bantu);
- }else{
- cout << "Data belum urut.. Mohon pilih menu 2 atau 3 untuk mengurutkan..." << endl;
- system("pause");
- }
- }
- void buatData(){
- ulang();
- int jum;
- cout << "Masukkan jumlah data yang ingin di buat : ";
- cin >> jum;
- string nama;
- char huruf = 'a';
- int npm = 1;
- for(int i=1;i<=jum;i++){
- nama = huruf;
- buatNode(nama,npm);
- huruf++;
- npm++;
- }
- }
- int main()
- {
- int menu;
- do{
- system("cls");
- view();
- cout << endl << endl;
- cout << "Menu : " << endl;
- cout << "1. Tambah Data" << endl;
- cout << "2. Urutkan Menaik" << endl;
- cout << "3. Urutkan Menurun" << endl;
- cout << "4. Acak" << endl;
- cout << "5. Ulang" << endl;
- cout << "6. Cari" << endl;
- cout << "7. Buat Data Otomatis" << endl;
- cout << "8. Keluar" << endl;
- cout << "Masukkan menu :";
- cin >> menu;
- if(menu == 1){
- tambahData();
- }else if(menu == 2){
- urutkanMenaik();
- }else if(menu == 3){
- urutkanMenurun();
- }else if(menu == 4){
- acak();
- }else if(menu == 5){
- ulang();
- }else if(menu == 6){
- cari();
- }else if(menu == 7){
- buatData();
- }
- }while(menu != 8);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement