Top Banner
Mata Kuliah Struktur Data Disusun Oleh Kelompok 8 : 1. Pratama Putra Effendi 10111093 2. Muhammad Rikat Rifaldi 10111103 3. Riswan Panji Pratomo 10111939 4. Andrew Christie Tooy 10111931
33

Circular Double Link List FIX

Aug 24, 2014

Download

Documents

Ndru Tooy
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Circular Double Link List FIX

Mata Kuliah Struktur Data

Disusun Oleh Kelompok 8 :

1. Pratama Putra Effendi 101110932. Muhammad Rikat Rifaldi 101111033. Riswan Panji Pratomo 101119394. Andrew Christie Tooy 10111931

Kelas : IF-3Jurusan Teknik Informatika

UNIVERSITAS KOMPUTER INDONESIA2012

Page 2: Circular Double Link List FIX

PSEUDOCODEprocedure input_data(Output baru : PSimpul){I.S. : user memasukkan data yang akan disisipkan (baru)}{F.S. : menghasilkan data (baru) yang akan disisipkan dalam circular double linked list}

Kamus

Algoritmaif (baru ≠ nil) then

Output(“Data yang akan disisipkan sudah ada”)else

alloc(baru)input(baru↑.info.ID , baru↑.info.Nama , baru↑.info.Tujuan)baru↑.next nilbaru↑.prev nil

endifendprocedure

procedure byk_data(Input awal,akhir : PSimpul, Output n : integer){I.S. : pointer penunuk awal dan penunjuk akhir sudah terdefinisi}{F.S. : menampilkan banyaknya data dalam circular double linked list}

Kamusbykdata : PSimpul

Algoritmabykdata awaln 1while (bykdata ≠ akhir) do

bykdata bykdata↑.nextn n + 1

endwhileendprocedure

Page 3: Circular Double Link List FIX

procedure sort_asc_c_double(I/O awal, akhir : PSimpul){I.S. : pointer penunjuk awal dan penunjuk akhir sudah terdefinisi}{F.S. : menghasilkan simpul-simpul yang sudah terurut berdasarkan nomor tiket}

Kamusmin, i, j, temp : PSimpul

Algoritmai awal

while (i ≠ akhir) domin ij i↑.next

while (j ≠ akhir) doif (j↑.info.ID < min↑.info.ID) then

min jendifj j↑.next

endwhile

if (j↑.info.ID < min↑.info.ID) thenmin j

endif

temp↑.info i↑.infoi↑.info min↑.infomin↑.info temp↑.info

i i↑.nextendwhile

endprocedure

Page 4: Circular Double Link List FIX

procedure tampil_data(Input awal,akhir : PSimpul){I.S. : pointer penunjuk awal dan akhir sudah terdefinisi}{F.S. : menampilkan seluruh data ke dalam layar tampilan}

Kamusbantu : PSimpul

Algoritmabantu awalwhile (bantu ≠ akhir) do

Output(bantu↑.info.ID , bantu↑.info.Nama , bantu↑.info.Tujuan)bantu bantu↑.next

endwhile

Output(bantu↑.info.ID , bantu↑.info.Nama , bantu↑.info.Tujuan)endprocedure

Page 5: Circular Double Link List FIX

procedure hapus_depan_c_double (I/O awal, akhir : PSimpul){I.S. : pointer penunjuk awal dan penunjuk akhir sudah terdefinisi}{F.S. : menghasilkan circular double linked list yang sudah dihapus satu simpul di depan}

Kamusphapus : PSimpul

Algoritmaphapus awal

if (awal = akhir) thenawal nilakhir nil

elseawal awal↑.nextawal↑.prev akhir

endif

dealloc(phapus)endprocedure

procedure hapus_belakang_c_double(I/O awal,akhir : PSimpul){I.S. : pointer penunjuk awal dan penunjuk akhir sudah terdefinisi}{F.S. : menghasilkan circular double linked list yang sudah dihapus satu simpul di belakang}

Kamusphapus : PSimpul

Algoritmaphapus akhirakhir phapus↑.prevdealloc(phapus)akhir↑.next awal

endprocedure

Page 6: Circular Double Link List FIX

procedure hapus_data(I/O awal, akhir : PSimpul){I.S. : pointer penunjuk awal dan penunjuk akhir sudah terdefinisi}{F.S. : menghasilkan circular double linked list yang sudah dihapus pada simpul depan, tengah atau belakang}

