double linked list 1

12

Click here to load reader

Upload: ahmad-reza-musthafa

Post on 24-Jul-2015

219 views

Category:

Documents


16 download

TRANSCRIPT

Page 1: Double Linked List 1

Praktikum Pemrograman Bahasa C

1

PENDAHULUAN LINKED LIST III

1. Buatlah flowchart untuk implementasi stack dengan linked list 2. Buatlah flowchart untuk implementasi queue dengan linked list 1 )

Mulai

struct node { int info; struct node *link; }; typedef struct node *NODE; NODE x;

/*Implementasi push pada

stack*/

Masukkan elemen

Simpan di variabel item

first=insert_front(item,first);

NODE insert_front(int item,NODE first) { NODE temp; temp=getnode(); temp->info=item; temp->link=first; return temp; }

Letakkan elemen

Cetak output

Berhenti

2 )

Mulai

struct node { int info; struct node *link; }; typedef struct node *NODE; NODE x;

/*Implementasi menampilkan

queue*/

NODE temp = first;

Berhenti

Jika first == NULL

Queue kosong

Cetak isi Queue

Selama temp tidak sama dengan NULL

Ya

Cek sudah NULL

Sudah

Belum

Page 2: Double Linked List 1

Praktikum Pemrograman Bahasa C

2

PENDAHULUAN DOUBLE LINKED LIST I

1. Buatlah algoritma untuk menyisipkan simpul sebagai simpul awal dari double linked list. 2. Buatlah algoritma untuk menyisipkan simpul sebagai simpul akhir dari double linked list. 3. Buatlah algoritma untuk menyisipkan simpul setelah simpul tertentu dari double linked list. 4. Buatlah algoritma untuk menyisipkan simpul sebelum simpul tertentu dari double linked list.

1) Menyisipkan simpul sebagai simpul awal dari double linked list. Operasi ini berguna untuk menambahkan elemen baru di posisi pertama. Langkah pertama untuk

penambahan data adalah pembuatan elemen baru dan pengisian nilai infonya. Pointer yang menunjuk ke data tersebut dipanggil dengan nama baru. Kondisi di setelah ada pembuatan elemen baru tersebut adalah : Ada 2 kondisi yang harus diperhatikan dalam penambahan data di awal yaitu : a. Ketika linked list masih kosong

Kalau kondisi linked list masih kosong, maka elemen baru akan menjadi awal dan akhir linked list. Perhatikan gambar di bawah ini :

• Kondisi sebelum disisipkan

• Kondisi setelah operasi penambahan

Operasi penambahan awal ketika linked list masih kosong adalah dengan mengisikan alamat pointer baru ke pointer awal dan pointer akhir. Lihat gambar di bawah ini. b. Ketika linked list sudah mempunyai data

Kondisi linked list ketika sudah mempunyai data elemen dan elemen yang baru telah dibuat, dapat dilihat di gambar di bawah ini.

Proses penambahan data di awal linked list adalah :

• Hubungkan baru->kanan agar menunjuk ke awal

Page 3: Double Linked List 1

Praktikum Pemrograman Bahasa C

3

• Hubungkan awal->kiri agar menunjuk ke posisi pointer baru

• Pindahkan pointer awal ke pointer baru

2) Menyisipkan simpul sebagai simpul akhir dari double linked list. Operasi ini berguna untuk menambahkan elemen baru di posisi akhir. Langkah pertama untuk

penambahan data adalah pembuatan elemen baru dan pengisian nilai infonya. Pointer yang menunjuk ke data tersebut dipanggil dengan nama baru. Kondisi di setelah ada pembuatan elemen baru tersebut adalah : Ada 2 kondisi yang harus diperhatikan dalam penambahan data di akhir yaitu : a. Ketika linked list masih kosong

Kalau kondisi linked list masih kosong, maka elemen baru akan menjadi awal dan akhir linked list. Perhatikan gambar di bawah ini :

• Kondisi sebelum penambahan

• Kondisi setelah operasi penambahan

Operasi penambahan awal ketika linked list masih kosong adalah dengan mengisikan alamat pointer baru ke pointer awal dan pointer akhir. Lihat gambar di bawah ini. b. Ketika linked list sudah mempunyai data

Kondisi linked list ketika sudah mempunyai data elemen dan elemen yang baru telah dibuat, dapat dilihat di gambar di bawah ini.

Page 4: Double Linked List 1

Praktikum Pemrograman Bahasa C

