buzz me..

tinggalin komentar kamu

Yani Nag Goenoenk

Create your badge
Free chat widget @ ShoutMix

Sponsor

Adsense Indonesia

struktur data modul 7

tugas 1

#include
/* Program asli oleh Simon Tatham 2001.
* Simplikasi oleh Husni Thamrin 2011
*/

struct _simpul{
int data;
struct _simpul *next;
};
typedef struct _simpul simpul;
/*fungsi untuk membandingkan isi simpul*/
int cmp(simpul *a, simpul *b) {
return a->data - b->data;
}

/*Fungsi mergeSort
*Cara memanggil:
*list = mergeSort(mylist);
*/
simpul *mergeSort(simpul *list) {
simpul *p, *q, *e, *tail;
int insize, nmerges, psize, qsize, i;

/*Jila input hanya berisi NULL, nilai kembalian adalah NULL*/
if (!list) return NULL;

insize = 1;

while (1) {
p = list;
list = NULL;
tail = NULL;
nmerges = 0; /*hitungan jumlah merge yang dilakukan
di tiap iterasi */
while (p) {
nmerges++; /*masih ada proses merge */
/*bergerak sebanyak'insize' kali dari p */
q = p;
psize = 0;
for (i = 0;i< insize; i++) { psize++; q = q->next;
if(!q) break;
}

/*jika q sudah mencapai ujung list, terdapat dua list
* yang perlu di-merge */
qsize = insize;

/* sampai sini terdapat dua list;siap melakukan merge*/
while (psize > 0|| (qsize > 0 && q)) {

/*cek apakah elemen berikutnya harus dari p atau q*/
if (psize == 0){
/*jika p kosong ; e diambil dari q. */
e = q; q=q->next; qsize--;
} else if (qsize == 0|| !q) {
/* jika q kosong; e diambil dari p. */
e = p; p = p->next;psize--;
} else if (cmp(p,q) <= 0) { /*Elemen pertama p lebih kecil (atau sama); *e diambil dari p.*/ e = p; p = p->next; psize--;
} else {
/* Elemen pertama q lebih kecil; e diambil dari q. */
e = q; q = q->next; qsize--;
}

/* tambahan elemen berikutnya ke list hasil merge */
if (tail) {
tail->next = e;
} else {
list = e;
}
tail = e;
}

/* p telah melangkah sebanyak 'insize' ksli, q juga */
p = q;
}
tail->next = NULL;

/* Jika telah dilakukan satu merge, pekerjaan selesai.*/
if (nmerges <= 1)/* cek kemungkinan list kosong:nmerges==0*/ return list; /*Jika tidak, ulangi! merge list dua kali ukurannya*/ insize *=2; } } int main(void) { /*Konstruksi linked-list, array simpul yang disambung-sambung *catatan: cara konstruksi ini bukan prosedur standart, *sekedar utk contoh pada proses sortting*/ #define n 13 simpul k[n],*head,*p; int Data[n] = { 6 , 2 , 8 , 4 , 11 , 1 , 12 , 7 , 3 , 9 , 5 , 0 , 10 }; int j; for (j = 0;jdata);
p = p-> next;
} while (p != NULL);
printf("\n\n");

head = mergeSort(head);/*memanggil fungsi sorting*/

/*Menampilkan isi linked list*/
printf("Setelah pengurutan:");
p = head;
do {
printf("%d\n", p->data);
p = p->next;
} while (p != NULL);
printf("\n\n");
return 0;
}



tugas 2

#include
/* Program asli oleh Simon Tatham 2001.
* Simplikasi oleh Husni Thamrin 2011
*/

struct _simpul{
float data;
struct _simpul *next;
};
typedef struct _simpul simpul;
/*fungsi untuk membandingkan isi simpul*/
int cmp(simpul *a, simpul *b) {
return (a->data) > (b->data);
}