Kamusprocedure byk_data(Input awal,akhir : PSimpul, Output n : integer)procedure hapus_depan_double (I/O awal, akhir : PSimpul)procedure hapus_belakang_double(I/O akhir : PSimpul)procedure tampil_data(Input awal,akhir : PSimpul)

phapus, bantu : PSimpulketemu : booleann, datahapus, posisihapus : integer

Algoritmaif (awal = nil) or (akhir = nil) then

Output(“Tidak ada data yang mau dihapus”)else

if (awal = akhir) thenhapus_depan_c_double(awal,akhir)

elsephapus awalposisihapus 1ketemu falseoutput(“Hapus data di urutan ke -? “)input(datahapus)

byk_data(awal,akhir,n)if (datahapus > n ) then

output(datahapus, “ harus lebih kecil daripada banyaknya data”)else

if (posisihapus = datahapus) thenhapus_depan_c_double(awal,akhir)

elseif (datahapus = n) then

hapus_belakang_c_double(awal,akhir)else

while (not ketemu) doif (datahapus = posisihapus) then

ketemu trueelse

phapus phapus↑.nextposisihapus posisihapus + 1

endif

Page 7: Circular Double Link List FIX

endwhile

if (ketemu) thenbantu awalwhile (bantu↑.next ≠ phapus) do

bantu bantu↑.nextendwhile

bantu↑.next phapus↑.nextphapus↑.next↑.prev bantudealloc(phapus)

elseoutput(“data urutan ke- “,datahapus, “ tidak ada”)

endifendif

endifendif

endifendif

tampil_data(awal,akhir)endprocedure

Page 8: Circular Double Link List FIX

procedure sisip_depan_c_double (I/O baru,awal,akhir : PSimpul){I.S. : simpul yang akan disisipkan, pointer penunjuk awal, dan penunjuk akhir sudah terdefinisi}{F.S. : menghasilkan satu simpul yang disisipkan di depan pada circular double linked list}

Kamusprocedure tampil_data(Input awal,akhir : PSimpul)

Algoritmaif (awal = nil) then

baru↑.next nilakhir baru

elsebaru↑.next awalawal↑.prev baru

endif

baru↑.prev nilawal baruawal↑.prev akhirakhir↑.next awalbaru nildealloc(baru)tampil_data(awal,akhir)

endprocedure

procedure sisip_belakang_c_double (I/O baru,awal,akhir : PSimpul){I.S. : simpul yang akan disisipkan, pointer penunjuk awal dan penunjuk akhir sudah terdefinisi}{F.S. : menghasilkan satu simpul yang disisipkan di belakang pada circular double linked list}

Kamusprocedure tampil_data(Input awal,akhir : PSimpul)

Algoritmaakhir↑.next barubaru↑.prev akhirakhir baruakhir↑.next awalbaru nildealloc(baru)tampil_data(awal,akhir)

endprocedure

Page 9: Circular Double Link List FIX

procedure sisip_tengah_c_double(I/O baru,awal, akhir : PSimpul){I.S. : simpul yang akan disisipkan, pointer penunjuk awal, dan penunjuk akhir sudah terdefinisi}{F.S. : menghasilkan satu simpul yang disisipkan di tengah pada circular double linked list}

Kamusprocedure sisip_depan_c_double (I/O baru,awal,akhir : PSimpul)procedure sisip_belakang_c_double (I/O baru,awal,akhir : PSimpul)procedure tampil_data(Input awal,akhir : PSimpul)

bantu : PSimpulposip : stringpisip : integerketemu : boolean

Algoritma

repeatOutput(“Penyisipan Data”)Output(“=============”)Output(“1. Sebelum Nomor Tiket ke-x ?”)Output (“2. Sesudah Nomor Tiket ke-x ?”)Input(pisip)

Until (pisip = 1) or (pisip = 2)

Output(“x = “)Input(posip)

bantu awalketemu false

while (not ketemu) and (bantu ≠ akhir) doif (bantu↑.info.ID = posip) then

ketemu trueelse

bantu bantu↑.nextendif

endwhile

if (bantu↑.info.ID = posip) thenketemu true

endif

if (pisip = 2) thenif (ketemu) then

if (bantu = akhir) thensisip_belakang_c_double(baru,awal,akhir)

Page 10: Circular Double Link List FIX

elsebaru↑.next bantu↑.nextbantu↑.next barubaru nildealloc(baru)tampil_data(awal,akhir)

