tugas laproran(febi,riky,winda,yusup) 2

22
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; } Type List : < NIK : integer, Nama[20] : String, Umur : Real, Next : ^List> Head : ^List Tail : ^List Procedure AddAkhir(Input/output Head,Tail:List,input newNIK:integer,newNama[20]:String,newUmur:Re al) Kamus Lokal : Baru : ^List Algoritma: NIK.^Baru newNIK Stringcopy(Nama.^Baru,newNama) Umur.^Baru newUmur If Next.^Head = NIL {List masih kosong} then Next.^Baru Baru endif Else {sudah berisi} Next.^(Next.^Tail) Baru Endif Next.^Tail Baru Next.^Baru NIL Endprocedure

Upload: winda-pasaribu

Post on 26-Jan-2016

215 views

Category:

Documents


0 download

DESCRIPTION

pemograman lanjutan

TRANSCRIPT

Page 1: Tugas Laproran(Febi,Riky,Winda,Yusup) 2

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

Page 2: Tugas Laproran(Febi,Riky,Winda,Yusup) 2

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 :

Page 3: Tugas Laproran(Febi,Riky,Winda,Yusup) 2

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)

Page 4: Tugas Laproran(Febi,Riky,Winda,Yusup) 2

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 *");

Page 5: Tugas Laproran(Febi,Riky,Winda,Yusup) 2

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

Page 6: Tugas Laproran(Febi,Riky,Winda,Yusup) 2

'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

Page 7: Tugas Laproran(Febi,Riky,Winda,Yusup) 2

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

Page 8: Tugas Laproran(Febi,Riky,Winda,Yusup) 2

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)

Page 9: Tugas Laproran(Febi,Riky,Winda,Yusup) 2

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,

Page 10: Tugas Laproran(Febi,Riky,Winda,Yusup) 2

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)

Page 11: Tugas Laproran(Febi,Riky,Winda,Yusup) 2

{

}

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

Page 12: Tugas Laproran(Febi,Riky,Winda,Yusup) 2

}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)

Page 13: Tugas Laproran(Febi,Riky,Winda,Yusup) 2

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 *");

Page 14: Tugas Laproran(Febi,Riky,Winda,Yusup) 2

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

Page 15: Tugas Laproran(Febi,Riky,Winda,Yusup) 2

}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

Page 16: Tugas Laproran(Febi,Riky,Winda,Yusup) 2

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

Page 17: Tugas Laproran(Febi,Riky,Winda,Yusup) 2

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.