single linked list 1

10
Praktikum Pemrograman Bahasa C 1 PENDAHULUAN LINKED LIST 1. Buatlah flowchart untuk menyisipkan simpul sebagai simpul awal. 2. Buatlah flowchart untuk menyisipkan simpul sebagai simpul akhir. 3. Buatlah flowchart untuk menyisipkan simpul setelah simpul tertentu 4. Buatlah flowchart untuk menyisipkan simpul sebelum simpul tertentu 1 ) 2 )

Upload: ahmad-reza-musthafa

Post on 30-Jul-2015

485 views

Category:

Documents


17 download

TRANSCRIPT

Page 1: Single Linked List 1

Praktikum Pemrograman Bahasa C

1

PENDAHULUAN LINKED LIST

1. Buatlah flowchart untuk menyisipkan simpul sebagai simpul awal. 2. Buatlah flowchart untuk menyisipkan simpul sebagai simpul akhir. 3. Buatlah flowchart untuk menyisipkan simpul setelah simpul tertentu 4. Buatlah flowchart untuk menyisipkan simpul sebelum simpul tertentu 1 ) 2 )

Page 2: Single Linked List 1

Praktikum Pemrograman Bahasa C

2

3 ) 4 )

Page 3: Single Linked List 1

Praktikum Pemrograman Bahasa C

3

SINGLE LINKED LIST

2.1 Tujuan Setelah melakukan pratikum ini siswa diharapkan mengerti

1. Cara lain untuk mempresentasikan sekumpulan data menggunakan single linked list 2. Anggota / elemen struktur dari sebuah single linked list 3. Cara penggunaan single linked list dibandingkan dengan representasi sequential menggunakan array 4. Penelusuran simpul / pembacaan single linked list : LIFO ( Last In First Out ) dan FIFO ( First In First Out ) 5. Operasi dasar pada single linked list : memasukkan data, menghapus data, menyisipkan data pada

suatu simpul. 2.4 Soal-soal Tugas Pemrograman

1. Untuk sebuah contoh program 1, 2, 3, dan 4 buatlah gambar urutan proses dari sebuah single linked list, dengan ketentuan :

• Anggota struktur digambarkan pada 1 persegi panjang • Variable pointer digambarkan dengan tanda panah • Untuk setiap proses yang berbeda gambarkan dengan gambar yang lain, misalnya :

memasukkan data pada simpul yang I, memasukkan data pada simpul yang II dan seterusnya. 2. Buatlah program menggunakan single linked list dengan pembacaan LIFO untuk mendapatkan bilangan

hasil konversi dari • Decimal ke Biner • Decimal ke Oktal • Decimal ke Hexa

Anggota struktur tiap node adalah bilangan sisa hasil bagi, dan next node 3. Sebuah polynomial derajat n disimpan dengan menggunakan single linked list dengan ketentuan : tiap

node beranggotakan koefisien, pangkat, dan next, node dengan pangkat tertinggi paling dekat dengan head/awal dari list. Perhatikan contoh : P = 10x3

+ 25x – 3

P Buatlah program untuk mengevaluasi nilai dari P(x), dimana nilai x dimasukkan

2.5 Penyelesaian soal 1 )

1. Struct dtnilai *tamping;struct dtnilai *ujung

Program 1

2. Jika kondisi pointer untuk data II dan seterusnya tidak sama dengan nol, maka

ujung->next=tampung;

3. Jika kondisi sama dengan nol

ujung->next=NULL;

4. tampung=ujung;

25 1 -3 0 10 3

Page 4: Single Linked List 1

Praktikum Pemrograman Bahasa C

4

5. Selama ujung tidak sama dengan NULL, maka looping terus sampai NULL.

ujung=ujung->next;

1. Struct dtnilai *awal;struct dtnilai *ujung;

Program 2

2. Deklarasi variable yang digunakan, jika j sama dengan nol maka

tampung=awal; tampung->next=NULL;

3. Jika j tidak sama dengan nol, maka

tampung->next=ujung; ujung->next=NULL; tampung=ujung;

4. Selama ujung tidak sama dengan NULL, maka

ujung=ujung->next

Page 5: Single Linked List 1

Praktikum Pemrograman Bahasa C

5

1. Struct dtnilai *awal;

Program 3

2. tanda=awal->next;

free(awal); awal=tanda;

3. tanda2=awal;

tanda=tanda2->next;

4. Selama tanda tidak sama dengan NULL, maka bila tanda->next!=NULL

tanda2->next=tanda->next; free(tanda);

5. Jika tidak, maka

tanda2->next=NULL; free(tanda);

Selama ujung tidak sama dengan NULL ujung=ujung->next;

Program 4

Page 6: Single Linked List 1

Praktikum Pemrograman Bahasa C

6

2 ) Source code : #include<stdio.h> #include<string.h> #include<stdlib.h> #define x 100 struct list { int desimal,desimal2,desimal3,desimal4,biner,oktal; char hexa[x]; struct list *next; }*first,*sementara; void main() { int a=1,b,sisa; char input[x],kata[x],output[x]; printf("\n"); printf(" PROGRAM PENGKONVERSI BILANGAN DESIMAL\n");