endifelse

output(“Nomor tiket yang dicari “,posip,” tidak ditemukan”)endif

elseif (ketemu) then

if (bantu = awal) thensisip_depan_c_double(baru,awal,akhir)

elsebaru↑.next bantubaru↑.prev bantu↑.prevbaru↑.prev↑.next barubantu↑.prev barubaru nildealloc(baru)tampil_data(awal,akhir)

endifelse

output(“Nomor tiket yang dicari “,posip,” tidak ditemukan”)endif

endifendprocedure

Page 11: Circular Double Link List FIX

prodecure tambah_data(I/O baru,awal, akhir : PSimpul){I.S. : simpul yang akan disisipkan, pointer penunjuk awal, dan penunjuk akhir sudah terdefinisi}{F.S. : menghasilkan satu simpul yang disisipkan di depan, tengah atau belakang pada circular double linked list}

Kamusprocedure sisip_depan_c_double (I/O baru,awal,akhir : PSimpul)procedure sisip_belakang_c_double (I/O baru,awal,akhir : PSimpul)procedure sisip_tengah_c_double(I/O baru,awal, akhir : PSimpul)

pilihsisip : integer

Algoritmaif (baru = nil) then

output(“Data tidak ada!!! Silakan masukkan data terlebih dahulu”)else

if (awal=nil) thensisip_depan_c_double(baru,awal,akhir)

elseif (awal = akhir) then

repeatoutput(“Menu Sisip”)output(“=========”)output(“1. Sisip Depan”)output(“2. Sisip Belakang”)input(pilihsisip)depend on (pilihsisip)

(pilihsisip = 1) : sisip_depan_c_double(baru,awal,akhir)(pilihsisip = 2) : sisip_belakang_c_double(baru,awal,akhir)

enddependuntil (pilihsisip =1) or (pilihsisip =2)

elserepeat

output(“Menu Sisip”)output(“=========”)output(“1. Sisip Depan”)output(“2. Sisip Tengah”)output(“3. Sisip Belakang”)input(pilihsisip)depend on (pilihsisip)

(pilihsisip = 1) : sisip_depan_c_double(baru,awal,akhir)(pilihsisip = 2) : sisip_tengah_c_double(baru,awal,akhir)(pilihsisip = 3) : sisip_belakang_c_double(baru,awal,akhir)

enddependuntil (pilihsisip =1) or (pilihsisip =2) or (pilihsisip = 3)

Page 12: Circular Double Link List FIX

endifendif

endifendprocedure

Page 13: Circular Double Link List FIX

procedure cari_data (Input awal,akhir : PSimpul){I.S. : pointer penunjuk awal dan akhir sudah terdefinisi}{F.S. : menampilkan data yang dicari ada atau tidak}

Kamusbantu : PSimpuldatacari : stringketemu : booleanpilihcari : integer

Algoritmarepeat

output(“Menu Pencarian”)output(“=============”)output(“1. Berdasarkan Nomor Tiket”)output(“2. Berdasarkan Nama”)output(“3. Berdasarkan Tujuan”)input(pilihcari)ketemu falsebantu awalinput(datacari)depend on (pilihcari)

(pilihcari = 1) : repeatif (bantu↑.info.ID = datacari) then

ketemu trueoutput(bantu↑.info.ID, bantu↑.info.Nama , bantu↑.info.Tujuan)

endifbantu bantu↑.next

until (bantu = akhir)

if (bantu↑.info.ID = datacari) thenketemu trueoutput(bantu↑.info.ID, bantu↑.info.Nama , bantu↑.info.Tujuan)

endif(pilihcari = 2) : repeat

if (bantu↑.info.Nama = datacari) thenketemu trueoutput(bantu↑.info.ID, bantu↑.info.Nama , bantu↑.info.Tujuan)

endifbantu bantu↑.next

until (bantu = akhir)

if (bantu↑.info.Nama = datacari) thenketemu trueoutput(bantu↑.info.ID, bantu↑.info.Nama , bantu↑.info.Tujuan)

Page 14: Circular Double Link List FIX

endif(pilihcari = 3) : repeat

if (bantu↑.info.Tujuan = datacari) thenketemu trueoutput(bantu↑.info.ID, bantu↑.info.Nama , bantu↑.info.Tujuan)

endifbantu bantu↑.next

until (bantu = akhir)

