February 27, 2005

CBDS2103 - struktur data - contoh jawapan kepada latihan dalam buku modul (UNIT 2)

CBDS2103 - struktur data - contoh jawapan kepada latihan dalam buku modul - unit 2 (bab 5-7)

perhatian:
1 jangan terus salin jawapan; cuba buat sendiri dahulu soalan latihan tersebut sebelum melihat kepada jawapan.
2 tidak semua latihan saya sempat cari jawapannya
3 jawapan ini hanyalah untuk pelajar di bawah tutoran saya sahaja
4 walaupun usaha sebaik mungkin telah diambil untuk memastikan jawapan adalah tepat, tidak ada jaminan semua
jawapan adalah semestinya tepat


latihan 5.1
D dianjak ke lokasi A[2]
E dianjak ke lokasi A[3]
F dianjak ke lokasi A[4]
G dianjak ke lokasi A[5]
H dianjak ke lokasi A[6]
A[7] menjadi NULL

latihan 5.2
[maaf terdapat kesilapan kepada apa yang saya terangkan dalam tutorial 3 yg lalu]
penuding akan menunjuk kepada unsur kedua dalam senarai terpaut pList iaitu B.

latihan 5.3
1
kandungan senarai terpaut pList akan dicetak

2
[setelah membuat pembetulan pada soalan iaitu senarai terpaut pertama (yang mengandungi A,B,C,D) adalah pList1 [dan bukannya

pList2]]
(a) pList1 disambungkan dengan pList2, iaitu penuding untuk D menunjuk kepada E.
(b) unsur D disambungkan kepada unsur A, menjadi satu bulatan.

latihan 6.1
10

latihan 6.2
CiptaTimb(&timb);
MasukTimb(nom,&timb);
KeluarTimb(&nom,&timb);

latihan 6.3
1
ralat di baris yg mengandungi KeluarTimbunan(&c,timb1) kerana "timb1" sepatutnya "&timb1"
apabila ralat ini diperbetulkan seperti di atas, output adalah:

Kandungan timb1: 20 15
Kandungan timb2: 27745 28018 28526 25153 2573 29295 29298 25888 25956 26998 26948 2573 29806 25965 28263 26995 29537 8306

25972 28265 28528 8300 27765 19968 11884 29806 18720 25710 24940 29295 16928 14392 14641 8233 25384 8308 26727 26994 31088

28483 8237 8259 11631 25202 30036 0 0 251 0 17752 17710 12589 12344 23601 32336 19791 17247 17244 14915 0 -24 2026 -28 1 285

-26 -26 20 0 1608 -38 0
Nilai a: 15
Nilai b: 20
Nilai c: 20

2
[belum sempat dibuat]

latihan 7.1
prasyarat bagi operasi mengeluarkan item dari giliran adalah: giliran mesilah tidak kosong, kerana jika giliran kosong (tidak

ada satu pun unsur wujud di dalamnya), bagaimana pula hendak mengeluarkan apa-apa unsur dari dalamnya?

latihan 7.2
BENAR, iaitu giliran telah penuh

latihan 7.3
[belum sempat dibuat]

Soalan tutorial 1 dan 2
[belum sempat dibuat]

contoh aturcara
[dibuat kerana kadangkala ada kesilapan pada aturcara yang tertera pada nota modul, dan aturcara pada nota modul itu tidak

lengkap - saya taipkan ini semula untuk membantu pelajar. Sila kompil dan larikan.]

contoh aturcara 5.1 (ms 71)
#include

struct listNode {
char data;
struct listNode *nextPtr;
};

typedef struct listNode LIST;
typedef LIST *listPtr;
typedef enum bool {PALSU,BENAR} BOOL;

void ciptaSenarai(LIST **);
LIST *nodBaru(char);

void selitSenarai(LIST **, LIST *, LIST *);

/* void selitSenarai(LIST **, LIST *);*/

void jejakSenarai(LIST *);

void main() {
char item;
LIST *senarai, *tempNod;

ciptaSenarai(&senarai);
printf("Masukkan perkataan diakhiri simbol '$':");
while ((item=getchar()) != '$') {
tempNod = nodBaru(item);
selitSenarai(&senarai,tempNod,NULL);

/* selitSenarai(&senarai,tempNod);*/

}
jejakSenarai(senarai);
printf("\n");
}

void ciptaSenarai(LIST **sList) {
*sList=NULL;
}

void selitSenarai(LIST **sList, LIST *tempNod, LIST *nextPtr) {
nextPtr=tempNod;
tempNod->nextPtr=*sList;
*sList=tempNod;
}

/*
void selitSenarai(LIST **sList, LIST *data) {
LIST *pnod;
pnod->data=data;
pnod->nextPtr=*sList;
*sList=pnod;
}*/

