double linked list 1
Post on 24-Jul-2015
219 Views
Preview:
TRANSCRIPT
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
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
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.
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;
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;
Praktikum Pemrograman Bahasa C
6
• sisip->next=sbl; sisip->before=sbl->before; sbl->before->next=sisip; sbl->before=sisip;
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
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
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
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; };
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; } //===============================================
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 :
top related