100% menganggap dokumen ini bermanfaat (1 suara)
2K tayangan37 halaman

Linked List (Struktur Untaian) Dfett

Dokumen tersebut membahas tentang struktur data pointer dan linked list. Pointer adalah variabel yang menyimpan alamat memori lain, sedangkan linked list adalah koleksi linier data yang terdiri dari simpul yang saling terhubung oleh pointer. Dokumen ini menjelaskan konsep dasar pointer dan linked list beserta contoh kode program untuk manipulasi dan implementasinya.
Hak Cipta
© Attribution Non-Commercial (BY-NC)
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PPTX, PDF, TXT atau baca online di Scribd
100% menganggap dokumen ini bermanfaat (1 suara)
2K tayangan37 halaman

Linked List (Struktur Untaian) Dfett

Dokumen tersebut membahas tentang struktur data pointer dan linked list. Pointer adalah variabel yang menyimpan alamat memori lain, sedangkan linked list adalah koleksi linier data yang terdiri dari simpul yang saling terhubung oleh pointer. Dokumen ini menjelaskan konsep dasar pointer dan linked list beserta contoh kode program untuk manipulasi dan implementasinya.
Hak Cipta
© Attribution Non-Commercial (BY-NC)
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PPTX, PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 37

POINTER

LIST

Materi III: Struktur Data By. Gladly C. Rorimpandey, ST, MISD Laidy Manoppo, S.Pd

PENGERTIAN POINTER
Pointer adalah sebuah penunjuk alamat pada memori yang digunakan untuk menyimpan data yang akan diproses. Perbedaan Array & Pointer
Kriteria Sifat Array Statis Dinamis Sesuai kebutuhan Pointer

Ukuran

Pasti

Alokasi Variabel Saat program dijalankan sampai selesai

Dapat diatur sesuai kebutuhan

Suatu pointer dapat menunjuk ke data bertipe elementer, terstruktur, pointer yang lain, atau tidak bertipe. Jika suatu pointer tidak menunjuk ke manamana, pointer itu dinamakan dangling, sedangkan bagian memori yang tidak dapat diakses karena tidak ada pointer yang menunjuk dinamakan garbage (sampah).
Dalam Pascal, pointer dapat diisi dengan nilai yang berasal dari:

1. NIL
2. Fungsi Ptr 3. Operator @

4. Prosedur New dan GetMem


5. Pointer yang lain

Reserved word NIL NIL merupakan reserved word dalam Pascal, di mana pointer yang bernilai NIL dianggap tidak menunjuk alamat memori manapun.NIL biasa digambarkan dengan lambang ground. Fungsi Ptr Sintaks: Function Ptr(Seg, Ofs : word) : pointer; dengan Seg : segmen memori. Ofs : offset memori. Fungsi Ptr mengembalikan pointer dari segmen dan offset yang dimasukkan. Operator @ Sintaks: <nama_var>:=@<variabel_yang_alamatnya_diambil>; Operator ini digunakan untuk mengambil alamat variabel yang akan ditunjuk

CONTOH PROGRAM
Deklarasi tipe data pointer: program deklarasi; uses crt; var p : ^integer; nilai : integer; begin clrscr; nilai:=12; p:=@nilai; writeln(p^); p^:=100; writeln(p^); writeln(nilai); readln; end.

Output:

12 100 100

PEMBAHASAN
Pada contoh program deklarasi ini, pertamatama dideklarasikan variabel p sebagai pointer yang bertipe integer. Dibuat sebuah variabel lagi yang diberi nama nilai dan bertipe integer. Variabel nilai diisi dengan nilai 12. Kemudian variabel p menunjuk alamat dari variabel nilai dengan operator @, sehingga variable p berisi nilai 12, dan ditampilkan outputnya di layar. Kemudian variabel p diberi nilai 100, dan secara otomatis variabel nilai juga bernilai 100 karena sudah ditunjuk oleh variabel p. Kemudian isi dari variabel p yang baru dan variabel nilai ditampilkan di layar.

CONTOH MANIPULASI MEMORI LEWAT POINTER BERTIPE


uses wincrt; var p,q,r,s : ^string; nilai : string; begin clrscr; nilai:='ini string nilai!!!'; p:=@nilai; new(q); q^:='ini isi pointer q!!!'; r:=q; s^:=q^; writeln('alamat pointer p = ',seg(p^):4,':',ofs(p^):4,'; isi pointer p = ',p^); writeln('alamat pointer q = ',seg(q^):4,':',ofs(q^):4,'; isi pointer q = ',q^); writeln('alamat pointer r = ',seg(r^):4,':',ofs(r^):4,'; isi pointer r = ',r^); writeln('alamat pointer s = ',seg(s^):4,':',ofs(s^):4,'; isi pointer s = ',s^); readln; end.