if (bantu↑.info.Tujuan = datacari) thenketemu trueoutput(bantu↑.info.ID, bantu↑.info.Nama , bantu↑.info.Tujuan)

endifenddepend

until (pilihcari = 1) or (pilihcari =2) or (pilihcari =3)

if (not ketemu) thenoutput(datacari,” tidak ditemukan”)

endifendprocedure

Page 15: Circular Double Link List FIX

{Algoritma Utama}Algoritma_Double_Linked_List

Kamus{prototype}procedure input_data(Output baru : PSimpul)procedure sort_asc_double(I/O awal, akhir : PSimpul)procedure tampil_data(Input awal,akhir : PSimpul)procedure hapus_data(I/O awal, akhir : PSimpul)prodecure tambah_data(I/O baru,awal, akhir : PSimpul)procedure cari_data (Input awal,akhir : PSimpul)

typePSr = record

< ID : string,Nama : string,Tujuan : string>

endrecord

typePSimpul = ↑simpulsimpul = record

< info : PSr,prev, next : PSimpul>

endrecord

phapus, baru, awal, akhir : PSimpuln, menu : integer

Page 16: Circular Double Link List FIX

Algoritma{penciptaan list}awal nilakhir nil

repeatoutput(“menu pilihan”)output(“==========”)output(“1. Isi Data”)output(“2. Tambah Data”)output(“3. Hapus Data”)output(“4. Cari Data”)output(“5. Tampil Data”)output(“6. Keluar”)input(menu)depend on (menu)

(menu = 1) : input_data(baru)(menu = 2) : tambah_data(baru,awal,akhir)(menu = 3) : hapus_data(awal,akhir)(menu = 4) : cari_data(awal,akhir)(menu = 5) : sort_asc_c_double(awal,akhir)

tampil_data(awal,akhir)enddepend

until (menu = 6)

{penghancuran data}phapus awalwhile (phapus ≠ akhir) do

awal awal↑.nextdealloc(phapus)phapus awal

endwhileakhir nilawal nildealloc(phapus)

Page 17: Circular Double Link List FIX

SOURCE CODEprogram Circular_Double_Linked_List;

uses crt;

type PSr = record ID : string; Nama : string; Tujuan : string; end;

type PSimpul = ^simpul; simpul = record info : PSr; prev,next : PSimpul; end;

label return;

var phapus, baru, awal, akhir : PSimpul; menu : integer;

procedure byk_data(var n : integer; aw, ak : PSimpul); var bykdata : PSimpul; begin bykdata := aw; n := 1; while (bykdata <> ak) do begin bykdata := bykdata^.next; n := n + 1; end; end;

procedure sort_asc_c_double(var aw, ak : PSimpul); var min, i, j, temp : PSimpul; begin new(temp); i := aw; while (i <> ak) do begin min := i;

Page 18: Circular Double Link List FIX

j := i^.next;

while (j <> ak) do begin if (j^.info.ID < min^.info.ID) then min := j;

j := j^.next; end;

if (j^.info.ID < min^.info.ID) then min := j;

temp^.info := i^.info; i^.info := min^.info; min^.info := temp^.info;

i := i^.next end; end;

procedure tampil_data(var aw,ak : PSimpul); var bantu : PSimpul; i : integer; begin clrscr; bantu := aw; gotoxy(20,2); writeln('====================================='); gotoxy(20,3); writeln(' Data Yang Tersimpan '); gotoxy(20,4); writeln('====================================='); writeln; i := 1;

while (bantu <> ak) do begin gotoxy(11,7+i); write('- {',bantu^.info.ID); write('} , {',bantu^.info.Nama); writeln('} , {',bantu^.info.Tujuan,'}'); bantu := bantu^.next; i:=i+1; end;

gotoxy(11,7+i);

Page 19: Circular Double Link List FIX

write('- {',bantu^.info.ID); write('} , {',bantu^.info.Nama); writeln('} , {',bantu^.info.Tujuan,'}');

readln; end;

procedure hapus_depan_c_double(var aw,ak : PSimpul); var elemen,phapus : PSimpul; begin new(elemen); phapus := aw; if (aw = ak) then begin aw := nil; ak := nil; end else begin aw := aw^.next; aw^.prev := ak; end; elemen^.info := phapus^.info; dispose(phapus); dispose(elemen); end;