void jejakSenarai(LIST *sList) {
LIST *pnod;
printf("kandungan senarai terpaut: ");
for (pnod=sList;pnod!=NULL;pnod=pnod->nextPtr) {
printf("%c -> ",pnod->data);
}
printf("NULL");
}

LIST *nodBaru(char item) {
LIST *Nnod;
Nnod=(LIST *) malloc (sizeof(LIST));
if (Nnod!=NULL) {
Nnod->data=item;
Nnod->nextPtr=NULL;
}
return Nnod;
}

-------------------------------------------------------------------------

contoh aturcara 6.1 (ms78)

#include
#define HADTIMB 10

typedef int UNSUR;
typedef enum bool{FALSE,TRUE} BOOL;
typedef struct nod {
int atas;
UNSUR data[HADTIMB];
}TIMB;

void ciptaTimb(TIMB *t);
BOOL TimbKosong(TIMB *t);
BOOL TimbPenuh(TIMB *t);
void MasukTimb(UNSUR item,TIMB *t);
void KeluarTimb(UNSUR *item,TIMB *t);

main() {
int pembilang,nombor,temp;
TIMB ganjil,genap;

ciptaTimb(&ganjil);
ciptaTimb(&genap);

for (pembilang=1;pembilang<=10;pembilang++) {
printf("\ninput nombor: ");
scanf("\n%d",&nombor);
if (nombor%2==0)
MasukTimb(nombor,&genap);
else
MasukTimb(nombor,&ganjil);
}

printf("\nCetak no ganjil: ");
while (!TimbKosong(&ganjil)) {
KeluarTimb(&temp,&ganjil);
printf("%d ",temp);
}

printf("\nCetak no genap: ");
while (!TimbKosong(&genap)) {
KeluarTimb(&temp,&genap);
printf("%d ",temp);
}
}

void ciptaTimb(TIMB *t) {
t->atas=0;
}

BOOL TimbKosong(TIMB *t) {
return(t->atas==0);
}

BOOL TimbPenuh(TIMB *t) {
return(t->atas>=HADTIMB);
}

void MasukTimb(UNSUR item,TIMB *t){
if (TimbPenuh(t))
printf("\ntimbunan penuh\n");
else {
t->atas++;
t->data[t->atas]=item;
}
}

void KeluarTimb(UNSUR *item,TIMB *t) {
if (TimbKosong(t))
printf("\ntimbunan kosong\n");
else {
*item=t->data[t->atas];
t->atas--;
}
}

--------------------------------------------------------------------------

contoh aturcara 7.2.7 (ms 89)

#include
#define HadGiliran 10

typedef enum bool{FALSE,TRUE} BOOL;
typedef int JENISUNSUR;
typedef struct giliran {
int hadapan;
int belakang;
JENISUNSUR unsur[HadGiliran];
} GILIRAN;

void CiptaGiliran(GILIRAN *g);
BOOL GiliranKosong(GILIRAN *g);
BOOL GiliranPenuh(GILIRAN *g);
void MasukGiliran(int item, GILIRAN *g);
void KeluarGiliran(int *item,GILIRAN *g);
void paparGiliran(GILIRAN *g);

void main() {
GILIRAN GiliranQ;
int i, unsurdata;

CiptaGiliran(&GiliranQ);

printf("\nMasukkan satu set nombor integer: ");
for (i=1;i<=HadGiliran;i++) {
scanf("%d",&unsurdata);
MasukGiliran(unsurdata,&GiliranQ);
}

paparGiliran(&GiliranQ);

printf("\nKeluarkan nombor negatif...");
for(i=1;i<=HadGiliran;i++) {
KeluarGiliran(&unsurdata,&GiliranQ);
if (unsurdata>=0)
MasukGiliran(unsurdata,&GiliranQ);
}
paparGiliran(&GiliranQ);
}

void CiptaGiliran(GILIRAN *g) {
g->hadapan=0;
g->belakang=0;
}

BOOL GiliranKosong(GILIRAN *g) {
return ((BOOL)(g->hadapan==g->belakang));
}

BOOL GiliranPenuh(GILIRAN *g) {
return ((BOOL)(((g->belakang+1)%HadGiliran)==g->hadapan));
}

void MasukGiliran(int item, GILIRAN *g) {
if (GiliranPenuh(g))
printf("RALAT: GILIRAN PENUH\n");
else {
g->unsur[g->belakang]=item;
g->belakang=(g->belakang+1)%HadGiliran;
}
}

void KeluarGiliran(int *item,GILIRAN *g) {
if (GiliranKosong(g))
printf("RALAT: GILIRAN KOSONG\n");
else {
*item=g->unsur[g->hadapan];
g->hadapan=(g->hadapan+1)%HadGiliran;
}
}

void paparGiliran(GILIRAN *g) {
int i;
printf("\nKandungan giliran adalah: ");
for(i=0;i printf("%d ",g->unsur[i]);
}
}

-----------------------------------------------------------------------