4

Proses penambahan data di akhir linked list adalah :

• Hubungkan akhir->kanan agar menunjuk ke pointer baru

• Hubungkan baru->kiri agar menunjuk ke posisi pointer akhir

• Pindahkan pointer akhir ke pointer baru

3) Menyisipkan simpul setelah simpul tertentu dari double linked list.

• Siapkan simpul yang hendak disisipkan

• stl=head;

while(stl->nama!=nama3) stl=stl->next;

Page 5: Double Linked List 1

Praktikum Pemrograman Bahasa C

5

• sisip->before=stl;

sisip->next=stl->next; stl->next->before=sisip; stl->next=sisip;

4) Menyisipkan simpul sebelum simpul tertentu dari double linked list.

• sbl=head;

while(sbl->nama!=nama3) sbl=sbl->next;

Page 6: Double Linked List 1

Praktikum Pemrograman Bahasa C

6

• sisip->next=sbl; sisip->before=sbl->before; sbl->before->next=sisip; sbl->before=sisip;

Page 7: Double Linked List 1

Praktikum Pemrograman Bahasa C

7

DOUBLE LINKED LIST

4.3. Soal-soal Tugas Pemrograman

1. Untuk latihan program no 1 dan 2 buatlah bagan dari proses dari double linked list, untuk setiap memasukkan data baru, membaca data dan pertukaran data. Jangan lupa juga memasukkan juga perubahan nilai pointernya.

2. Buatlah program dengan menggunakan double linked list untuk mengurutkan nilai secara descending, dapat menggunakan latihan program no 2

Penyelesaian 1)

• Program no 1

nrp

nama

nilai

prev

next

nrp

nama

nilai

prev

next

awal = tampung

nrp

nama

nilai

prev

next

ujung

nrp

nama

nilai

prev

next

ujung

nrp

nama

nilai

prev

next

tampung

nrp

nama

nilai

prev

next

tampung

nrp

nama

nilai

prev

next

nrp

nama

nilai

prev

next

nrp

nama

nilai

prev

next

ujung->prev=tampungujung->next=NULLtampung->next=ujung

nrp

nama

nilai

prev

next

ujung = tampung

nrp

nama

nilai

prev

next

nrp

nama

nilai

prev

next

nrp

nama

nilai

prev

next

nrp

nama

nilai

prev

next

nrp

nama

nilai

prev

next

nrp

nama

nilai

prev

next

nrp

nama

nilai

prev

next

nrp

nama

nilai

prev

next

nrp

nama

nilai

prev

next

tampung = ujung

awal

awal

awal

awal

Page 8: Double Linked List 1

Praktikum Pemrograman Bahasa C

8

nrp

nama

nilai

prev

next

nrp

nama

nilai

prev

next

nrp

nama

nilai

prev

next

nrp

nama

nilai

prev

next

nrp

nama

nilai

prev

next

tampung

nrp

nama

nilai

prev

next

nrp

nama

nilai

prev

next

nrp

nama

nilai

prev

next

nrp

nama

nilai

prev

next

nrp

nama

nilai

prev

next

tampung

awal

awal

nrp

nama

nilai

prev

next

nrp

nama

nilai

prev

next

nrp

nama

nilai

prev

next

nrp

nama

nilai

prev

next

nrp

nama

nilai

prev

next

tampung=awal

tampung=tampung->prev

nrp

nama

nilai

prev

next

nrp

nama

nilai

prev

next

nrp

nama

nilai

prev

next

nrp

nama

nilai

prev

next

nrp

nama

nilai

prev

next

tampung

tampung=tampung->next

• Program no 2

nrp

nama

nilai

prev

next

nrp

nama

nilai

prev

next

ujung

nrp

nama

nilai

prev

next

tampung awal

nrp

nama

nilai

prev

next

nrp

nama

nilai

prev

next

nrp

nama

nilai

prev

next

nrp

nama

nilai

prev

next

nrp

nama

nilai

prev

next

a b

awal ujung

Page 9: Double Linked List 1

Praktikum Pemrograman Bahasa C

9

nrp

nama

nilai

prev

next

awal = tampung

nrp

nama

nilai

prev

next

ujung

nrp

nama

nilai

prev

next

tampung

nrp

nama

nilai

prev

next

nrp

nama

nilai

prev

next

nrp

nama

nilai

prev

next

ujung->prev=tampungujung->next=NULLtampung->next=ujung

nrp

nama

nilai

prev

next

ujung = tampung

nrp

nama

nilai

prev

next

nrp

nama

nilai

prev

next

nrp

nama

nilai

prev

next

nrp

nama

nilai

prev

next

awal

if(strcmp(a->nrp,b->nrp)>0)

nrp

nama

nilai

prev

next

nrp

nama

nilai

prev

next

nrp

nama

nilai

prev

next

nrp

nama

nilai

prev

next

nrp

nama

nilai

prev

next

b=a

nrp

nama

nilai

prev

next

nrp

nama

nilai

prev

next

nrp

nama

nilai

prev

next

nrp

nama

nilai

prev

next

nrp

nama

nilai

prev

next

a b

b=ab=b->next

nrp

nama

nilai

prev

next

nrp

nama

nilai

prev

next

nrp

nama

nilai

prev

next

nrp

nama

nilai

prev

next

nrp

nama

nilai

prev

next

a b

tempnrp

nrp

nama

nilai

prev

next

nrp

nama

nilai

prev

next

nrp

nama

nilai

prev

next

nrp

nama

nilai

prev

next

nrp

nama

nilai

prev

next

a b

tempnrp

Page 10: Double Linked List 1

Praktikum Pemrograman Bahasa C

10

nrp

nama

nilai

prev

next

nrp

nama

nilai

prev

next

nrp

nama

nilai

prev

next

nrp

nama

nilai

prev

next

nrp

nama

nilai

prev

next

a b

tempnrp

nrp

nama

nilai

prev

next

nrp

nama

nilai

prev

next

nrp

nama

nilai

prev

next

nrp

nama

nilai

prev

next

nrp

nama

nilai

prev

next

a b

tempnama

nrp

nama

nilai

prev

next

nrp

nama

nilai

prev

next

nrp

nama

nilai

prev

next

nrp

nama

nilai

prev

next

nrp

nama

nilai

prev

next

a b

tempnilai

nrp

nama

nilai

prev

next

nrp

nama

nilai

prev

next

nrp

nama

nilai

prev

next

nrp

nama

nilai

prev

next

nrp

nama

nilai

prev

next

tampung awal

tampung=awal

nrp

nama

nilai

prev

next

nrp

nama

nilai

prev

next

nrp

nama

nilai

prev

next

nrp

nama

nilai

prev

next

nrp

nama

nilai

prev

next

tampung

while(tampung!=NULL)tampung=tampung->next

2) Source :

#include<stdio.h> #include<stdlib.h> #include<string.h> #include<conio.h> struct dtnilai { char nrp[10]; char nama[20]; double nilai; struct dtnilai *prev; struct dtnilai *next; };

Page 11: Double Linked List 1

Praktikum Pemrograman Bahasa C

11

main() { char jawab[100]; char strnilai[10]; struct dtnilai *tampung; struct dtnilai *ujung; struct dtnilai *awal; struct dtnilai *a; struct dtnilai *b; int j=0; double tempnilai; while(1) { if(j==0) { awal=(struct dtnilai*)malloc(sizeof(struct dtnilai)); printf("\n\n PROGRAM DESCENDING NILAI\n"); printf(" ===DOUBLE LINKED LIST===\n"); printf("\n\n Nilai = ");gets(strnilai);awal->nilai=atof(strnilai); awal->prev=NULL; awal->next=NULL; tampung=awal; } else { ujung=(struct dtnilai*)malloc(sizeof(struct dtnilai)); printf("\n\n Nilai = ");gets(strnilai);ujung->nilai=atof(strnilai); tampung->next=ujung; ujung->prev=tampung; ujung->next=NULL; tampung=ujung; } printf(" Ada data lagi (y/t) = ");gets(jawab); if((strcmp(jawab,"Y")==0||strcmp(jawab,"y")==0)) { j++;continue; } else if((strcmp(jawab,"T")==0||strcmp(jawab,"t")==0)) break; } //===============================================

Page 12: Double Linked List 1

Praktikum Pemrograman Bahasa C

12

a=awal; do { b=a; b=b->next; while(b!=NULL) { if (a->nilai<b->nilai) { tempnilai=a->nilai; a->nilai=b->nilai; b->nilai=tempnilai; } else b=b->prev; } a=a->next; } while(a!=NULL); tampung=awal; while(tampung!=NULL) { printf(" %6.2f\n",tampung->nilai); tampung=tampung->next; } }

Preview :