Output: alamat pointer p = 23327: 110; isi pointer p = ini string nilai!!! alamat pointer q = 24414: 0; isi pointer q = ini isi pointer q!!! alamat pointer r = 24414: 0; isi pointer r = ini isi pointer q!!! alamat pointer s = 0: 0; isi pointer s = ini isi pointer q!!!

PEMBAHASAN
Pada program ini dibuat 4 variabel pointer yang bertipe string, yaitu p, q, r, s. Dan sebuah variabel dengan nama nilai yang bertipe juga string (bukan pointer). Pertama-tama variabel nilai diisi dengan nilai ini string nilai!!!. Kemudian variabel p (pointer) menunjuk alamat dari variabel nilai dengan operator @, sehingga variabel p juga berisi ini string nilai!!!. Kemudian dipesan tempat pada heap dengan prosedur New untuk variabel q. Kemudian variabel q diisi ini isi pointer q!!!. Setelah itu variabel r menunjuk alamat dari variabel q, sehingga alamat maupun isinya sama. Kemudian variabel s diisi dengan nilai dari variabel q, tapi dalam hal ini hanya nilainya saja, sedangkan alamatnya tidak.

Back

PENGERTIAN LINKED LIST


Linked List atau One-Way List adalah koleksi linier dari elemen data yang disebut Simpul atau Node
Simpul atau Node adalah tempat yang disediakan pada suatu area memory tertentu untuk menyimpan data.

Contoh Program

LINKED LIST

(STRUKTUR UNTAIAN)

Terdiri dari Single Linked List (Untaian Tunggal) dan Double Linked List (Untaian Ganda)

SINGLE LINKED LIST ADALAH SUATU STRUKTUR DATA YANG TERDIRI ATAS WADAH UNTUK DATA (ITEM) DAN SUATU PENUNJUK (POINTER) KE ELEMEN UNTAIAN LAINNYA.
Item Item Item
Null

Next Ponter Head

Next

Next

Suatu pointer khusus disediakan untuk menunjuk ke awal untaian head, dan di akhir untaian akan menunjuk item kosong null.

PENYAJIAN LINKED LIST DALAM MEMORI 1. Array INFO(K) : Menyajikan bagian informasi
2. 3. Array LINK(K) : field nextpointer Variabel START : untuk menyimpan alamat dari elemen LIST Pada bagian akhir dari LIST, nextpointer bernilai NULL.

Implementasi Single Linked List Dengan Suatu Record


Pointer:^List; Type List:record; < Isi:item; Next:ponter; > Berbagai prosedur dalam implementasi struktur untaian adalah: initList:inisialisasi stuktrur untaian, pointer head menunjuk ke () null. insertList:memasukkan sebuah elemen baru ke dalam untaian. deleteList:menghapus satu elemen dari untaian. searchList:mencari satu elemen dalam untaian.

MENYISIPKAN ELEMEN (INSERTLIST)


1. 2. 3. 4. Ciptakan satu elemen baru Buatlah pointer next dari elemen baru ini menunjuk null Bila pointer head ini menunjuk null (empty), maka buatlah head yang menunjuk ke elemen baru Bila pointer head tidak menunjuk null, telusuri untaian hingga elemen terakhir kemudian ubah pointer nextnya menunjuk elemen baru.

Procedure insertList (input x : item; in-out Head : pointer;) [ memasukkan satu elemen baru di untaian L ] Definisi Variabel thisptr,lastptr:pointer; Rincian Langkah if(Head)=null; then New(thisptr); thisptr.nextnull; thisptr.isi x; Head thisptr;

Contoh program

else

ENDIF.

