Presentasi sedang didownload. Silahkan tunggu

Presentasi sedang didownload. Silahkan tunggu

Linear Doubly Linked List

Presentasi serupa


Presentasi berjudul: "Linear Doubly Linked List"— Transcript presentasi:

1 Linear Doubly Linked List
6.3 & 7.3 NESTED LOOP

2 Linear Doubly Linked List ( Linked List dengan pointer ganda )

3 2. LINEAR DOUBLY LINKED LIST
3. 02 2. LINEAR DOUBLY LINKED LIST LINKED LIST LURUS DENGAN POINTER GANDA

4 ILUSTRASI LINEAR DOUBLY LINKED LIST
3. 01 FIRST LAST RIGHT RIGHT LEFT INFO LEFT INFO RIGHT RIGHT LEFT INFO LEFT INFO 25 12 17 10 (1) (2) (3) (4) LAST FIRST INFO RIGHT LEFT LEFT INFO RIGHT INFO RIGHT INFO RIGHT LEFT LEFT 10 17 12 25 (4) (3) (2) (1)

5 Ilustrasi sebuah Simpul
4. 01 Ilustrasi sebuah Simpul RIGHT LEFT INFO Simpul dengan 3 elemen atau field Nama field Tipe Isi : RIGHT : pointer : akan diisi dengan alamat record berikutnya (disebelah ‘kanan’nya) Nama field Tipe Isi : INFO : integer : akan diisi data Nama field Tipe Isi : LEFT : pointer : akan diisi dengan alamat record sebelumnya (disebelah ‘kiri’nya)

6 Dalam Bahasa C, salah satu cara untuk menyatakan suatu simpul
4. 01 Dalam Bahasa C, salah satu cara untuk menyatakan suatu simpul dengan struktur demikian, dapat ditulis sebagai berikut : struct Simpul { struct Simpul *LEFT; int INFO; struct Simpul *RIGHT; }; Simpul *P, *FIRST, *LAST; RIGHT LEFT INFO

7 Linear Doubly Pembuatan Simpul Awal
Linked List Pembuatan Simpul Awal 6.3 & 7.3 NESTED LOOP

8 25 P Ini Simpul Awal 3. 01 FIRST LAST 25 12 17 10 (1) (2) (3) (4) LAST
RIGHT RIGHT LEFT INFO LEFT INFO INFO RIGHT LEFT LEFT INFO RIGHT 25 12 17 10 (1) (2) (3) (4) LAST FIRST P Ini Simpul Awal RIGHT LEFT INFO 25

9 25 P 2.2.1 Pembuatan Simpul Awal (inisialisasi) void Awal (void)
4. 02 void Awal (void) { int X; scanf(“%i”, &X); P = (Simpul *) malloc(sizeof(Simpul)); P->INFO = X; FIRST = P; LAST = P; P->LEFT = NULL; P->RIGHT = NULL; } 1) 2) 3) 4) 5) 6) LAST FIRST P RIGHT LEFT INFO 25

10 P = (Simpul *) malloc(sizeof(Simpul));
P->INFO = X; FIRST = P; LAST = P; P->LEFT = NULL; P->RIGHT = NULL; } 4. 02 1) 2) 3) 4) 5) 6) 1) P = (Simpul *) malloc(sizeof(Simpul)); P RIGHT LEFT INFO

11 25 P->INFO = X; P 2) RIGHT INFO LEFT 4. 02
P = (Simpul *) malloc(sizeof(Simpul)); P->INFO = X; FIRST = P; LAST = P; P->LEFT = NULL; P->RIGHT = NULL; } 4. 02 1) 2) 3) 4) 5) 6) 2) P->INFO = X; P RIGHT LEFT INFO 25

12 25 FIRST = P; P 3) FIRST RIGHT INFO LEFT 4. 02
P = (Simpul *) malloc(sizeof(Simpul)); P->INFO = X; FIRST = P; LAST = P; P->LEFT = NULL; P->RIGHT = NULL; } 4. 02 1) 2) 3) 4) 5) 6) FIRST = P; 3) FIRST P RIGHT LEFT INFO 25

13 25 LAST = P; P 4) LAST FIRST RIGHT INFO LEFT 4. 02
P = (Simpul *) malloc(sizeof(Simpul)); P->INFO = X; FIRST = P; LAST = P; P->LEFT = NULL; P->RIGHT = NULL; } 4. 02 1) 2) 3) 4) 5) 6) LAST = P; 4) LAST FIRST P RIGHT LEFT INFO 25

14 25 P->LEFT = NULL; P 5) LAST FIRST RIGHT INFO LEFT 4. 02
P = (Simpul *) malloc(sizeof(Simpul)); P->INFO = X; FIRST = P; LAST = P; P->LEFT = NULL; P->RIGHT = NULL; } 4. 02 1) 2) 3) 4) 5) 6) P->LEFT = NULL; 5) LAST FIRST P RIGHT LEFT INFO 25

15 25 P->RIGHT = NULL; P 6) LAST FIRST RIGHT INFO LEFT 4. 02
P = (Simpul *) malloc(sizeof(Simpul)); P->INFO = X; FIRST = P; LAST = P; P->LEFT = NULL; P->RIGHT = NULL; } 4. 02 1) 2) 3) 4) 5) 6) P->RIGHT = NULL; 6) LAST FIRST P RIGHT LEFT INFO 25

16 4. 02 P RIGHT LEFT INFO 25 P->RIGHT P->LEFT P->INFO

17 25 P P->RIGHT, atau FIRST->RIGHT P->LEFT, atau FIRST->LEFT
4. 02 FIRST P RIGHT LEFT INFO 25 P->RIGHT, atau FIRST->RIGHT P->LEFT, atau FIRST->LEFT P->INFO, atau FIRST->INFO

18 25 P P->RIGHT, atau FIRST->RIGHT, atau LAST->RIGHT
4. 02 LAST FIRST P RIGHT LEFT INFO 25 P->RIGHT, atau FIRST->RIGHT, atau LAST->RIGHT P->LEFT, atau FIRST->LEFT, atau LAST->LEFT P->INFO, atau FIRST->INFO; atau LAST->INFO

19 25 P P->RIGHT, atau FIRST->RIGHT, atau LAST->RIGHT
4. 02 LAST FIRST P RIGHT LEFT INFO 25 P->RIGHT, atau FIRST->RIGHT, atau LAST->RIGHT P->LEFT, atau FIRST->LEFT, atau LAST->LEFT P->INFO, atau FIRST->INFO; atau LAST->INFO

20 Linear Doubly INSERT KANAN
Linked List INSERT KANAN 6.3 & 7.3 NESTED LOOP

21 Menambah simpul baru diujung paling kanan Linked List yang sudah ada
3.08 INSERT KANAN Menambah simpul baru diujung paling kanan Linked List yang sudah ada Disebut juga INSERT AKHIR

22 3.08 FIRST LAST INFO RIGHT RIGHT LEFT LEFT INFO INFO RIGHT LEFT LEFT INFO RIGHT 25 12 17 10 (1) (2) (3) (4) (5) Kalau sudah ada 4 buah simpul, INSERT KANAN akan menginsert simpul yang baru di buat, diujung paling kanan menjadi simpul no. (5)

23 25 sudah ada simpul awal sebagai berikut : LAST FIRST RIGHT INFO LEFT
3.05 sudah ada simpul awal sebagai berikut : LAST FIRST RIGHT LEFT INFO 25 (1)

24 25 12 P akan dibuat simpul baru yang akan diinsert disini LAST FIRST
3.05 akan dibuat simpul baru yang akan diinsert disini LAST FIRST P RIGHT RIGHT LEFT INFO LEFT INFO 25 12 (1) (2) Perhatikan pointer P menujuk simpul yang baru tidak menunjuk simpul yang lama lagi

25 25 12 P sehingga akan ter-link sebagai berikut : LAST FIRST RIGHT
3.05 sehingga akan ter-link sebagai berikut : LAST FIRST P RIGHT RIGHT LEFT INFO LEFT INFO 25 12 (1) (2)

26 Algoritma Membuat Simpul Baru Dan INSERT KANAN
3.05 Algoritma Membuat Simpul Baru Dan INSERT KANAN void Awal (void) { int X; scanf(“%i”, &X); P = (Simpul *) malloc(sizeof(Simpul)); P->INFO = X; LAST->RIGHT = P; P->LEFT = LAST; LAST = P; P->RIGHT = NULL; } 1) 2) 3) 4) 5) 6) LAST FIRST RIGHT P RIGHT LEFT INFO LEFT INFO 25 12 (1) (2)

27 Algoritma tahap per tahap
3.05 Algoritma tahap per tahap

28 25 P P = (Simpul *) malloc(sizeof(Simpul)); LAST FIRST RIGHT RIGHT
P->INFO = X; LAST->RIGHT = P; P->LEFT = LAST; LAST = P; P->RIGHT = NULL; 1) 2) 3) 4) 5) 6) 3.05 P = (Simpul *) malloc(sizeof(Simpul)); LAST FIRST P RIGHT RIGHT LEFT INFO LEFT INFO 25 (1) (2) Membuat Simpul (2)

29 25 12 P P->INFO = X; LAST FIRST RIGHT RIGHT LEFT INFO LEFT INFO (1)
P = (Simpul *) malloc(sizeof(Simpul)); P->INFO = X; LAST->RIGHT = P; P->LEFT = LAST; LAST = P; P->RIGHT = NULL; 1) 2) 3) 4) 5) 6) 3.05 P->INFO = X; LAST FIRST P RIGHT RIGHT LEFT INFO LEFT INFO 25 12 (1) (2) P->INFO diisi dengan nilai X

30 25 12 P LAST->RIGHT = P; LAST FIRST RIGHT RIGHT LEFT INFO LEFT INFO
P = (Simpul *) malloc(sizeof(Simpul)); P->INFO = X; LAST->RIGHT = P; P->LEFT = LAST; LAST = P; P->RIGHT = NULL; 1) 2) 3) 4) 5) 6) 3.05 LAST->RIGHT = P; LAST FIRST P RIGHT RIGHT LEFT INFO LEFT INFO 25 12 (1) (2) Pointer RIGHT Simpul (1) menunjuk simpul (2)

31 25 12 P P->LEFT = LAST; LAST FIRST RIGHT RIGHT LEFT INFO LEFT INFO
P = (Simpul *) malloc(sizeof(Simpul)); P->INFO = X; LAST->RIGHT = P; P->LEFT = LAST; LAST = P; P->RIGHT = NULL; 1) 2) 3) 4) 5) 6) 3.05 P->LEFT = LAST; LAST FIRST P RIGHT RIGHT LEFT INFO LEFT INFO 25 12 (1) (2) Pointer LEFT simpul (2) menunjuk simpul (1)

32 25 12 P LAST = P; LAST FIRST RIGHT RIGHT LEFT INFO LEFT INFO (1) (2)
P = (Simpul *) malloc(sizeof(Simpul)); P->INFO = X; LAST->RIGHT = P; P->LEFT = LAST; LAST = P; P->RIGHT = NULL; 1) 2) 3) 4) 5) 6) 3.05 LAST = P; LAST FIRST P RIGHT RIGHT LEFT INFO LEFT INFO 25 12 (1) (2) Pointer LAST pindah menunjuk simpul teralhir

33 25 12 P P->RIGHT = NULL; LAST FIRST RIGHT RIGHT LEFT INFO LEFT INFO
P = (Simpul *) malloc(sizeof(Simpul)); P->INFO = X; LAST->RIGHT = P; P->LEFT = LAST; LAST = P; P->RIGHT = NULL; 1) 2) 3) 4) 5) 6) 3.05 P->RIGHT = NULL; LAST FIRST P RIGHT RIGHT LEFT INFO LEFT INFO 25 12 (1) (2) Pointer RIGHT simpul (2) diisi NULL

34 3.05 LATIHAN DI KELAS

35 25 12 P Pertanyaan : Ada berapa buah simpul Ada berapa buah pointer
3.05 LAST FIRST P RIGHT RIGHT LEFT INFO LEFT INFO 25 12 (1) (2) Pertanyaan : Ada berapa buah simpul Ada berapa buah pointer Sebutkan nama dan isinya masing-masing

36 25 12 P LAST FIRST RIGHT RIGHT LEFT INFO LEFT INFO (1) (2) 3.05 3 1 2
6 5 (1) (2) 7 4

37 25 12 P No Nama isi &(1) FIRST P &(2) LAST &(2)
3 RIGHT LEFT RIGHT No Nama isi LEFT INFO INFO 1 2 &(1) 1 FIRST 25 6 12 P 2 &(2) 5 3 LAST &(2) 4 (1) (2) 7 No Pointer Nama pointer isi 4 5 6 7

38 25 12 P No Nama isi &(1) FIRST P &(2) LAST &(2)
3 RIGHT LEFT RIGHT No Nama isi LEFT INFO INFO 1 2 &(1) 1 FIRST 25 6 12 P 2 &(2) 5 3 LAST &(2) 4 (1) (2) 7 No Pointer Nama pointer isi ->LEFT yaitu : 4 1 ->LEFT yaitu : 6 5 6 7

39 25 12 P No Nama isi &(1) FIRST P &(2) LAST &(2)
3 RIGHT LEFT RIGHT No Nama isi LEFT INFO INFO 1 2 &(1) 1 FIRST 25 6 12 P 2 &(2) 5 3 LAST &(2) 4 (1) (2) 7 No Pointer Nama pointer isi ->LEFT yaitu : FIRST->LEFT 4 1 NULL ->LEFT yaitu : P->LEFT->LEFT LAST->LEFT->LEFT 6 5 6 7

40 25 12 P No Nama isi &(1) FIRST P &(2) LAST &(2)
3 RIGHT LEFT RIGHT No Nama isi LEFT INFO INFO 1 2 &(1) 1 FIRST 25 6 12 P 2 &(2) 5 3 LAST &(2) 4 (1) (2) 7 No Pointer Nama pointer isi ->LEFT yaitu : FIRST->LEFT 4 1 NULL ->LEFT yaitu : P->LEFT->LEFT LAST->LEFT->LEFT 6 ->RIGHT yaitu : 5 1 ->RIGHT yaitu : 6 6 7

41 25 12 P No Nama isi &(1) FIRST P &(2) LAST &(2)
3 RIGHT LEFT LEFT RIGHT No Nama isi INFO INFO 1 2 &(1) 1 FIRST 25 6 12 P 2 &(2) 5 3 LAST &(2) 4 (1) (2) 7 No Pointer Nama pointer isi ->LEFT yaitu : FIRST->LEFT 4 1 NULL ->LEFT yaitu : P->LEFT->LEFT LAST->LEFT->LEFT 6 ->RIGHT yaitu : FIRST->RIGHT 5 1 &(2) ->RIGHT yaitu : P->LEFT->RIGHT LAST->LEFT->RIGHT 6 6 7

42 25 12 P No Nama isi &(1) FIRST P &(2) LAST &(2)
3 RIGHT LEFT LEFT RIGHT No Nama isi INFO INFO 1 2 &(1) 1 FIRST 25 6 12 P 2 &(2) 5 3 LAST &(2) 4 (1) (2) 7 No Pointer Nama pointer isi ->LEFT yaitu : FIRST->LEFT 4 1 NULL ->LEFT yaitu : P->LEFT->LEFT LAST->LEFT->LEFT 6 ->RIGHT yaitu : FIRST->RIGHT 5 1 &(2) ->RIGHT yaitu : P->LEFT->RIGHT LAST->LEFT->RIGHT 6 ->LEFT yaitu : 6 2 ->LEFT yaitu : 3 ->LEFT yaitu : 5 7

43 25 12 P No Nama isi &(1) FIRST P &(2) LAST &(2)
3 RIGHT LEFT LEFT RIGHT No Nama isi INFO INFO 1 2 &(1) 1 FIRST 25 6 12 P 2 &(2) 5 3 LAST &(2) 4 (1) (2) 7 No Pointer Nama pointer isi ->LEFT yaitu : FIRST->LEFT 4 1 NULL ->LEFT yaitu : P->LEFT->LEFT LAST->LEFT->LEFT 6 ->RIGHT yaitu : FIRST->RIGHT 5 1 &(2) ->RIGHT yaitu : P->LEFT->RIGHT LAST->LEFT->RIGHT 6 ->LEFT yaitu : P->LEFT 6 2 ->LEFT yaitu : LAST->LEFT &(1) 3 ->LEFT yaitu : FIRST->RIGHT->LEFT 5 7

44 25 12 P No Nama isi &(1) FIRST P &(2) LAST &(2)
3 RIGHT LEFT RIGHT No Nama isi LEFT INFO INFO 1 2 &(1) 1 FIRST 25 6 12 P 2 &(2) 5 3 LAST &(2) 4 (1) (2) 7 No Pointer Nama pointer isi ->LEFT yaitu : FIRST->LEFT 4 1 NULL ->LEFT yaitu : P->LEFT->LEFT LAST->LEFT->LEFT 6 ->RIGHT yaitu : FIRST->RIGHT 5 1 &(2) ->RIGHT yaitu : P->LEFT->RIGHT LAST->LEFT->RIGHT 6 ->LEFT yaitu : P->LEFT 6 2 ->LEFT yaitu : LAST->LEFT &(1) 3 ->LEFT yaitu : FIRST->RIGHT->LEFT 5 ->RIGHT yaitu : 7 2 ->RIGHT yaitu : 3 ->RIGHT yaitu : 5

45 25 12 P No Nama isi &(1) FIRST P &(2) LAST &(2)
3 RIGHT LEFT LEFT RIGHT No Nama isi INFO INFO 1 2 &(1) 1 FIRST 25 6 12 P 2 &(2) 5 3 LAST &(2) 4 (1) (2) 7 No Pointer Nama pointer isi ->LEFT yaitu : FIRST->LEFT 4 1 NULL ->LEFT yaitu : P->LEFT->LEFT LAST->LEFT->LEFT 6 ->RIGHT yaitu : FIRST->RIGHT 5 1 &(2) ->RIGHT yaitu : P->LEFT->RIGHT LAST->LEFT->RIGHT 6 ->LEFT yaitu : P->LEFT 6 2 ->LEFT yaitu : LAST->LEFT &(1) 3 ->LEFT yaitu : FIRST->RIGHT->LEFT 5 ->RIGHT yaitu : P->RIGHT 7 2 ->RIGHT yaitu : LAST->RIGHT NULL 3 ->RIGHT yaitu : FIRST->RIGHT->RIGHT 5

46 4. 05 109 3). LAST->RIGHT = P; 25 12 4). P->LEFT = LAST;
INFO RIGHT LEFT FIRST 12 LAST P void InsertKanan (void) { int X; scanf(“%i”, &X); P = (Simpul *) malloc(sizeof(Simpul)); P->INFO = X; LAST->RIGHT = P; P->LEFT = LAST; LAST = P; P->RIGHT = NULL; } 1) 2) 3) 4) 5) 6) Harap diingat, bahwa pointer ini sekarang namanya ada 2 yaitu: FIRST-RIGHT, atau LAST->RIGHT Catatan : Untuk menghubungkan simpul (1) dengan atau ke simpul(2), ada 2 instruksi yang dapat digunakan yaitu : LAST->RIGHT = P; atau FIRST->RIGHT = P; tapi disini dipilih LAST->RIGHT = P; karena instruksi ini dapat juga digunakan untuk menghubungkan simpul (2) ke simpul (3), (3) ke (4), (4) ke (5) danseterusnya, sebab pointer LAST selalu menunjuk simpul yang terakhir 4). P->LEFT = LAST; Akan menghasilkan : Catatan : Disinipun dapat digunakan 2 macam instruksi yaitu : P->LEFT = LAST; atau P->LEFT = FIRST; denganalasan yang sama seperti diatas, maka dipilih : P->LEFT = LAST; 25 INFO RIGHT LEFT FIRST 12 LAST P Untuk memindahkan pointer LAST agar menunjuk simpul no (2) instruksi yang paling mudah dimengerti adalah : LAST = P; Sebenarnya bisa juga dengan instruksi : LAST = LAST->RIGHT yang artinya mengeser pointer LAST satu langkah maju sesuai arah pointer (arah panah kekanan) bahkan karena simpul (1) juga ditunjuk oleh pointer FIRST, maka bisa juga dengan instruksi : LAST = FIRST->RIGHT; 5). LAST = P; dan Akan menghasilkan : 25 INFO RIGHT LEFT FIRST 12 LAST P 109

47 4. 06 110 6) P->RIGHT = NULL; Akan menghasilkan : 25 12
void InsertKanan (void) { int X; scanf(“%i”, &X); p = (Simpul *) malloc(sizeof(Simpul)); P->INFO = X; LAST->RIGHT = P; P->LEFT = LAST; LAST = P; P->RIGHT = NULL; } Akan menghasilkan : P FIRST INFO RIGHT LAST 1) 2) 3) 4) 5) 6) LEFT LEFT INFO RIGHT 25 12 (1) (2) Pointer ini namanya ada 3 yaitu : P->LEFT, atau LAST->LEFT atau FIRST->RIGHT->LEFT Pointer ini namanya ada 3 yaitu : P->RIGHT, atau LAST->RIGHT, atau FIRST->RIGHT->RIGHT. Pointer ini namanya ada 3 yaitu : FIRST->RIGHT, atau P->LEFT->RIGHT, atau LAST->LEFT->RIGHT. Pointer ini namanya ada 3 yaitu : FIRST->LEFT, atau P->LEFT->LEFT, atau LAST->LEFT->LEFT Apabila instruksi (fungsi) InsertKanan diatas dilaksanakan sebanyak 3 kali dengan nilai X masing-masing = 12, 17, dan 10, maka akan dihasilkan linked list sebagai berikut: FIRST LAST LEFT INFO RIGHT LEFT INFO RIGHT LEFT INFO RIGHT LEFT INFO RIGHT 25 12 17 10 (1) (2) (3) (4) 110

48 4. 07 111 2.2.3 INSERT KIRI (Insert Awal)
Sudah dibuat simpul awal sebagai berikut : Akan dibuat simpul baru (2) yang akan diinsert disebelah kiri simpul lama (1), sehingga tersambung dengan simpul awal (1) sebagai berikut: LAST FIRST P LAST RIGHT LEFT INFO P LEFT INFO RIGHT FIRST LEFT INFO RIGHT 12 25 25 (2) (1) (1) Instruksi yang diperlukan, adalah sebagai berikut : Fungsi untuk Insert Kanan. void InsertKiri (void) { int X; scanf(“%i”, &X); p = (Simpul*) malloc(sizeof(Simpul)); P->INFO = X; P->RIGHT = LAST; LAST->LEFT = P; LAST = P; P->LEFT = NULL; } 1) 2) 3) 4) 5) 6) Ada 6 instruksi yang perlu kita perhatikan : 1) P = (Simpul*) malloc(sizeof(Simpul)); 2) P->INFO = X; (misal X = 12) Akan menghasilkan : LAST P FIRST LEFT INFO RIGHT LEFT INFO RIGHT Pointer P tidak lagi menunjuk simpul pertama (1) tapi menunjuk simpul yang baru dibuat (2) 12 25 111

49 4. 08 112 3) P->RIGHT = LAST; Akan menghasilkan : P 12 25
void InsertKiri (void) { int X; scanf(“%i”, &X); p = (Simpul *) malloc(sizeof(Simpul)); P->INFO = X; P->RIGHT = LAST; LAST->LEFT = P; LAST = P; P->LEFT = NULL; } 3) P->RIGHT = LAST; Akan menghasilkan : LAST P 1) 2) 3) 4) 5) 6) FIRST LEFT INFO RIGHT LEFT INFO RIGHT 12 25 (2) (1) Catatan : Untuk menghubungkan simpul (2) dengan atau ke simpul(1), sekarang ini ada 2 instruksi yang dapat digunakan yaitu : P->RIGHT = LAST; atau P->RIGHT = FIRST; tapi disini dipilih P->RIGHT = LAST; karena instruksi ini dapat juga digunakan untuk menghubungkan simpul (3) ke simpul (2), (4) ke (3), (5) ke (4) danseterusnya, sebab pointer LAST selalu menunjuk simpul yang terakhir (paling kiri) 4) LAST->LEFT = P; Akan menghasilkan : LAST Catatan : Disinipun dapat digunakan 2 macam instruksi yaitu : LAST->LEFT = P; atau FIRST->LEFT = P; denganalasan yang sama seperti diatas, maka dipilih : LAST->LEFT = P; P FIRST LEFT INFO RIGHT LEFT INFO RIGHT 12 25 (2) (1) Untuk memindahkan pointer LAST agar menunjuk simpul no (2) instruksi yang paling mudah dimengerti adalah : LAST = P; Sebenarnya bisa juga dengan instruksi : LAST = LAST->LEFT yang artinya mengeser pointer LAST satu langkah kekiri bahkan karena sekarang ini simpul (1) juga ditunjuk oleh pointer FIRST, maka bisa juga dengan instruksi : LAST = FIRST->LEFT; 5) LAST = P; dan Akan menghasilkan : LAST P FIRST LEFT INFO RIGHT LEFT INFO RIGHT 12 25 (2) (1) 112