/*Fungsi mergeSort
*Cara memanggil:
*list = mergeSort(mylist);
*/
simpul *mergeSort(simpul *list) {
simpul *p, *q, *e, *tail;
int insize, nmerges, psize, qsize, i;

/*Jila input hanya berisi NULL, nilai kembalian adalah NULL*/
if (!list) return NULL;

insize = 1;

while (1) {
p = list;
list = NULL;
tail = NULL;
nmerges = 0; /*hitungan jumlah merge yang dilakukan
di tiap iterasi */
while (p) {
nmerges++; /*masih ada proses merge */
/*bergerak sebanyak'insize' kali dari p */
q = p;
psize = 0;
for (i = 0;i< insize; i++) { psize++; q = q->next;
if(!q) break;
}

/*jika q sudah mencapai ujung list, terdapat dua list
* yang perlu di-merge */
qsize = insize;

/* sampai sini terdapat dua list;siap melakukan merge*/
while (psize > 0|| (qsize > 0 && q)) {

/*cek apakah elemen berikutnya harus dari p atau q*/
if (psize == 0){
/*jika p kosong ; e diambil dari q. */
e = q; q=q->next; qsize--;
} else if (qsize == 0|| !q) {
/* jika q kosong; e diambil dari p. */
e = p; p = p->next;psize--;
} else if (cmp(p,q) <= 0) { /*Elemen pertama p lebih kecil (atau sama); *e diambil dari p.*/ e = p; p = p->next; psize--;
} else {
/* Elemen pertama q lebih kecil; e diambil dari q. */
e = q; q = q->next; qsize--;
}

/* tambahan elemen berikutnya ke list hasil merge */
if (tail) {
tail->next = e;
} else {
list = e;
}
tail = e;
}

/* p telah melangkah sebanyak 'insize' ksli, q juga */
p = q;
}
tail->next = NULL;

/* Jika telah dilakukan satu merge, pekerjaan selesai.*/
if (nmerges <= 1)/* cek kemungkinan list kosong:nmerges==0*/ return list; /*Jika tidak, ulangi! merge list dua kali ukurannya*/ insize *=2; } } int main(void) { /*Konstruksi linked-list, array simpul yang disambung-sambung *catatan: cara konstruksi ini bukan prosedur standart, *sekedar utk contoh pada proses sortting*/ #define n 10 simpul k[n],*head,*p; float Data[n] = { 3.5 , 4.7 , 4.9 , 6.2 , 9.3 , 5.8 , 2.8 , 8.3 , 5.2 , 3.9 }; int j; for (j = 0;jdata);
p = p-> next;
} while (p != NULL);
printf("\n\n");

head = mergeSort(head);/*memanggil fungsi sorting*/

/*Menampilkan isi linked list*/
printf("Setelah pengurutan:");
p = head;
do {
printf("%.2f\n", p->data);
p = p->next;
} while (p != NULL);
printf("\n\n");
return 0;
}



tugas 3

#include
/* Program asli oleh Simon Tatham 2001.
* Simplikasi oleh Husni Thamrin 2011
*/

struct _simpul{
float data;
struct _simpul *next;
};
typedef struct _simpul simpul;
/*fungsi untuk membandingkan isi simpul*/
int cmp(simpul *a, simpul *b) {
return (a->data) < (b->data);
}

/*Fungsi mergeSort
*Cara memanggil:
*list = mergeSort(mylist);
*/
simpul *mergeSort(simpul *list) {
simpul *p, *q, *e, *tail;
int insize, nmerges, psize, qsize, i;

/*Jila input hanya berisi NULL, nilai kembalian adalah NULL*/
if (!list) return NULL;

insize = 1;

while (1) {
p = list;
list = NULL;
tail = NULL;
nmerges = 0; /*hitungan jumlah merge yang dilakukan
di tiap iterasi */
while (p) {
nmerges++; /*masih ada proses merge */
/*bergerak sebanyak'insize' kali dari p */
q = p;
psize = 0;
for (i = 0;i< insize; i++) { psize++; q = q->next;
if(!q) break;
}

/*jika q sudah mencapai ujung list, terdapat dua list
* yang perlu di-merge */
qsize = insize;

/* sampai sini terdapat dua list;siap melakukan merge*/
while (psize > 0|| (qsize > 0 && q)) {

/*cek apakah elemen berikutnya harus dari p atau q*/
if (psize == 0){
/*jika p kosong ; e diambil dari q. */
e = q; q=q->next; qsize--;
} else if (qsize == 0|| !q) {
/* jika q kosong; e diambil dari p. */
e = p; p = p->next;psize--;
} else if (cmp(p,q) <= 0) { /*Elemen pertama p lebih kecil (atau sama); *e diambil dari p.*/ e = p; p = p->next; psize--;
} else {
/* Elemen pertama q lebih kecil; e diambil dari q. */
e = q; q = q->next; qsize--;
}

/* tambahan elemen berikutnya ke list hasil merge */
if (tail) {
tail->next = e;
} else {
list = e;
}
tail = e;
}

/* p telah melangkah sebanyak 'insize' ksli, q juga */
p = q;
}
tail->next = NULL;

/* Jika telah dilakukan satu merge, pekerjaan selesai.*/
if (nmerges <= 1)/* cek kemungkinan list kosong:nmerges==0*/ return list; /*Jika tidak, ulangi! merge list dua kali ukurannya*/ insize *=2; } } int main(void) { /*Konstruksi linked-list, array simpul yang disambung-sambung *catatan: cara konstruksi ini bukan prosedur standart, *sekedar utk contoh pada proses sortting*/ #define n 10 simpul k[n],*head,*p; float Data[n] = { 3.5 , 4.7 , 4.9 , 6.2 , 9.3 , 5.8 , 2.8 , 8.3 , 5.2 , 3.9 }; int j; for (j = 0;jdata);
p = p-> next;
} while (p != NULL);
printf("\n\n");

head = mergeSort(head);/*memanggil fungsi sorting*/

/*Menampilkan isi linked list*/
printf("Setelah pengurutan:");
p = head;
do {
printf("%.2f\n", p->data);
p = p->next;
} while (p != NULL);
printf("\n\n");
return 0;
}

0 komentar: