tugas laproran(febi,riky,winda,yusup) 2
DESCRIPTION
pemograman lanjutanTRANSCRIPT
Nama Kelompok : Febianto Ramdhani
Riky Hibar Gunawan
Winda Lestari
Yusup Rachman Kruniadi
1.List 2 Kepala
Program Algoritma#include <conio.h>#include <iostream>#include <malloc.h>#include <stddef.h>#include <string.h>#include <stdio.h>
using namespace std;
struct List{int NIK;char Nama[20];float Umur;List *Next;};
List *Head, *Tail;
void AddAkhir(List *Head, List *Tail, int newNIK, char newNama[20], float newUmur){ List *Baru; Baru = new(List); Baru -> NIK = newNIK; strcpy(Baru->Nama,newNama); Baru -> Umur = newUmur; if (Head -> Next == NULL) //List masih kosong { Head -> Next = Baru; } else // List sudah berisi { (Tail->Next)->Next = Baru; } Tail -> Next = Baru; Baru -> Next = NULL;}
void AddAwal(List *Head, List *Tail, int newNIK, char newNama[20], float newUmur){List *Baru;
Baru = new(List); Baru -> NIK = newNIK; strcpy(Baru->Nama,newNama); Baru -> Umur = newUmur; if(Head->Next == NULL){
Head -> Next = Baru;
Type List : < NIK : integer, Nama[20] : String, Umur : Real, Next : ^List>Head : ^ListTail : ^List
Procedure AddAkhir(Input/output Head,Tail:List,input newNIK:integer,newNama[20]:String,newUmur:Real)Kamus Lokal :Baru : ^ListAlgoritma:NIK.^Baru newNIKStringcopy(Nama.^Baru,newNama)Umur.^Baru newUmurIf Next.^Head = NIL {List masih kosong} then Next.^Baru BaruendifElse {sudah berisi} Next.^(Next.^Tail) BaruEndifNext.^Tail BaruNext.^Baru NILEndprocedure
Procedure AddAwal(Input/output Head,Tail:List,input newNIK:integer,newNama[20]:String,newUmur:Real)Kamus Lokal :Baru : ^ListAlgorimta:NIK.^Baru newNIKStringcopy(Nama.^Baru,newNama)Umur.^Baru newUmurIf Next.^Head = NIL then Next.Head Baru Next.^Tail BaruEndif
Tail -> Next = Baru;}else {
Baru -> Next = Head->Next;Head -> Next = Baru;
}}
void ViewList(List *Head, List *Tail){ List *PNow; if (Head->Next == NULL) cout<<"List Kosong\n"; else { PNow = Head -> Next; while (PNow != NULL) { cout<<"NIK : "<<PNow -> NIK<<endl; cout<<"Nama : "<<PNow -> Nama<<endl; cout<<"Umur : "<<PNow -> Umur<<endl; PNow = PNow -> Next; } }}
void SearchList(List *Head, List *Tail, int NIKCari){ //Gunakan algoritma yang ada di diktatbool found = false; List *PNow;PNow = Head->Next;
while((PNow!=NULL) && (!found)){
if (PNow->NIK==NIKCari){found = true;}else{
PNow = PNow->Next;}
}if(found){
cout<<"NIK : "<<PNow -> NIK<<endl; cout<<"Nama : "<<PNow -> Nama<<endl; cout<<"Umur : "<<PNow -> Umur<<endl;}else{
printf("data %d tidak ditemukan !",NIKCari);}}
void DeleteList(List *Head, List *Tail, int NIKHapus){ //Gunakan algoritma yang ada di diktat
Else Next.^Baru Next.^Head Next.^Head BAruEndifendprocedure
Procedure ViewList(output Head,Tail:List)Kamus Lokal:PNow : ^ListAlgoritma :If Next.^Head = NIL then Output(‘List Kosong’)EndifElse PNow Next.^Head While PNow<>NILL do Output(NIK) Output(Nama) Output(Umur) EndwhileEndif
endprocedure
Procedure SearchList(input Head,Tail:List,NIKCari:intger)Kamus Lokal :PNow : ^ListFound : BooleanAlgoritma:found falsePNowNext.^Head
While((PNow<>NILL)And(not found)) do If NIK.^PNow = NIKCari then Foundtrue Endif Else PNowNext.^PNow EndifEndwhile
If found then Output(NIK) Output(Nama) Output(Umur)Endif
Else Output(‘Data NIKCari tidak ditemukan’)Endifendprocedure
Procedure DeleteList(input/output Head,Tail:List,NIKHapus :intger)Kamus Lokal :Hapus,Bantu:^List
Algoritma :
List *Bantu,*Hapus;Hapus = Head->Next;if(Head->Next==NULL){
printf("List Masih Kosong");}else if(Hapus->NIK == NIKHapus){if(Head->Next == Tail->Next){Head->Next = NULL;Tail->Next = NULL;}else{
Head->Next = Hapus->Next;}}else{
Bantu=NULL;while((NIKHapus!=Hapus-
>NIK)&&(Hapus->Next!=NULL)){Bantu=Hapus;Hapus=Hapus->Next;
}if(NIKHapus==Hapus->NIK){
if(Hapus->Next==NULL){Tail->Next=Bantu;Bantu->Next=NULL;
}else{
Bantu->Next=Hapus->Next;
}}else{
printf("simpul yang dihapus tidak ada");
}
}}
void MinMaxList(List *Head, List *Tail){
List *PMin, *PMax; List *PNow; PNow = Head->Next; PMin = PNow; PMax = PNow; if (PNow == NULL)
{printf("List kosong.\n");
} else
{ while (PNow != NULL){
if (PNow->Umur > PMax->Umur) { PMax = PNow; } if (PNow->Umur < PMin->Umur) { PMin = PNow; } PNow = PNow->Next; } printf("Data Umur tertinggi\n");
HapusNext.^HeadIf Next.^Head NILL then Output(‘List Masih Kosong’)EndifElse if NIK.^Hapus=NIKHapus then {pert/tggl} If Next.^Head=Next.^Tail then{tunggal} Next.^HeadNILL Next.^TailNILL Endif Else {simpul pertama} Next.^HeadNext.^Hapus EndifEndifElse {menghapus simpul tengah atau akhir} BantuNILL While((NIKHapus<>NIK.^Hapus)And(Next.^Hapus<>NILL)) do BantuHapus HapusNext.^HapusEndwhile If NIKHapus=NIK.^Hapus then If Next.^Hapus = NILL then{hps akhir} Next.^TailBantu Next.^BantuNILL Endif Else {simpul tengah dihapus} Next.^BantuNext.Hapus Endif Endif else {tidak ditemukan} output(‘simpul yang dihapus tidak ada’) endifendifendprocedure
Procedute MinMaxList(output Head,Tail:List)Kamus Lokal :PMin,Pmax : ^ListPNow : ListAlgoritma:PNowNext.^HeadPMinPNowPMaxPNowIf PNow=NILL then Output(‘List kosong’)EndifElse
While PNow<> NILL do If Umur.^PNow > Umur.^PMax then PMaxPNow Endif If Umut.^PNow < Umur.^PMin then
PMinPNow Endif PNowNext.^PNow endwhile output(‘Data Umur Tertinggi’)
output(NIK)
cout<<"NIK : "<<PMax -> NIK<<endl; cout<<"Nama : "<<PMax -> Nama<<endl; cout<<"Umur : "<<PMax -> Umur<<endl; printf("\nData Umur terrendah\n"); cout<<"NIK : "<<PMin -> NIK<<endl; cout<<"Nama : "<<PMin -> Nama<<endl; cout<<"Umur : "<<PMin -> Umur<<endl; }}
void Rata2Umur(List *Head, List *Tail){
List *PNow;float totUmur,rata;int jmlPNDK;PNow = Head -> Next;totUmur=0;jmlPNDK=0;if(PNow == NULL){
cout<<"List Kosong"<<endl;}
else{while(PNow!=NULL){
totUmur = totUmur + PNow -> Umur;
jmlPNDK = jmlPNDK + 1;
PNow = PNow->Next;}
rata=totUmur/jmlPNDK;cout<<"Rata-rata Umur :
"<<rata<<endl;}
}
int main(){ int Pilih;
//Inisialisasi Head = new(List); Head->Next = NULL; Tail = new(List); Tail->Next = NULL;
do { //clrscr(); cout<<"\n*************************\n"; cout<<"* M E N U U T A M A *\n"; cout<<"* 1. Add Data (di akhir) *\n"; cout<<"* 2. Add Data (di awal) *\n"; cout<<"* 3. View Data *\n"; cout<<"* 4. Search Data *\n";
output(Nama) output(Umur)
output(‘Data Umur terendah’)
output(NIK) output(Nama) output(Umur)
endif endprocedure
Procedure Rata2Umur(output Head,Tail:List)Kamus Lokal :PNow : ListtotUmut,rata :RealjmlPNDK : integeralgoritma:PNowNext.^HeadtotUmur0jmlPNDK0if PNow = NILL then output(‘List Kosong’)endifelse while PNow<>NILL totUmurtotUmur+Umur.^PNow jmlPNDKjmlPNDK+1 PNowNext.^PNow endwhile ratatotUmur/jmlPNDK output(rata)endif endprocedure
Procedure InisialisasiKamus Lokal :Pilih :integerAlgortimaNext.^Head NILLNext.^TailNILLendprocedure
Do
Output("*************************")Output("* M E N U U T A M A *");Output("* 1. Add Data (di akhir) *");Output("* 2. Add Data (di awal) *");Output("* 3. View Data *");Output("* 4. Search Data *");Output("* 5. Delete Data *");
cout<<"* 5. Delete Data *\n"; cout<<"* 6. Min & Max Value *\n"; cout<<"* 7. Rata-rata Umur *\n"; cout<<"* 8. Exit *\n"; cout<<"**********************************\n"; cout<<"Pilih Menu [1/2/3/4/5/6/7] : ";cin>>Pilih;
switch(Pilih) { case 1 : /*1. Add Data (di akhir)*/ { char Lagi ='Y';
do { int inputNIK; char inputNama[20]; int inputUmur; cout<<"Masukan NIK
: ";cin>>inputNIK; cout<<"Masukan Nama
: ";cin>>inputNama; cout<<"Masukan Umur
: ";cin>>inputUmur; AddAkhir(Head,Tail,inputNIK,inputNama,inputUmur); cout<<"Input data Lagi [Y/T] : ";cin>>Lagi; }while (Lagi == 'Y' || Lagi == 'y'); break; } case 2 : /*2. Add Data (di awal) -- Bonus*/ { char Lagi ='Y';
do { int inputNIK; char inputNama[20]; int inputUmur; cout<<"Masukan NIK
: ";cin>>inputNIK; cout<<"Masukan Nama
: ";cin>>inputNama; cout<<"Masukan Umur
: ";cin>>inputUmur; AddAwal(Head, Tail, inputNIK,inputNama,inputUmur); cout<<"Input data Lagi [Y/T] : ";cin>>Lagi; }while (Lagi == 'Y' || Lagi ==
Output("* 6. Min & Max Value *");Output("* 7. Rata-rata IPK *");Output("* 8. Exit *");
Output(“*************************”)Output("Pilih Menu [1/2/3/4/5/6/7] : ")Input (Pilih)
Switch(Pilih)
Case1 : {Add Data (di akhir)}Kamus Lokal : Lagi, inputNama[20]:stringinputNik,inputUmur : integeralgrotima:Lagi ‘Y’
do
Input(inputNIK)Input(inputNama)Input(inputumur)
AddAkhir(head,Tail,inputNIM,inputNama,inputUmur)
Output(“input data lagi [Y/T]”)input(Lagi)Endwhile Lagi = ‘Y’ || Lagi = ‘y’)breakendcase
Case2 : {Add Data (di awal)Kamus Lokal : Lagi, inputNama[20]:stringinputNik,inputUmur : integeralgoritmaLagi ‘Y’
do
Input(inputNIK)Input(inputNama)Input(inputumur)
AddAwal(Head,Tail,inputNIK,inputNama,inputUmur)
Output(“input data lagi [Y/T]”)input(Lagi)
Endwhile Lagi = ‘Y’ || Lagi = ‘y’)Break
'y'); break; } case 3 : /*3. View Data*/ { ViewList(Head, Tail); break; } case 4 : /*4. Search Data berdasarkan NIK*/ { int NIKCari; cout<<"Masukan NIK yang akan dicari : ";cin>>NIKCari; SearchList(Head,Tail,NIKCari); break; } case 5 : /*5. Delete Data berdasarkan NIK*/ {
int NIKHapus; cout<<"Input NIK yang dihapus : ";cin>> NIKHapus;
DeleteList(Head,Tail, NIKHapus);
break; } case 6 :/*6. Min & Max Value - Umur*/ {
MinMaxList(Head,Tail);
break; } case 7 :/*6. Rata-rata Umur*/ { Rata2Umur(Head, Tail); break; } case 8 : cout<<"End of Application!!!";getch();break; default : cout<<"Salah pilih !!!";getch();break; }
}while (Pilih >= 1 && Pilih <= 7); return 0;}
endcase
Case 3: {Vie Data}ViewList(Head,Tail)BreakEndcase
Case 4 : { Search Data berdasarkan NIK)Kamus Lokal :NIKCari : integerAlgortima:Output(“masukan NIK yang akan dicari”)Input(inputNIKCari)searchList(Head,Tail,inputNIKCari)breakendcase
case 5 : {Delete Data berdasarkan NIK}Kamus Lokal :NIKHapus : integerAlgortima:
Input(NIKHapus)
DeleteList(Head,Tail,NIKHapus)BreakEndcase
Case6 : {Min & Max Value – Umur}
MinMaxList(Head,Tail)BreakEndcase
Case 7 : {Rata-rata Umur}Rata2Umur(Head,Tail)BreakEndcase
Case8 : output(“End of Application”)BreakEnd caseEndcase
Endwhile (Pilih >=1 And Pilih <=7)Return0
2.List Sirkuler
AlgoritmaStruktur Data type List : < Info : integer;
Next : ^List > Head : ^List
Procedure InialisasiKamus Lokal :Algoritma :Next.^Head NIL
procedure AddAkhir (input/output Head:List, input Elemen:integer)Kamus Lokal :Baru,PAkhir,PNow : ^ListInfo.^baru ElemenPAkhir NILPNow Next.^Head
If PNow = NIL then Next.^Baru PNow Next.^Head BaruEndifElse While((PNow <> Head) AND (info.^PNow<>info.^Baru))do PAkhir PNow PNow Next.^PNow Endwhile
If PAkhir = NIL then Next.^Baru PNow Next.^Head BaruEndifElse Next.^Baru PNow Next.^PAkhir BaruEndifEndif
Procedure AddAwal (input/output Head :List,input Elemen :Integer)Kamus Lokal : Baru : ^ListAlgoritma :
Info.^Baru ElemenIf Next.^Head = NIL then Next.^Head BaruEndifElse Next.^Baru Next.^Head Next.^Head BaruEndif
Procedure ViewList(output Head :List)Kamus Lokal :PNow : ^ListAlgortima :If Next.^Head = NIL then Output(‘List Kosong’)EndifElsePNow Next.^HeadWhile PNow <> Head doOutput (info.^PNow)PNow Next.^PnowEndwhileendif
Procedure Searchlist(input/output Head :List,NilaiCari : integer)Kamus Lokal : Found : Boolean PNow : ^ListAlgoritma :
Found falsePNow Next.^Head
While PNow <> Head AND not found do If info.^PNow = NilaiCari then Found true Endif Else PNow Next.^PNow EndifEndwhile
If found then Output (info.^PNow)EndifElse Output(‘data NilaiCari tidak ditemukan)endif
Procedure DeleteList(input/output Head :List, input Elemen :Integer)Kamus Lokal : found : Boolean Bantu,Hapus : ^ListAlgoritma :Hapus Next.^HeadIf Next.^Head = NIL Output(‘List Masih Kosong’)Endif
Else if info.^Hapus = Elemen then If Next.^Hapus == Next.^Head Next.^Head NIL Endif Else Bantu Next.^Hapus Next.^HeadBantu EndifEndif
Else Bantu NIL While((Elemen<>info.^Hapus)AND(Next.Hapus<>Head)) BantuHapus Hapus Next.^Hapus Endwhile If Elemen = info.^Hapus then If Next.Hapus = NIL then Next.^Bantu Head Endif Else Next.^Bantu Next.Hapus Endif Endif Else Output(‘simpul yang dhapus tidak ada’) endif
Procedure MinMaxList (input/output Head :List)
Kamus Lokal : PMin,PMax,PNow : ^ListAlgoritma :
PNowNext.^HeadPMinPNowPMaxPNowIf PNow = NIL then Output(‘List Kosong’)EndifElse While PNow <> Head do If info.^PNow > info.^PMax then PMax PNow endif If info.^PNow < info.^PMin then PMin PNow Endif PNow Next.^Pnow EndwhileOutput(‘Data IPK Tertinggi’)Output(info.^PMax)Output(‘Data IPK Terendah’)Output(info.^PMin)
Procedure Rata2IPK(output Head : List)Kamus Lokal : PNow : ^List totIPK,rata : Real jmlMHS : integerAlgoritma :
PNow Next.^HeadtotIPK 0jmlMHS 0
if PNow = NIL then ouput(‘List Kosong’)endifelse while PNow <> Head do totIPK totIPK + info.^PNow jmlMHS jmlMHS +1 PNow Next.^PNow Endwhilerata totIPK/jmlMHSouput(rata)
3.List 2 Pointer Sirkuler
Program Algoritma#include <conio.h>#include <iostream>#include <malloc.h>#include <stddef.h>#include <string.h>#include <stdio.h>
using namespace std;Type List : < NIK : integer,
struct List {int NIK;char Nama[20];float Umur;List *Next;List *Back;
};
List *Head;List *Baru, *PNow;int Pilih;
void AddAkhir (List *Head,int newNIK,char newNama[20],float newUmur){
List *Baru;Baru = new(List);
Baru -> NIK = newNIK; strcpy(Baru->Nama,newNama); Baru -> Umur = newUmur; if (Head->Next==NULL){ //List Masih Kosong Head->Next = Baru; Baru->Back = Head; Baru->Next = Head; Head->Back = Baru;
}else{//List sudah berisi
Baru->Next = Head;Baru->Back = Head->Back;(Head->Back)->Next = Baru;Head->Back = Baru;
}}
void AddAwal(List *Head,int newNIK,char newNama[20],float newUmur){
List *Baru;Baru = new(List);
Baru -> NIK = newNIK; strcpy(Baru->Nama,newNama); Baru -> Umur = newUmur; if (Head->Next==NULL){ //List Masih Kosong Head->Next = Baru; Baru->Back = Head; Baru->Next = Head; Head->Back = Baru;
}else{//List sudah terisi
Baru->Next = Head->Next;(Head->Next)->Back = Baru;Head->Next = Baru;Baru->Back = Head;
}
}
void AddTerurut(List *Head, int newNIK, char newNama[20], float newUmur)
Nama[20] : String, Umur : Real, Back : ^List,{ke kiri} Next : ^List>{ke kanan}
Head : ^ListBaru,PNow : ^ListPilih :integer
Procedure AddAkhir(Input/output Head:List,input newNIK:integer,newNama[20]:String,newUmur:Real)Kamus Lokal :Baru : ^ListAlgoritma:NIK.^Baru newNIKStringcopy(Nama.^Baru,newNama)Umur.^Baru newUmur
If Next.Head=NILL then {list masih kosong} Next.^HeadBaru Back.^Baru Head Next.^BaruHead Back.^HeadBaruEndif
Else {list sudah terisi} Next.^BaruHead Back.^BaruBack.^Head Next.^(Back.^Head)Baru Back.^HeadBaruEndifEndprocedure
Procedure AddAwal(Input/output Head:List,input newNIK:integer,newNama[20]:String,newUmur:Real)Kamus Lokal :Baru : ^ListAlgoritma:NIK.^Baru newNIKStringcopy(Nama.^Baru,newNama)Umur.^Baru newUmur
If Next.^Head = NILL {List masih kosong} Next.^HeadBaru Back.^Baru Head Next.^BaruHead Back.^HeadBaruEndifElse {list sudah terisi} Next.BaruNext.^Head Back.^(Next.Head)Baru Next.HeadBaru Back.^BaruHeadendif
Procedure AddTerurut(List *Head, int newNIK, char newNama[20], float newUmur)
{
}
void ViewList(List *Head){
List *PNow;
if(Head->Next==NULL){ cout<<"List Masih Kosong \n";}else{
PNow = Head->Next;while(PNow != Head){
cout<<"NIK : "<<PNow -> NIK<<endl; cout<<"Nama : "<<PNow -> Nama<<endl; cout<<"Umur : "<<PNow -> Umur<<endl; PNow = PNow -> Next;
}}
}
void SearchList(List *Head, int NIKCari ){
bool found = false;List *PNow;PNow = Head->Next;
while ((PNow !=Head)&&(!found)){
if(PNow->NIK==NIKCari){found = true;
}else{
PNow=PNow->Next;}
}if(found){
cout<<"NIK : "<<PNow -> NIK<<endl; cout<<"Nama : "<<PNow -> Nama<<endl; cout<<"Umur : "<<PNow -> Umur<<endl;
}else{
printf("Data NIK %d tidak ditemukan!",NIKCari);
}}
void DeleteList (List *Head,int NIKHapus){
List *Hapus;List *Bantu;Hapus = Head->Next;
if (Head->Next == NULL){
printf("List Masih Kosong");
endprocedure
Procedure ViewList(output Head:List)Kamus Lokal:PNow : ^ListAlgoritma :If Next.^Head = NIL then Output(‘List Kosong’)EndifElse PNow Next.^Head While PNow<>Head do Output(NIK) Output(Nama) Output(Umur) EndwhileEndif
endprocedure
Procedure SearchList(input Head:List,NIKCari:intger)Kamus Lokal :PNow : ^ListFound : BooleanAlgoritma:found falsePNowNext.^Head
While((PNow<>Head)And(not found)) do If NIK.^PNow = NIKCari then Foundtrue Endif Else PNowNext.^PNow EndifEndwhile
If found then Output(NIK) Output(Nama) Output(Umur)EndifElse Output(‘Data NIKCari tidak ditemukan’)Endifendprocedure
Procedure DeleteList(input/output Head;List,input NikHapus :Integer)Kamus Lokal :Hapus,Bantu : ^ListAlgoritma :HapusNext.^Head
If Next.^Head=NILL then Output(‘List Masih Kosong’)EndifElse if NIK.^Hapus = NIKHapus then
}else if(Hapus->NIK==NIKHapus){
if(Hapus->Next==Head->Next){
Head->Next=NULL;Head->Back=NULL;
}else{
Bantu=Hapus->Next;Head->Next=Bantu;Bantu->Back=Head;
}}else{
Bantu=NULL;while((NIKHapus!=Hapus->NIK)
&& (Hapus->Next!=Head)){
Bantu=Hapus;Hapus=Hapus->Next;
}if(NIKHapus==Hapus->NIK){
if(Hapus>Next==NULL){Bantu->Next=Head;
Head->Back=Bantu;}else{Bantu->Next=Hapus-
>Next;(Hapus->Next)-
>Back=Bantu;}
}else{
printf("NIK yang dihapus tidak ada!");
}}
}
void MinMaxList (List *Head){ List *PMin, *PMax; List *PNow; PNow = Head->Next; PMin = PNow; PMax = PNow; if (PNow == NULL) { printf("List kosong!\n"); } else { while (PNow != Head) { if (PNow->Umur > PMax->Umur) { PMax = PNow; } if (PNow->Umur < PMin->Umur) { PMin = PNow; } PNow = PNow->Next; } printf("Data Umur Tertua\n");
If Next.^Hapus=Next.^Head then Next.^HeadNILL Back.^HeadNILL Endif Else BantuNext.^Hapus Next.^HeadBantu Back.^BantuHead EndifEndifElse BantuNILL While((NIKHapus<>NIK.^Hapus)And(Next.^Hapus<> Head)) BantuHapus HapusNext.^HapusEndwhile If NIKHapusNIK.^Hapus then If Next.^Hapus=NILL then Next.^Bantu Endif Else Next.^BantuNext.^Hapus Back.^(Next.^Hapus)Bantu Endif
Else Output(‘NIK yang dihapus tidak ada!’) EndifEndif
Procedute MinMaxList(output Head:List)Kamus Lokal :PMin,Pmax : ^ListPNow : ListAlgoritma:PNowNext.^HeadPMinPNowPMaxPNowIf PNow=NILL then Output(‘List kosong’)EndifElse
While PNow<> Head do If Umur.^PNow > Umur.^PMax then PMaxPNow Endif If Umut.^PNow < Umur.^PMin then
PMinPNow Endif PNowNext.^PNow endwhile output(‘Data Umur Tertinggi’)
output(NIK) output(Nama)
cout<<"NIK : "<<PMax -> NIK<<endl; cout<<"Nama : "<<PMax -> Nama<<endl; cout<<"Umur : "<<PMax -> Umur<<endl; printf("\nData Umur Termuda\n"); cout<<"NIK : "<<PMin -> NIK<<endl; cout<<"Nama : "<<PMin -> Nama<<endl; cout<<"Umur : "<<PMin -> Umur<<endl; }
}
void Rata2Umur(List*Head){
List *PNow;float totUmur, rata;int jmlPend;PNow = Head -> Next;totUmur=0;jmlPend=0;if(PNow == NULL){
cout<<"List Kosong!"<<endl;}else{
while(PNow!=Head){totUmur = totUmur +
PNow -> Umur;jmlPend = jmlPend +
1;PNow = PNow->Next;
}rata=totUmur/jmlPend;cout<<"Rata-rata IPK :
"<<rata<<endl;}
}
int main(){ int Pilih;
//Inisialisasi Head = new(List); Head->Next = NULL; Head->Back =NULL; do { //clrscr(); cout<<"\n*************************\n"; cout<<"* M E N U U T A M A *\n"; cout<<"* 1. Add Data (di akhir) *\n"; cout<<"* 2. Add Data (di awal) *\n"; cout<<"* 3. Add Data Terurut *\n"; cout<<"* 4. View Data *\n"; cout<<"* 5. Search Data *\n";
output(Umur)
output(‘Data Umur terendah’)
output(NIK) output(Nama) output(Umur)
endif endprocedure
Procedure Rata2Umur(output Head:List)Kamus Lokal :PNow : ListtotUmut,rata :RealjmlPNDK : integeralgoritma:PNowNext.^HeadtotUmur0jmlPNDK0if PNow = NILL then output(‘List Kosong’)endifelse while PNow<>Head totUmurtotUmur+Umur.^PNow jmlPNDKjmlPNDK+1 PNowNext.^PNow endwhile ratatotUmur/jmlPNDK output(rata)endif endprocedure
Procedure InisialisasiKamus Lokal :Pilih :integerAlgortimaNext.^Head NILLNext.^TailNILL
Endprocedure
Do
Output("*************************")Output("* M E N U U T A M A *");Output("* 1. Add Data (di akhir) *");Output("* 2. Add Data (di awal) *");Output("* 3. Add Data Terurut *");Output("* 4. View Data *");Output("* 5. Search Data *");Output("* 6. Delete Data *");
cout<<"* 6. Delete Data *\n"; cout<<"* 7. Min & Max Value *\n"; cout<<"* 8. Rata-rata Umur *\n"; cout<<"* 9. Exit *\n"; cout<<"**********************************\n"; cout<<"Pilih Menu [1/2/3/4/5/6/7/8/9] : ";cin>>Pilih;
switch(Pilih) { case 1 : /*1. Add Data (di akhir)*/ { char Lagi ='Y';
do { int inputNIK; char inputNama[20]; int inputUmur; cout<<"Masukan NIK
: ";cin>>inputNIK; cout<<"Masukan Nama
: ";cin>>inputNama; cout<<"Masukan Umur
: ";cin>>inputUmur; AddAkhir(Head,inputNIK,inputNama,inputUmur); cout<<"Input data Lagi [Y/T] : ";cin>>Lagi; }while (Lagi == 'Y' || Lagi == 'y'); break; } case 2 : /*2. Add Data (di awal) -- Bonus*/ { char Lagi ='Y';
do { int inputNIK; char inputNama[20]; int inputUmur; cout<<"Masukan NIK
: ";cin>>inputNIK; cout<<"Masukan Nama
: ";cin>>inputNama; cout<<"Masukan Umur
: ";cin>>inputUmur; AddAwal(Head,inputNIK,inputNama,inputUmur); cout<<"Input data Lagi [Y/T] : ";cin>>Lagi;
Output("* 7. Min & Max Value *");Output("* 8. Rata-rata IPK *");Output("* 9. Exit *");
Output(“*************************”)Output("Pilih Menu [1/2/3/4/5/6/7/8/9] : ")Input (Pilih)
Switch(Pilih)
Case1 : {Add Data (di akhir)}Kamus Lokal : Lagi, inputNama[20]:stringinputNik,inputUmur : integeralgrotima:Lagi ‘Y’
do
Input(inputNIK)Input(inputNama)Input(inputumur)
AddAkhir(head,inputNIM,inputNama,inputUmur)
Output(“input data lagi [Y/T]”)input(Lagi)Endwhile Lagi = ‘Y’ || Lagi = ‘y’)breakendcase
Case2 : {Add Data (di awal)Kamus Lokal : Lagi, inputNama[20]:stringinputNik,inputUmur : integeralgoritmaLagi ‘Y’
do
Input(inputNIK)Input(inputNama)Input(inputumur)
AddAwal(Head,inputNIK,inputNama,inputUmur)
Output(“input data lagi [Y/T]”)input(Lagi)
Endwhile Lagi = ‘Y’ || Lagi = ‘y’)BreakEndcase
}while (Lagi == 'Y' || Lagi == 'y'); break; } case 3 : /*3. Add Data Terurut -- Bonus*/ {
break; } case 4 : /*4. View Data*/ { ViewList(Head); break; } case 5 : /*5. Search Data berdasarkan NIK*/ { int NIKCari;
cout<<"Masukan NIK yang akan dicari : ";cin>>NIKCari;
SearchList(Head,NIKCari); break; } case 6 : /*6. Delete Data berdasarkan NIK*/ { int NIKHapus; cout<<"Masukan NIK yang akan dihapus : ";cin>>NIKHapus;
DeleteList(Head,NIKHapus); break; } case 7 :/*7. Min & Max Value - Umur*/ {
MinMaxList(Head);
break; } case 8 :/*8. Rata-rata Umur*/ { Rata2Umur(Head); break; } case 9 : cout<<"End of Application!!!";getch();break; default : cout<<"Salah pilih !!!";getch();break; }
}while (Pilih >= 1 && Pilih <= 8); return 0;}
Case 3: {Add Data Terurut}AddTerurut(Head,inputNIK,inputNama,inputUmur)BreakEndcase
Case 4: {View Data}ViewList(Head)BreakEndcase
Case 5 : { Search Data berdasarkan NIK)Kamus Lokal :NIKCari : integerAlgortima:Output(“masukan NIK yang akan dicari”)Input(inputNIKCari)searchList(Head,inputNIKCari)breakendcase
case 6 : {Delete Data berdasarkan NIK}Kamus Lokal :NIKHapus : integerAlgortima:
Input(NIKHapus)
DeleteList(Head,NIKHapus)BreakEndcase
Case7 : {Min & Max Value – Umur}
MinMaxList(Head)BreakEndcase
Case 8 : {Rata-rata Umur}Rata2Umur(Head)BreakEndcase
Case9 : output(“End of Application”)BreakEnd caseEndcase
Endwhile (Pilih >=1 And Pilih <=8)Return0
4.Perbandingan
List 2 Kepala List Sirkuler List 2 Pointer Sirkuler
Dalam setiap kamus lokal menggunakan head dan tail
1.Procedure Addakhir-memilki 2 kepala(head dan tail-jika list sudah berisi menggunakan kepala tail berada pada akhir elemen
2.Procedure AddAwal- jika list sudah berisi menggunakan kepala tail berada pada awal elmen
3.Procedure ViewList
-memiliki kamus lokal 2 kepala yaitu head dan tail-pada proses pengulangan(while)akan berhenti ketika pengulangan menemui PNow = NILL dan proses pengulangan diberhentikan
4.Procedure SearchList
-sama seperti
Hanya menggunakan head
1.Procedure Addakhir-1 kepala dengan 1 pointer-pada proses pengulangan sebelum sama dengan head akan terus berlanjut
2.procedure AddAwal-sama spserti list 2 kepala hanya tidak menggunakan Next.^TailBaru
3.Procedure ViewList
-kamus lokal hanya head
-pada proses pengulangan(while)akan berhenti ketika pengulangan menemui PNow= head,karena sirkuler next dari elemen terakhir nya head bukan NILL, dan proses pengulangan diberhentikan
4.Procedure SearchList
-berbeda dengan list
Hanya menggunakan head tetapi memiliki 2pointer
1.Procedure Addakhir-1 kepala 2 pointer (pointer kanan dan kiri)-setiap elemen memiliki panah kea rah next dan back dari elemen
2.procedure AddAwal-menggunakan 2 pointer next dan back jadi back dari head adalah elemen terakhir dan next dari elemen terakhir adalah back, kalu sirkuler saja hanya memiliki next dari elemen terakhir adalah head tidak memakai back
3.Procedure ViewList
-kamus lokal hanya head
-pada proses pengulangan(while)akan berhenti ketika pengulangan menemui PNow = head,karena sirkuler next dari elemen terakhir nya head bukan NILL, dan proses pengulangan diberhentikan
4.Procedure SearchList
--berbeda dengan list 2 kepala jika list
viewlist dalam kamus lokal menggunakan 2 kepala,kemudian pada saat proses pengulangan untuk mencari datanya pun sama, proses akan diberhentikan ketika saat menemui PNow = NILL dan data telah ketemu
5.Procedure DeleteList
-menggunakna 2 kepala dalam penghapusan data, seperti jika penghapusan di awal menggunakan head dan jika di akhir menggunakan tail
6.Procedure MinMaxList-hanya berbeda pada proses pengulanganwhile (PNow != NULL)ketika = NILL maka pengulangan berhenti
7.Procedure Rata2List-while(PNow!=NULL)Sama seperti minmaxlist perbedaan hanya pada proses pengulangan.
2 kepala jika list sirkuler pada saat proses pengulangan dalam pencarian data, berhentinya ketika saat PNow = head dan data telah ketemu
5.Procedure DeleteList
- dalam proses pengulangan sama dengan 2pointer sirkuler hanya saja tidak menggunakan pointer back
6.Procedure MinMaxList-while (PNow != Head)Ketika = Head pengulangan berhenti
7.Procedure Rata2List-while(PNow!=Head)Sama seperti minmaxlist perbedaan hanya pada proses pengulangan.
sirkuler pada saat proses pengulangan dalam pencarian data, berhentinya ketika saat PNow = head dan data telah ketemu
5.ProcedureDeleteList
-pada proses pengulangan dalam penghapusan data di tengah atau di akhir,Jika pada 2poiter sirkulerwhile((NIKHapus!=Hapus->NIK) && (Hapus->Next!=Head))
dan pada 2 kepalawhile((NIKHapus!=Hapus->NIK)&&(Hapus->Next!=NULL)) dan memiliki menggunakan pointer next dan back
6.Procedure MinMaxList-while (PNow != Head)Ketika = Head pengulangan berhenti
7.Procedure Rata2List-while(PNow!=Head)Sama seperti minmaxlist perbedaan hanya pada proses pengulangan.