THISPTR HEAD; LASTPTR NULL; WHILE (THISPTR < > NULL DO LASTPTR THISPTR; THISPTR THISPTR.NEXT; ENDWHILE NEW(THISPTR); THISPTR.NEXT NULL; LASTPTR.NEXT THISPTR; THISPTR.ISI X;

Mencari Elemen (searchList) Prosedur pencariannya sbb: 1. 2. Telusuri untaian dengan memeriksa isi elemen apakah sama dengan yang dicari Bila sama maka variabel found = true, bila tidak found = false

PROCEDURE SEARCHLIST (INPUT X:ITEM; INPUT HEAD:POINTER; OUTPUT THISPTR:POINTER; OUTPUT LASTPTR:POINTER; OUTPUT FOUND:BOOLEAN) { mencari item x dakan suatu untaian} Definisi Variabel {Tidak ada} Rincian Langkah lastptr Null; thisptr Head; found false; while (thisptr < > Null) and (not found) do if ( x < > thisptr.isi) then lastptr thisptr thisptr thisptr.next;

else found true;


endif endwhile.

Kate

Lisa

Becky

Bill

LIST DATA

HEAD

FOUND FALSE;

MORETOSEARCH : FALSE FOUND : FALSE LOCATION : FALSE MENCARI CHARLIE DALAM UNTAIAN MENGHASILKAN

Kate
List data

Lisa

Becky

Bill

Location Head MoreToSearch Found : :

Mencari Lisa dalam untaian menghasilkan found true;

MENGHAPUS ELEMEN (DELETELIST)

PROSES PENGHAPUSAN ELEMEN DAPAT DILAKUKAN SBB: 1. CARI ELEMEN YANG AKAN DIHAPUS (LOCATION, FOUND= TRUE 2. BILA KETEMU MAKA HAPUS (DISPOSE)

Procedure deleteList (in-out Head:pointer; input x:item; ouput done:boolean) { Menghapus x dari untaian}

Definisi Variabel
thisptr,latsptr:pointer; Rincian Langkah searchList(Head, thisptr, lastptr, x, done); if(done) then if(lastptr=Null) then lastptr Head.next; dispose(Head); Head lastptr; else lastptr.next thisptr.next; dispose(thisptr); endif endif.

Kate
LIST DATA

Lisa

Becky

Bill

LOCATION HEAD MORETOSEARCH : TRUE FOUND : TRUE APABILA YANG DIHAPUS (DELETE) ADALAH LISA, MAKA POINTER KE LISA DIPINDAHKAN KE BECKY

List data

Kate

Lisa

Becky

Bill

Location Head MoreToSearch Found : true : true

Apabila yang dihapus (delete) adalah Kate, maka pointer ke Kate dipindahkan ke Lisa

1. Sisip Depan (Insert Front), artinya menempatkan elemen baru selalu di depan. Langkahnya sbb:
1. ciptakan node baru, New(node); 2. pointer next node baru ini menunjuk ke elemen yang ditunjuk Head, 3. node.next Head 4. Isi node dengan elemen baru, node.isi x; 5. pointer head ini menunjuk ke node baru, Head node;

TEKNIK SISIP ELEMEN

2. Sisip Akhir (Insert End),artinya menempatkan elemen baru selalu di belakang. Langkahnya sbb:

1. ciptakan node baru, New(node); 2. Tempatkan elemen baru pada node baru, node.isi x; 3. pointer node baru selalu menunjuk akhir null, node.next null; 4. telusuri untaian mulai dari head hingga akhir elemen (Last) thisNode Head; Last null; while (thisNode.next < > null) do Last thisNode; thisNode thisNode.next; endwhile; 5. pointer terakhir menunjuk node baru, Last.next Node;

Untaian Melingkar (Circular Linked List) Yaitu untaian tunggal yang telah dimodifikasi, dimana pointer next pada elemen terakhir yang menunjuk null diubah hingga menunjuk elemen pertama yang ditunjuk head.

Karena untaian ini melingkar, maka posisi head bisa ditempatkan paling depan atau paling belakang dari keseluruhan untaian.
Salah satu proses yang paling penting pada untaian ini adalah proses mencari elemen (searchClist), karena proses ini diperlukan ketika membaca suatu elemen tertentu, menyisipkan elemen dan juga menghapus elemen.

PROSEDUR SEARCHCLIST INI MENGGUNAKAN 3 POINTER, YAITU:

1. Head (Penunjuk Elemen Pertama), 2. Location (Penunjuk Node Yang Dibaca), Dan 3. Predloc (Penunjuk Node Sebelum Location)

PROCEDURE SEARCHCLIST (HEAD, ITEM, LOCATION, PREDLOC, FOUND): 1. LOCATION HEAD.NEXT; 2. PREDLOC HEAD; 3. FOUND FALSE; 4. MASIHCARI TRUE; 5. WHILE (MASIHCARI && ! FOUND) DO IF (ITEM < LOCATION.ISI) THEN MASIHCARI FALSE; ELSE IF (ITEM = LOCATION.ISI) THEN FOUND TRUE; ELSE{ PREDLOC LOCATION; LOCATION LOCATION.NEXT; MASIHCARI (LOCATION!= HEAD.NEXT) } ENDIF; ENDIF; ENDWHILE;

PROSEDUR INSERTCLIST INI


1. CIPTAKAN NODE BAR, NEW(NODE)
2. MASUKKAN ITEM KE DALAM ISI NODE, NODE,ISI ITEM; 3. IF(HEAD !=NULL) GUNAKAN PROSEDUR SEARCHCLIST UNTUK MENCARI POSISI SEARCHCLIST (HEAD, ITEM, LOCATION, PREDLOC, FOUND); SISIP DI ANTARA DUA ELEMEN NODE.NEXT PREDLOC.NEXT; PREDLOC.NEXT NODE; IF(HEAD.ISI < ITEM); HEAD NODE; ELSE{ UNTAIAN KOSONG HEAD NODE; NODE.NEXT NODE; } ENDIF; ENDIF;

PROSEDUR DELETECLIST INI


1. SEARCHCLIST (HEAD, ITEM, LOCATION, PREDLOC, FOUND); 2. IF (PREDLOC = LOCATION) // HANYA ADA SATU ELEMEN THEN HEAD NULL; ELSE { PREDLOC.NEXT LOCATION.NEXT; IF (LOCATION = HEAD) //ELEMEN TERAKHIR DIHAPUS THEN HEAD PREDLOC ENDIF; } ENDIF; 3. DISPOSE(LOCATION);

UNTAIANGANDA
Struktur untaian ganda (double linked list) adalah suatu untaian yang memiliki dua pointer, satu pointer menunjuk ke belakang, yaitu next dan satu pointer menunjuk ke depan yaitu back. akses pada untaian ini bersifat maju (forward) atau bersifat mundur (backward) dari posisi mana saja dalam untaian. Head adalah pointer yang menunjuk elemen pertama. Tail adalah pointer yang menunjuk elemen terakhir.

Tail A B

LIST DATA HEAD

NULL

NULL

GAMBAR UNTAIAN GANDA

UNTAIAN GANDA DAPAT DIDEFINISIKAN MELALUI SUATU RECORD, SBB:

POINTER:^DLIST; TYPEDLIST:RECORD; < ISI:ITEM; NEXT:POINTER; BACK:POINTER; >

PROCEDURE INITDLIST OUTPUT HEAD, TAIL:POINTER) {MENGINISIALISASI SUATU UNTAIAN GANDA} DEFINISI VARIABEL {TIDAK ADA} RINCIAN LANGKAH HEAD NULL; TAIL NULL;
Penyisipan satu elemen baru ke dalam suatu untaian tidak berurut pada posisi terakhir dapat dilakukan sbb:

PROCEDURE INSERTDLIST 1. CIPTAKAN NODE BARU 2. POINTER NEXT NODE BARU MENUNJUK NULL 3. POINTER BACK NODE BARU MENUNJUK PADA ELEMEN TERAKHIR DALAM UNTAIAN DITUNJUK OLEH POINTER TAIL. 4. BILA POINTER HEAD MENUNJUK NULL (BERARTI UNTAIAN BARU)

PROCEDURE SEARCHDLIST MASIHCARI TRUE; LOCATION HEAD; FOUND FALSE; WHILE (MASIHCARI &&!FOUND) DO IF (ITEM < LOCATION.ISI) THEN MASIHCARI FALSE; ELSE IF (ITEM = LOCATION.ISI) THEN FOUND TRUE; ELSE { LOCATION LOCATION.NEXT; MASIHCARI LOCATION !=NULL); } ENDIF; ENDIF; ENDWHILE;