Page 7: Single Linked List 1

Praktikum Pemrograman Bahasa C

7

printf(" =====================================\n\n"); printf(" Program akan secara otomatis mengkonversi ke dalam :\n"); printf(" 1. Bilangan Biner\n"); printf(" 2. Bilangan Oktal\n"); printf(" 3. Bilangan Hexa\n"); printf("\n Masukkan bilangan desimal\n"); while(1) { first=(struct list*)malloc(sizeof(struct list)); if(a==1) first->next=NULL; else first->next=sementara; sementara=first; printf(" Bilangan Desimal ke-%d = ",a); gets(input); first->desimal=first->desimal2=first->desimal3=first->desimal4=atoi(input); a++; printf(" Tambah lagi? <y/t> "); gets(input); if(strcmp(input,"y")==0) continue; else if(strcmp(input,"t")==0) break; } system("cls"); a=1; printf("\n Bilangan Desimal\n"); while(1) { printf(" Desimal[%d] = %d\n",a,sementara->desimal); if(sementara->next==NULL) break; sementara=sementara->next; a++; } a=1; sementara=first; printf("\n Bilangan Biner\n"); while(1) { sementara->biner=0; b=1; sisa=sementara->desimal2; while(sementara->desimal2!=0) { sisa=sementara->desimal2%2; if(sementara->desimal2==1) sisa=1; sementara->biner+=(sisa*b); b*=10; sementara->desimal2/=2; } printf(" Bilangan Biner ke-%d = %d\n",a,sementara->biner); if(sementara->next==NULL) break; sementara=sementara->next; a++; } a=1; sementara=first; printf("\n Bilangan Oktal\n");

Page 8: Single Linked List 1

Praktikum Pemrograman Bahasa C

8

while(1) { sementara->oktal=0; b=1; sisa=sementara->desimal3; while(sementara->desimal3!=0) { sisa=sementara->desimal3%8; if(sementara->desimal3==1) sisa=1; sementara->oktal+=(sisa*b); b*=10; sementara->desimal3/=8; } printf(" Bilangan Oktal ke-%d = %d\n",a,sementara->oktal); if(sementara->next==NULL) break; sementara=sementara->next; a++; } a=1; sementara=first; printf("\n Bilangan Hexa\n"); while(1) { sementara->hexa[0]=NULL; sementara->biner=0; b=1; sisa=sementara->desimal4; while((sementara->desimal4!=0)||(sementara->desimal4==0)) { sisa=sementara->desimal4%16; if(sisa==0) strncpy(output,"0",b); else if(sisa==10) strncpy(output,"A",b); else if(sisa==11) strncpy(output,"B",b); else if(sisa==12) strncpy(output,"C",b); else if(sisa==13) strncpy(output,"D",b); else if(sisa==14) strncpy(output,"E",b); else if(sisa==15) strncpy(output,"F",b); else { itoa(sisa,kata,10); strncpy(output,kata,b); } output[b]=NULL; strcat(sementara->hexa,output); sementara->desimal4/=16; b++; if(sementara->desimal4==0) break; } strrev(sementara->hexa); printf(" Bilangan Hexa ke-%d = %s\n",a,sementara->hexa); if(sementara->next==NULL) break; sementara=sementara->next;

Page 9: Single Linked List 1

Praktikum Pemrograman Bahasa C

9

a++; } }

Preview :

3 ) Source code :

#include<math.h> #include<stdio.h> #include<string.h> #include<stdlib.h> struct list { int koefisien,pangkat; struct list *next; }*first,*temp,*view; void main() { int a=0,jumlah=0,pangkat2; char input[5]; printf("\n Masukkan sebuah f(x)\n"); while(1) { first=(struct list*)malloc(sizeof(struct list)); if(a==0) first->next=NULL; else first->next=temp; temp=first; printf(" Pangkat %d = ",a); gets(input); first->koefisien=atoi(input); first->pangkat=a; a++; printf(" Lagi? <y/t> "); gets(input); if(strcmp(input,"y")==0) continue; else if(strcmp(input,"t")==0) break; } system("cls"); view=first;

Page 10: Single Linked List 1

Praktikum Pemrograman Bahasa C

10

printf("\n f(x) = "); while(1) { printf("%dx%d ",view->koefisien,view->pangkat); if(view->next==NULL) break; if(temp->koefisien<0) printf("- "); else printf("+ "); view=view->next; } printf("\n Masukkan nilai x = "); gets(input); while(1) { pangkat2=1; for(a=1;a<=first->pangkat;a++) pangkat2*=atoi(input); printf("%d",pangkat2); jumlah+=(first->koefisien*pangkat2); printf("[%d]\n",jumlah); if(first->next==NULL) break; first=first->next; } printf(" %d\n",jumlah); }

Preview :