TUJUAN
Dosen mereview pemahaman mahasiswa tentang Array dan Struct, Single Linked List tipe LIFO dan FIFO serta Double Linked List
Soal 1: Array dan Struct
Buatlah sebuah project dengan nama Soal_1_nama_anda dan empty file Soal_1_nama_anda. Kemudian buatlah program untuk sebuah struct yang berisi:
[A] Informasi jadwal pesawat terbang. Elemen dari informasi tersebut adalah Nama Maskapai, Kode Pesawat, Tanggal Bulan Tahun Jadwal terbang, Jam dan Menit Jadwal terbang, Kota Asal, Kota Tujuan
[B] Informasi data penduduk pada suatu daerah. Elemen dari informasi tersebut adalah Nama Daerah, Kecamatan, Provinsi, Jumlah Penduduk, Rata-rata umur penduduk, Rata-rata pekerjaan penduduk
[C] Informasi sebuah berita. Elemen dari informasi tersebut adalah Tanggal, Bulan, Tahun, Judul Berita, Nama Penulis, Nama Editor.
[D] Informasi paket data internet. Elemen dari informasi tersebut adalah Nama Provider, Nama Paket, Kuota, Harga, Tanggal berlaku, Bulan berlaku, dan Tahun berlaku
[E] Informasi barang di supermarket. Elemen dari informasi tersebut adalah Nama Barang, Produsen, Kota Produksi, Kode Produk, Harga, Jumlah Stok
Parameter Penilaian:
- Program memiliki struct dengan elemen, tipe data, dan jumlah array yang benar [33]
- Program bisa menginputkan data struct [33]
- Program bisa menampilkan data struct [33]
- Tampilan program rapi [1]
#include <stdio.h> #include <conio.h> #include <stdlib.h> struct penduduk { char daerah[20],kec[20],prov[20],pekerjaan[20]; int jumlah,umur; }; main() { struct penduduk a; char dummy[999]; printf("Masukkan Nama Daerah \t\t: ");gets(a.daerah); printf("Masukkan Nama Kecamatan \t: ");gets(a.kec); printf("Masukkan Nama Provinsi \t\t: ");gets(a.prov); printf("Masukkan Jumlah Penduduk \t: ");gets(dummy);a.jumlah=atoi(dummy); printf("Masukkan Rata-rata umur \t: ");gets(dummy);a.umur=atoi(dummy); printf("Masukkan Rata-rata pekerjaan \t: ");gets(a.pekerjaan); printf("\n\nData Penduduk\n"); printf("====================================================================\n"); printf("Daerah\t|Kecamatan\t|Provinsi\t|Jumlah\t|Umur\t|Pekerjaan\t|\n"); printf("====================================================================\n"); printf("%s\t|%s\t|%s\t\t|%d\t|%d\t|%s\n",a.daerah,a.kec,a.prov,a.jumlah,a.umur,a.pekerjaan); }
Soal 2: Single Linked List tipe LIFO dan FIFO
Buatlah sebuah project dengan nama Soal_2_nama_anda dan empty file Soal_2_nama_anda. Kemudian, modifikasi hasil coding pada Soal 1 dengan menjadikannya Struct of Pointer Single Linked List yang datanya bisa ditampilkan untuk maksimal 5 node Linked List.
Parameter Penilaian:
- Isi data dituliskan dengan benar dan bisa membatasi hanya 5 node [20]
- Berhasil menampilkan dalam bentuk LIFO [20]
- Berhasil menampilkan dalam bentuk FIFO [20]
- Bisa melakukan proses sisip diawal untuk FIFO saja [10]
- Bisa melakukan proses sisip diakhir untuk FIFO saja [10]
- Bisa melakukan proses sisip setelah node tertentu untuk FIFO saja [10]
- Bisa melakukan proses hapus node untuk FIFO saja [10]
#include <stdio.h> #include <conio.h> #include <stdlib.h> struct penduduk { char daerah[20],kec[20],prov[20],pekerjaan[20]; struct penduduk *next,*prev; int jumlah,umur; }; struct penduduk *first,*backup,*buffer,*tail,*sisip; void sisip_awal(); void sisip_akhir(); void sisip_tengah(); void delete(); main() { char dummy[999],t[5]; int j=1,pilih; first=(struct penduduk*)malloc(sizeof(struct penduduk)); printf("Masukkan Nama Daerah \t\t: ");gets(first->daerah); printf("Masukkan Nama Kecamatan \t: ");gets(first->kec); printf("Masukkan Nama Provinsi \t\t: ");gets(first->prov); printf("Masukkan Jumlah Penduduk \t: ");gets(dummy);first->jumlah=atoi(dummy); printf("Masukkan Rata-rata umur \t: ");gets(dummy);first->umur=atoi(dummy); printf("Masukkan Rata-rata pekerjaan \t: ");gets(first->pekerjaan); first->next=NULL; first->prev=NULL; printf("Insert more data? (y/n)"); gets(t); puts(""); if ((strcmp(t,"Y")==0||strcmp(t,"y")==0)) { buffer=(struct penduduk*)malloc(sizeof(struct penduduk)); first->next=buffer; buffer->prev=first; } else { first->next=NULL; } while((strcmp(t,"Y")==0||strcmp(t,"y")==0)) { j++; printf("Masukkan Nama Daerah \t\t: ");gets(buffer->daerah); printf("Masukkan Nama Kecamatan \t: ");gets(buffer->kec); printf("Masukkan Nama Provinsi \t\t: ");gets(buffer->prov); printf("Masukkan Jumlah Penduduk \t: ");gets(dummy);buffer->jumlah=atoi(dummy); printf("Masukkan Rata-rata umur \t: ");gets(dummy);buffer->umur=atoi(dummy); printf("Masukkan Rata-rata pekerjaan \t: ");gets(buffer->pekerjaan); tail=buffer; tail->next=NULL; printf("Insert more data? (y/n)"); gets(t); puts(""); if (j==5) { strcpy(t,"n"); } if ((strcmp(t,"Y")==0||strcmp(t,"y")==0)) { tail=(struct penduduk*)malloc(sizeof(struct penduduk)); buffer->next=tail; tail->prev=buffer; buffer=tail; } } printf("1. Tampilkan sebagai FIFO :\n"); printf("2. Tampilkan sebagai FILO :\n"); printf("x. Exit\n"); printf("Enter your choice : ");gets(dummy);pilih=atoi(dummy); if(pilih==1) { backup=first; printf("\n\nData Penduduk\n"); printf("====================================================================\n"); printf("Daerah\t|Kecamatan\t|Provinsi\t|Jumlah\t|Umur\t|Pekerjaan\t|\n"); printf("====================================================================\n"); while(backup!=NULL) { printf("%s\t|%s\t|%s\t\t|%d\t|%d\t|%s\n",backup->daerah,backup->kec,backup->prov,backup->jumlah,backup->umur,backup->pekerjaan); backup=backup->next; } } else if (pilih==2) { printf("\n\nData Penduduk\n"); printf("====================================================================\n"); printf("Daerah\t|Kecamatan\t|Provinsi\t|Jumlah\t|Umur\t|Pekerjaan\t|\n"); printf("====================================================================\n"); while(buffer!=NULL) { printf("%s\t|%s\t|%s\t\t|%d\t|%d\t|%s\n",buffer->daerah,buffer->kec,buffer->prov,buffer->jumlah,buffer->umur,buffer->pekerjaan); buffer=buffer->prev; } exit(0); } else { exit(0); } printf("\n\n\n"); printf("1. Sisip di awal :\n"); printf("2. Sisip di akhir :\n"); printf("3. Sisip di tengah:\n"); printf("4. Delete:\n"); printf("x. Exit\n"); printf("Enter your choice : ");gets(dummy);pilih=atoi(dummy); if(pilih==1) { sisip_awal(); } else if(pilih==2) { sisip_akhir(); } else if(pilih==3) { sisip_tengah(); } else if(pilih==4) { delete(); } printf("\n\nData Penduduk\n"); printf("====================================================================\n"); printf("Daerah\t|Kecamatan\t|Provinsi\t|Jumlah\t|Umur\t|Pekerjaan\t|\n"); printf("====================================================================\n"); while(first!=NULL) { printf("%s\t|%s\t|%s\t\t|%d\t|%d\t|%s\n",first->daerah,first->kec,first->prov,first->jumlah,first->umur,first->pekerjaan); first=first->next; } } void sisip_awal() { char dummy[999]; sisip=(struct penduduk*)malloc(sizeof(struct penduduk)); printf("Masukkan Nama Daerah \t\t: ");gets(sisip->daerah); printf("Masukkan Nama Kecamatan \t: ");gets(sisip->kec); printf("Masukkan Nama Provinsi \t\t: ");gets(sisip->prov); printf("Masukkan Jumlah Penduduk \t: ");gets(dummy);sisip->jumlah=atoi(dummy); printf("Masukkan Rata-rata umur \t: ");gets(dummy);sisip->umur=atoi(dummy); printf("Masukkan Rata-rata pekerjaan \t: ");gets(sisip->pekerjaan); sisip->next=first; //sisip->prev=NULL; //first->prev=sisip; first=sisip; } void sisip_akhir() { char dummy[999]; backup=first; sisip=(struct penduduk*)malloc(sizeof(struct penduduk)); printf("Masukkan Nama Daerah \t\t: ");gets(sisip->daerah); printf("Masukkan Nama Kecamatan \t: ");gets(sisip->kec); printf("Masukkan Nama Provinsi \t\t: ");gets(sisip->prov); printf("Masukkan Jumlah Penduduk \t: ");gets(dummy);sisip->jumlah=atoi(dummy); printf("Masukkan Rata-rata umur \t: ");gets(dummy);sisip->umur=atoi(dummy); printf("Masukkan Rata-rata pekerjaan \t: ");gets(sisip->pekerjaan); while(backup->next!=NULL) { backup=backup->next; } backup->next=sisip; sisip->next=NULL; } void sisip_tengah() { char sisip2[20],dummy[999]; printf("Sisipkan setelah daerah : ");gets(sisip2); backup=first; sisip=(struct penduduk*)malloc(sizeof(struct penduduk)); printf("Masukkan Nama Daerah \t\t: ");gets(sisip->daerah); printf("Masukkan Nama Kecamatan \t: ");gets(sisip->kec); printf("Masukkan Nama Provinsi \t\t: ");gets(sisip->prov); printf("Masukkan Jumlah Penduduk \t: ");gets(dummy);sisip->jumlah=atoi(dummy); printf("Masukkan Rata-rata umur \t: ");gets(dummy);sisip->umur=atoi(dummy); printf("Masukkan Rata-rata pekerjaan \t: ");gets(sisip->pekerjaan); while(backup!=NULL) { if(strcmp(sisip2,backup->daerah)==0) { sisip->next=backup->next; backup->next=sisip; } backup=backup->next; } } void delete() { char hapus2[20],dummy[999]; printf("Hapus daerah : ");gets(hapus2); backup=first; while(backup->next!=NULL) { if(strcmp(hapus2,backup->daerah)==0) { backup->prev=backup->prev->prev; backup->next=backup->next->next; free(backup); } backup=backup->next; } }
Soal 3: Double Linked List
Buatlah sebuah project dengan nama Soal_3_nama_anda dan empty file Soal_3_nama_anda. Kemudian, modifikasi hasil coding pada Soal 2 dengan menjadikannya Struct of Pointer Double Linked List yang datanya bisa ditampilkan untuk maksimal 5 node Linked List.
Parameter Penilaian:
- Isi data dituliskan dengan benar dan bisa membatasi hanya 5 node [20]
- Berhasil menampilkan dalam bentuk LIFO [40]
- Berhasil menampilkan dalam bentuk FIFO [40]
Note : Secara tidak sengaja, program untuk soal 2 dan 3 jadi sama :hammer
#include <stdio.h> #include <conio.h> #include <stdlib.h> struct penduduk { char daerah[20],kec[20],prov[20],pekerjaan[20]; struct penduduk *next,*prev; int jumlah,umur; }; struct penduduk *first,*backup,*buffer,*tail,*sisip; void sisip_awal(); void sisip_akhir(); void sisip_tengah(); void delete(); main() { char dummy[999],t[5]; int j=1,pilih; first=(struct penduduk*)malloc(sizeof(struct penduduk)); printf("Masukkan Nama Daerah \t\t: ");gets(first->daerah); printf("Masukkan Nama Kecamatan \t: ");gets(first->kec); printf("Masukkan Nama Provinsi \t\t: ");gets(first->prov); printf("Masukkan Jumlah Penduduk \t: ");gets(dummy);first->jumlah=atoi(dummy); printf("Masukkan Rata-rata umur \t: ");gets(dummy);first->umur=atoi(dummy); printf("Masukkan Rata-rata pekerjaan \t: ");gets(first->pekerjaan); first->next=NULL; first->prev=NULL; printf("Insert more data? (y/n)"); gets(t); puts(""); if ((strcmp(t,"Y")==0||strcmp(t,"y")==0)) { buffer=(struct penduduk*)malloc(sizeof(struct penduduk)); first->next=buffer; buffer->prev=first; } else { first->next=NULL; } while((strcmp(t,"Y")==0||strcmp(t,"y")==0)) { j++; printf("Masukkan Nama Daerah \t\t: ");gets(buffer->daerah); printf("Masukkan Nama Kecamatan \t: ");gets(buffer->kec); printf("Masukkan Nama Provinsi \t\t: ");gets(buffer->prov); printf("Masukkan Jumlah Penduduk \t: ");gets(dummy);buffer->jumlah=atoi(dummy); printf("Masukkan Rata-rata umur \t: ");gets(dummy);buffer->umur=atoi(dummy); printf("Masukkan Rata-rata pekerjaan \t: ");gets(buffer->pekerjaan); tail=buffer; tail->next=NULL; printf("Insert more data? (y/n)"); gets(t); puts(""); if (j==5) { strcpy(t,"n"); } if ((strcmp(t,"Y")==0||strcmp(t,"y")==0)) { tail=(struct penduduk*)malloc(sizeof(struct penduduk)); buffer->next=tail; tail->prev=buffer; buffer=tail; } } printf("1. Tampilkan sebagai FIFO :\n"); printf("2. Tampilkan sebagai FILO :\n"); printf("x. Exit\n"); printf("Enter your choice : ");gets(dummy);pilih=atoi(dummy); if(pilih==1) { backup=first; printf("\n\nData Penduduk\n"); printf("====================================================================\n"); printf("Daerah\t|Kecamatan\t|Provinsi\t|Jumlah\t|Umur\t|Pekerjaan\t|\n"); printf("====================================================================\n"); while(backup!=NULL) { printf("%s\t|%s\t|%s\t\t|%d\t|%d\t|%s\n",backup->daerah,backup->kec,backup->prov,backup->jumlah,backup->umur,backup->pekerjaan); backup=backup->next; } } else if (pilih==2) { printf("\n\nData Penduduk\n"); printf("====================================================================\n"); printf("Daerah\t|Kecamatan\t|Provinsi\t|Jumlah\t|Umur\t|Pekerjaan\t|\n"); printf("====================================================================\n"); while(buffer!=NULL) { printf("%s\t|%s\t|%s\t\t|%d\t|%d\t|%s\n",buffer->daerah,buffer->kec,buffer->prov,buffer->jumlah,buffer->umur,buffer->pekerjaan); buffer=buffer->prev; } exit(0); } else { exit(0); } printf("\n\n\n"); printf("1. Sisip di awal :\n"); printf("2. Sisip di akhir :\n"); printf("3. Sisip di tengah:\n"); printf("4. Delete:\n"); printf("x. Exit\n"); printf("Enter your choice : ");gets(dummy);pilih=atoi(dummy); if(pilih==1) { sisip_awal(); } else if(pilih==2) { sisip_akhir(); } else if(pilih==3) { sisip_tengah(); } else if(pilih==4) { delete(); } printf("\n\nData Penduduk\n"); printf("====================================================================\n"); printf("Daerah\t|Kecamatan\t|Provinsi\t|Jumlah\t|Umur\t|Pekerjaan\t|\n"); printf("====================================================================\n"); while(first!=NULL) { printf("%s\t|%s\t|%s\t\t|%d\t|%d\t|%s\n",first->daerah,first->kec,first->prov,first->jumlah,first->umur,first->pekerjaan); first=first->next; } } void sisip_awal() { char dummy[999]; sisip=(struct penduduk*)malloc(sizeof(struct penduduk)); printf("Masukkan Nama Daerah \t\t: ");gets(sisip->daerah); printf("Masukkan Nama Kecamatan \t: ");gets(sisip->kec); printf("Masukkan Nama Provinsi \t\t: ");gets(sisip->prov); printf("Masukkan Jumlah Penduduk \t: ");gets(dummy);sisip->jumlah=atoi(dummy); printf("Masukkan Rata-rata umur \t: ");gets(dummy);sisip->umur=atoi(dummy); printf("Masukkan Rata-rata pekerjaan \t: ");gets(sisip->pekerjaan); sisip->next=first; //sisip->prev=NULL; //first->prev=sisip; first=sisip; } void sisip_akhir() { char dummy[999]; backup=first; sisip=(struct penduduk*)malloc(sizeof(struct penduduk)); printf("Masukkan Nama Daerah \t\t: ");gets(sisip->daerah); printf("Masukkan Nama Kecamatan \t: ");gets(sisip->kec); printf("Masukkan Nama Provinsi \t\t: ");gets(sisip->prov); printf("Masukkan Jumlah Penduduk \t: ");gets(dummy);sisip->jumlah=atoi(dummy); printf("Masukkan Rata-rata umur \t: ");gets(dummy);sisip->umur=atoi(dummy); printf("Masukkan Rata-rata pekerjaan \t: ");gets(sisip->pekerjaan); while(backup->next!=NULL) { backup=backup->next; } backup->next=sisip; sisip->next=NULL; } void sisip_tengah() { char sisip2[20],dummy[999]; printf("Sisipkan setelah daerah : ");gets(sisip2); backup=first; sisip=(struct penduduk*)malloc(sizeof(struct penduduk)); printf("Masukkan Nama Daerah \t\t: ");gets(sisip->daerah); printf("Masukkan Nama Kecamatan \t: ");gets(sisip->kec); printf("Masukkan Nama Provinsi \t\t: ");gets(sisip->prov); printf("Masukkan Jumlah Penduduk \t: ");gets(dummy);sisip->jumlah=atoi(dummy); printf("Masukkan Rata-rata umur \t: ");gets(dummy);sisip->umur=atoi(dummy); printf("Masukkan Rata-rata pekerjaan \t: ");gets(sisip->pekerjaan); while(backup!=NULL) { if(strcmp(sisip2,backup->daerah)==0) { sisip->next=backup->next; backup->next=sisip; } backup=backup->next; } } void delete() { char hapus2[20],dummy[999]; printf("Hapus daerah : ");gets(hapus2); backup=first; while(backup->next!=NULL) { if(strcmp(hapus2,backup->daerah)==0) { backup->prev=backup->prev->prev; backup->next=backup->next->next; free(backup); } backup=backup->next; } }