MATERI LINK LIS PADA PASCAL
BAB II
PEMBAHASAN
Linked list (one way list) adalah suatu kumpulan elemen data (yang disebut sebagai node) dimana urutannya ditentukan oleh suatu pointer
DEFINISI
Setiap elemen (node) dari suatu linked list terdiri atas 2 bagian yaitu :
- Info, berisi informasi tentang elemen data yang bersangkutan
- Next (linked field / next pointer field), berisi alamat dari elemen (node) selanjutnya yang dituju
B. BENTUK NODE SINGLE LINKED LIST NON CIRCULAR
Pengertian : menempati alamat memori tertentu
- Single : artinya field pointernya hanya satu buah saja dan satu arah serta pada akhir node, pointernya menunjuk NULL
- Linked list : artinya node – node tersebut saling terhubung satu sama lain
- Setiap node pada linked list mempunyai field yang berisi pointer ke node berikutnya, dan juga memiliki field yang berisi data
- Node terakhir akan menunjuk ke null, yang akan digunakan sebagai kondisi berhenti pada saat pembacaan isi linked list
Berikut ini sebuah contoh linked list yang terdiri atas 4 node
- Pada node ke 4 field nextnya berisi null artinya node ke 4 tersebut adalah node terakhir
- Node – node dalam linked list tidak harus selalu di gambarkan parallel seperti pada gambar diatas. Linked list pada contoh diatas dapat pula digambarkan seperti berikut
Ada 2 hal yang menjadi kerugian dengan representasi suatu data dengan linked lis yaitu:
1. Diperlukan ruang tambahan untuk menyatakan / tempat field pointer.
2. Diperlukan waktu yang lebih banyak untuk mencari suatu node ke dalam linked list.
Sedangkan keuntungannya adalah
C. OPERASI DASAR PADA LINKED LIST
- Jenis data yang berbeda dapat di link
- Operasi remove / insert hanya dilakukan dengan mengubah pointernya saja.
C. OPERASI DASAR PADA LINKED LIST
- Jika P adalah suatu variabel pointer, maka nilainya adalah alamat / lokasi dari variabel lain yang dituju
- Operasi yang didefinisikan pada suatu variabel pointer adalah:
- Test apakah sama dengan null
- Test untuk kesamaan dengan variabel pointer lain
- Menetapkan sama dengan null
- Menetapkan menuju ke node lain
- Notasi yang didefinisikan sehubungan dengan operasi diatas adalah:
- Node (P) artinya node yang ditunjuk oleh pointer P
- INFO (P) artinya nilai info dari node yang ditunjuk pointer P
- NEXT (P) artinya hubungan (link) selanjutnya dari node yang ditunjuk oleh pointer P
- NODE (P) : node yang ditunjuk oleh P yaitu node pertama
- INFO (P) : A
- NEXT (P) : node ke 2
- INFO(NEXT(NEXT(P))) = C
D. MENGHAPUS SUATU NODE DARI LINKED LIST (REMOVE)
- Untuk menghapus node dalam linked list digunakan procedure FREENODE
- Jika Q adalah suatu variabel pointer, maka FREENODE (Q) akan menyebabkan node yang ditunjuk oleh variabel pointer Q dihapus dari linked list
- Perhatikan linked list berikut
Langkah 1
Q := NEXT(P)
NEXT(P) := NEXT (Q)
Langkah 3
FREENODE(Q)
Procedure freenode (Q)
NEXT (Q) := avail
- Untuk menyisipkan node kedalam linked list digunakan procedure GETNODE.
- Jika NEW adalah suatu variabel pointer, maka GETNODE(NEW) akan menyebabkan node yang ditunjuk oleh variabel pointer NEW di sisipkan ke dalam linked list.
PROCEDURE GETNODE (NEW)
If Avail = Null
Then out-of-free-space
Then out-of-free-space
- Else begin
Getnode := avail;
- Avail := Next(Avail);
- Next(Getnode) := Null;
- End;
- ALGORITMA MENYISIPKAN SEBUAH NODE
- Getnode(NEW);
- Info(NEW) := Name;
- Q := Next(P)
- Next(P) := NEW
- Next(NEW) := Q
Ada beberapa aturan yang dapat didefinisikan pada operasi didalam linked list yaitu. Jika tidak menggunakan logika linked list (pada umumnya dalam meng-input data digunakan cara sequential)
- Jika menggunakan logika linked list
Type nodeptr = ^nodetype
Nametype = packed array[1..10] of char
Nodetype = record
Info : nametype;
Next : nodeptr;
Nametype = packed array[1..10] of char
Nodetype = record
Info : nametype;
Next : nodeptr;
End;
Var p : nodeptr;
Nodeptr : nodetype;
Nodeptr : nodetype;
Catatan :
- P ^. Info : info dari node yang ditunjuk oleh pointer P
- P ^. Next : next dari node yang ditunjuk oleh pointer P
- P := nil : pointer P berisi nilai Null
- New (P) : fungsi getnode dalam pascal
- Dispose(P) : procedure freenode dalam pascal
H. MENGHAPUS SEBUAH NODE DALAM PASCAL
Procedure removaf(p:nodeptr, var out:nametype);
Var q : nodeptr;
Begin
If (p^.next = nil)
Then UNDERFLOW-CONDITION
Else
begin
q := p^.next;
p^.next := q^.next;
out := q^.info;
dispose (q);
end;
end;
Begin
If (p^.next = nil)
Then UNDERFLOW-CONDITION
Else
begin
q := p^.next;
p^.next := q^.next;
out := q^.info;
dispose (q);
end;
end;
I. MENYISIPKAN SEBUAH NODE DALAM PASCAL
Procedure inseraf(p:nodeptr, in:nametype);
Var q : nodeptr;
Begin
New(q);
q^.info := in;
q^.next := p^.next;
p^.next := q;
end;
q^.info := in;
q^.next := p^.next;
p^.next := q;
end;
J. INSERT-END
Penyisipan pada akhir dari suatu linked list (linked list antrean) dalam Pascal
Jika sebuah linked list digunakan untuk menggambarkan suatu antrean, dalam hal ini pointer dapat langsung menunjuk ke rear / akhir dari antrean untuk menghindari pengulangan melalui semua node untuk menemukan terakhir
Procedure inserend (in : nametype, var rear : nodeptr);
Var newnode : nodeptr;
Begin
New(newnode);
newnode^.info := in;
newnode^.next := nil;
rear^.next :=newnode;
rear := newnode;
end;
Komentar
Posting Komentar