procedure hapus_belakang_c_double(var aw,ak : PSimpul); var elemen,phapus : PSimpul; begin new(elemen); phapus := ak; ak := phapus^.prev; elemen^.info := phapus^.info; dispose(phapus); dispose(elemen); ak^.next := aw; end;

procedure hapus_data(var aw, ak: PSimpul); var phapus,bantu : PSimpul; ketemu : boolean;

Page 20: Circular Double Link List FIX

n, datahapus, posisihapus : integer; begin clrscr; if (aw = nil) or (ak = nil) then begin writeln('Tidak ada Data'); end else if (aw = ak) then begin hapus_depan_c_double(aw,ak); writeln('Data ke-1 berhasil dihapus'); end else begin phapus := aw; posisihapus := 1; ketemu := false; gotoxy(20,2); writeln('=============================='); gotoxy(20,3); writeln(' Penghapusan Data '); gotoxy(20,4); writeln('=============================='); gotoxy(23,6); write('Hapus Data di urutan ke-? '); readln(datahapus);

byk_data(n, aw, ak);

if (datahapus > n) then begin writeln('urutan Data tersebut harus lebih kecil dari banyaknya data'); end else if (posisihapus = datahapus) then begin hapus_depan_c_double(aw,ak); writeln('Data urutan ke-',datahapus,' berhasil dihapus'); end else if (datahapus = n) then begin hapus_belakang_c_double(aw,ak); writeln('Data urutan ke-',datahapus,' berhasil dihapus'); end else begin while (not ketemu) do begin if (datahapus = posisihapus) then begin

Page 21: Circular Double Link List FIX

ketemu := true; end else begin phapus := phapus^.next; posisihapus := posisihapus + 1; end; end;

if (ketemu) then begin bantu := aw;

while (bantu^.next <> phapus) do bantu := bantu^.next;

bantu^.next := phapus^.next; phapus^.next^.prev := bantu; dispose(phapus);

writeln; writeln('Data urutan ke-',datahapus,' berhasil dihapus'); end else begin writeln; writeln('Data urutan ke-',datahapus,' tidak ada'); end; end; end; readln; tampil_data(awal,akhir); end;

procedure sisip_depan_c_double(var baru, aw, ak : PSimpul); begin if (aw = nil) then begin baru^.next := nil; ak := baru; end else begin baru^.next := aw; aw^.prev := baru;

Page 22: Circular Double Link List FIX

end;

baru^.prev := nil; aw := baru; aw^.prev := ak; ak^.next := aw; clrscr; writeln('Data berhasil ditambah..!'); baru := nil; dispose(baru); readln; tampil_data(awal,akhir); end;

procedure sisip_belakang_c_double(var baru, aw, ak : PSimpul); begin ak^.next := baru; baru^.prev := ak; ak := baru; ak^.next := aw; clrscr; writeln('Data berhasil ditambah..!'); baru := nil; dispose(baru); readln; tampil_data(awal,akhir); end;

procedure sisip_tengah_c_double(var baru, aw, ak : PSimpul); var bantu : PSimpul; posip : string; pisip : integer; ketemu : boolean; begin clrscr; gotoxy(20,2); writeln('=========================='); gotoxy(20,3); writeln(' Penyisipan Data '); gotoxy(20,4); writeln('=========================='); gotoxy(6,6); write('1. Sebelum Nomor Tiket ke-x ? '); gotoxy(6,7); write('2. Sesudah Nomor Tiket ke-x ? '); gotoxy(6,9); write('Pilih : '); readln(pisip); gotoxy(6,10); write('x = '); readln(posip);

Page 23: Circular Double Link List FIX

bantu := aw; ketemu := false;

while (not ketemu) and (bantu <> ak) do begin if (bantu^.info.ID = posip) then ketemu:= true else bantu := bantu^.next; end;

if (bantu^.info.ID = posip) then ketemu:= true;

if (pisip = 2) then begin if (ketemu) then begin if (bantu = ak) then begin sisip_belakang_c_double(baru,aw,ak); end else begin baru^.next := bantu^.next; bantu^.next := baru; clrscr; writeln('Data berhasil ditambah..!'); baru := nil; dispose(baru); readln; tampil_data(awal,akhir); end; end else begin clrscr; writeln('Nomor tiket yang dicari tidak ditemukan!'); readln; end; end else begin if (ketemu) then

Page 24: Circular Double Link List FIX