50 4. 09 113 6) P->LEFT = NULL; Akan menghasilkan : 12 25
void InsertKiri (void) { int X; scanf(“%i”, &X); p = (Simpul *) malloc(sizeof(Simpul)); P->INFO = X; P->RIGHT = LAST; LAST->LEFT = P; LAST = P; P->LEFT = NULL; } 6) P->LEFT = NULL; Akan menghasilkan : P 1) 2) 3) 4) 5) 6) LAST LEFT INFO RIGHT FIRST LEFT INFO RIGHT 12 25 (2) (1) Pointer ini namanya ada 3 yaitu : FIRST->LEFT, atau P->RIGHT->LEFT atau LAST->RIGHT->LEFT Pointer ini namanya ada 3 yaitu : FIRST->RIGHT, atau P->RIGHT->RIGHT, atau LAST->RIGHT->RIGHT. Pointer ini namanya ada 3 yaitu : P->RIGHT, atau LAST->RIGHT, atau FIRST->LEFT->RIGHT. Pointer ini namanya ada 3 yaitu : P->LEFT, atau LAST->LEFT, atau FIRST->LEFT->LEFT Apabila instruksi (fungsi) InsertKiri diatas dilaksanakan sebanyak 3 kali dengan nilai X masing-masing = 12, 17, dan 10, maka akan dihasilkan linked list sebagai berikut: LAST LEFT INFO RIGHT LEFT INFO RIGHT LEFT INFO RIGHT FIRST LEFT INFO RIGHT 10 17 12 25 (4) (3) (2) (1) 113

51 4. 10 INSERT TENGAH. Sudah ada doubly linked linear list. Simpul no (7) sudah ditunjuk oleh pointer P. Sudah dibuat sebuah simpul baru yang ditunjuk oleh pointer P, dan P->INFO sudah diisi seperti ilustrasi berikut ini. P LEFT INFO RIGHT Q 20 LEFT INFO RIGHT LEFT INFO RIGHT 32 27 (7) (8) Soal : Susun algoritma untuk menginsert simpul baru tersebut antara simpul no (7) dan simpul no (8), sehingga terhubung seperti yang diilustrasikan berikut ini : P LEFT INFO RIGHT 20 Q 4) LEFT INFO RIGHT 8 3) LEFT INFO RIGHT 2) 1) 32 27 7 9 Instruksi yang diperlukan, adalah sebagai berikut : Fungsi untuk Insert Tengah. void InsertTengah (void) { int X; scanf(“%i”, &X); p = (Simpul *) malloc(sizeof(Simpul)); P->INFO = X; P->RIGHT = Q->RIGHT; P->LEFT = Q; Q->RIGHT->LEFT = P; Q->RIGHT = P; Sekarang simpul ini menjadi berada pada urutan simpul yang ke 9. Nomor ini tak ada dalam komputer. Nomor ini hanya dipakai untuk mengilustrasikan urutan simpul. 1) 2) 3) 4) atau P->RIGHT->LEFT = P; Ada 4 instruksi yang pokok 114


Download ppt "Linear Doubly Linked List"

Presentasi serupa


Iklan oleh Google