ORDERED DOUBLE LINKED LIST (UNTAIAN GANDA YANG TELAH DIURUTKAN)


Ada 3 kejadian yang perlu diperhatikan: 1. 2. 3. Menyisipkan elemen ke untaian yang masih kosong, pada posisi Head Menyisipkan elemen ditunjuk oleh tail pada posisi terakhir, yang

Menyisipkan elemen yang harus berada pada posisi antara head dan tail.

Tail A B

LIST DATA HEAD

NULL

newNode

C
NEXT NULL

GAMBAR PROSES PENYISIPAN

B
1 3 4

D
2 location

newNode

GAMBAR PROSES PENYISIPAN DENGAN POINTER YANG TELAH DIATUR

Proses Penyisipan Secara Umum, Sbb: 1. Ciptakan Node Baru, New(node), Node.Next Null; Node.Back Null; Node.Isi X; 2. Suatu Pointer Location Untuk Mencari Posisi, Location Head; 3. Selama X Masih <= Isi Pointer,maju Terus While ( X <= (Location.Next).Isi) Do Location Location.Next; 4. Pointer Back Dari Node Baru (1) Diupdate, Node.Back Location.Back; 5. Pointer Back Dari Thispoint (4) Menunjuk Node, Location.Back Node; 6. Pointer Next Posisi Sebelumnya (3) Menunjuk Node, (Location.Back).Next Node: 7. Pointer Next Dari Node Baru (2) Menunjuk Posisi Saat Ini, Node.Next Location;

PROSES MENGHAPUS ELEMEN PADA UNTAIAN GANDA, SBB:


Location head; While ( x < > location.isi) do location location.next; (location.back).next location.next; (location.next).back location.back; Dispose(location);

Anda mungkin juga menyukai