begin if (bantu=aw) then sisip_depan_c_double(baru,aw,ak) else begin baru^.next := bantu; baru^.prev := bantu^.prev; baru^.prev^.next := baru; bantu^.prev := baru; clrscr; writeln('Data berhasil ditambah..!'); baru := nil; dispose(baru); readln; tampil_data(awal,akhir); end; end else begin clrscr; writeln('Nomor tiket yang dicari tidak ditemukan!'); readln; end; end; end;

procedure tambah_data(var baru, aw, ak : PSimpul); var pilihsisip : integer; begin if (baru = nil) then begin clrscr; gotoxy (7,1); write('=============================================================='); gotoxy (7,2); write(' UNIKOM TRAIN COMPANY '); gotoxy (7,3); write('=============================================================='); gotoxy (20,5); writeln('Data tidak ada'); gotoxy (20,6); writeln('Silakan Masukkan Data terlebih dahulu'); readln; goto return; end else if (aw = nil) then begin sisip_depan_c_double(baru,aw,ak);

Page 25: Circular Double Link List FIX

end else if (aw = ak) then begin clrscr; repeat gotoxy(20,2); writeln('=========================='); gotoxy(20,3); writeln(' Menu Penyisipan '); gotoxy(20,4); writeln('=========================='); gotoxy(20,5); writeln('1. Sisip Depan'); gotoxy(20,6); writeln('2. Sisip Belakang'); gotoxy(20,8); write('Pilih : ');readln(pilihsisip); until (pilihsisip = 1) or (pilihsisip = 2);

if pilihsisip = 1 then sisip_depan_c_double(baru, aw, ak); if pilihsisip = 2 then sisip_belakang_c_double(baru,aw,ak); end else begin clrscr; repeat gotoxy(20,2); writeln('=========================='); gotoxy(20,3); writeln(' Menu Penyisipan '); gotoxy(20,4); writeln('=========================='); gotoxy(20,5); writeln('1. Sisip Depan'); gotoxy(20,6); writeln('2. Sisip Tengah'); gotoxy(20,7); writeln('3. Sisip Belakang'); gotoxy(20,9); write('Pilih : ');readln(pilihsisip); until (pilihsisip = 1) or (pilihsisip = 2) or (pilihsisip = 3);

if pilihsisip = 1 then sisip_depan_c_double(baru, aw, ak); if pilihsisip = 2 then sisip_tengah_c_double(baru, aw, ak); if pilihsisip = 3 then sisip_belakang_c_double(baru, aw, ak); end; end;

procedure input_data (var baru : PSimpul); var ID, Nama, Tujuan : string; begin clrscr; if baru <> nil then begin writeln('Data yg mau di-input sudah ada'); readln;

Page 26: Circular Double Link List FIX

end else begin new(baru); clrscr; gotoxy(20,2); writeln('====================================='); gotoxy(20,3); writeln(' Input Data Konsumen '); gotoxy(20,4); writeln('====================================='); gotoxy(23,6); write('NOMOR TIKET = '); readln (ID); gotoxy(23,7); write('Nama = '); readln (Nama); gotoxy(23,8); write('Tujuan = '); readln (Tujuan);

baru^.info.ID := ID; baru^.info.Nama := Nama; baru^.info.Tujuan := Tujuan;

baru^.next := nil; baru^.prev := nil; end; end;

procedure cari_data(var aw,ak : PSimpul); var bantu : PSimpul; datacari : string; ketemu : boolean; pilihcari, i : integer; begin repeat clrscr; gotoxy(20,2); writeln('============================'); gotoxy(20,3); writeln(' Menu Pencarian '); gotoxy(20,4); writeln('============================'); gotoxy(20,6); write('1. Berdasarkan Nomor Tiket'); gotoxy(20,7); write('2. Berdasarkan Nama'); gotoxy(20,8); write('3. Berdasarkan Tujuan'); gotoxy(20,9); write('Pilih : ');readln(pilihcari); until (pilihcari = 1) or (pilihcari = 2) or (pilihcari = 3);

clrscr; gotoxy(20,2); writeln('============================'); gotoxy(20,3); writeln(' Data Pencarian '); gotoxy(20,4); writeln('============================');

ketemu := false;

Page 27: Circular Double Link List FIX

bantu := aw; i := 0;

if (pilihcari = 1) then begin gotoxy(20,6); write('Nomor Tiket yang dicari : '); readln(datacari);

gotoxy(20,10); writeln('============================'); gotoxy(20,11); writeln(' Hasil Pencarian '); gotoxy(20,12); writeln('============================');

repeat if (bantu^.info.ID = datacari) then begin ketemu := true; gotoxy(20,14+i); write('- {',bantu^.info.ID); write('} , {',bantu^.info.Nama); writeln('} , {',bantu^.info.Tujuan,'}'); i := i + 1; end;

bantu := bantu^.next; until (bantu = ak);

if (bantu^.info.ID = datacari) then begin ketemu := true; gotoxy(20,14+i); write('- {',bantu^.info.ID); write('} , {',bantu^.info.Nama); writeln('} , {',bantu^.info.Tujuan,'}'); end;

if (not ketemu) then begin gotoxy(20,14); write(datacari, ' tidak ditemukan'); end; end;

if pilihcari = 2 then begin gotoxy(20,6); write('Nama yang dicari : '); readln(datacari);

Page 28: Circular Double Link List FIX

gotoxy(20,10); writeln('============================'); gotoxy(20,11); writeln(' Hasil Pencarian '); gotoxy(20,12); writeln('============================');

repeat if (bantu^.info.Nama = datacari) then begin ketemu := true; gotoxy(20,14+i); write('- {',bantu^.info.ID); write('} , {',bantu^.info.Nama); writeln('} , {',bantu^.info.Tujuan,'}'); i := i + 1; end;

bantu := bantu^.next; until (bantu = ak);

if (bantu^.info.Nama = datacari) then begin ketemu := true; gotoxy(20,14+i); write('- {',bantu^.info.ID); write('} , {',bantu^.info.Nama); writeln('} , {',bantu^.info.Tujuan,'}'); end;

if (not ketemu) then begin gotoxy(20,14); write(datacari, ' tidak ditemukan'); end; end;

if pilihcari = 3 then begin gotoxy(20,6); write('Tujuan yang dicari : '); readln(datacari);

gotoxy(20,10); writeln('============================'); gotoxy(20,11); writeln(' Hasil Pencarian '); gotoxy(20,12); writeln('============================'); repeat if (bantu^.info.Tujuan = datacari) then begin ketemu := true; gotoxy(20,14+i);

Page 29: Circular Double Link List FIX

write('- {',bantu^.info.ID); write('} , {',bantu^.info.Nama); writeln('} , {',bantu^.info.Tujuan,'}'); i := i + 1; end;

bantu := bantu^.next; until (bantu = ak);

if (bantu^.info.Tujuan = datacari) then begin ketemu := true; gotoxy(20,14+i); write('- {',bantu^.info.ID); write('} , {',bantu^.info.Nama); writeln('} , {',bantu^.info.Tujuan,'}'); end;

if (not ketemu) then begin gotoxy(20,14); write(datacari, ' tidak ditemukan'); end; end;

readln; end;

begin awal := nil; akhir := nil; return: repeat clrscr; gotoxy (7,1); write('==============================================================='); gotoxy (7,2); write(' UNIKOM TRAIN COMPANY '); gotoxy (7,3); write('==============================================================='); gotoxy(28,5); write('====== PILIHAN MENU ====='); gotoxy(28,8); write('1. ISI DATA'); gotoxy(28,9); write('2. TAMBAH DATA'); gotoxy(28,10); write('3. HAPUS DATA'); gotoxy(28,11); write('4. CARI DATA'); gotoxy(28,12); write('5. TAMPIL DATA'); gotoxy(28,13); write('6. KELUAR'); gotoxy(28,15); write('Pilih : '); readln(menu);

Page 30: Circular Double Link List FIX

if menu = 1 then input_data(baru); if menu = 2 then tambah_data(baru, awal,akhir); if menu = 3 then hapus_data(awal,akhir); if menu = 5 then begin sort_asc_c_double(awal,akhir); tampil_data(awal,akhir); end; if menu = 4 then cari_data(awal,akhir); until (menu = 6);

{penghancuran data} phapus := awal; while (phapus <> akhir) do begin awal := awal^.next; dispose(phapus); phapus := awal; end;

akhir := nil; awal := nil; dispose(phapus);end.

Daftar Kontribusi1. Pratama Putra Effendi 10111093 Algoritma input, cari data2. Muhammad Rikat Rifaldi 10111103 Algoritma sort, tampil data3. Riswan Panji Pratomo 10111939 Coding4. Andrew Christie Tooy 10111931 Algoritma sisip, hapus data