Prethodna tema :: Sljedeća tema |
Autor/ica |
Poruka |
yellow submarine Forumaš(ica)
Pridružen/a: 01. 10. 2010. (19:28:03) Postovi: (34)16
Spol:
|
|
[Vrh] |
|
Buki Forumaš(ica)
Pridružen/a: 17. 10. 2010. (20:15:17) Postovi: (56)16
|
Postano: 20:48 ned, 15. 1. 2012 Naslov: |
|
|
imam u zadatku implementaciju rjecnika preko otvorene hash tablice i sad kad sam to napisala, build log mi ne javlja nikakve greske niti upozorenja, ali program prestane raditi cim ga pokrenem, prije ikakvog unosa pa molim ako netko vidi u cemu je problem da se javi :)
ovo je kod:
[code:1]void MAKE_NULL (DICTIONARY *A){
int i;
for (i=0; i<B; i++) (*A)[i] = NULL;
}
int MEMBER(char x[], DICTIONARY A){
celltype *current;
current = A[h(x)];
while (current != NULL){
if (strcmp(current->element, x)==0) return 1;
else current = current->next;
}
return 0;
}
void INSERT(char x[], DICTIONARY *A){
celltype *temp;
temp = (*A)[h(x)];
(*A)[h(x)] = (celltype*)malloc(sizeof(celltype));
strcpy((*A)[h(x)]->element, x);
(*A)[h(x)]->next = temp;
return;
}
void DELETE(char x[], DICTIONARY *A){
celltype *current, *temp;
if ( (*A)[h(x)] != NULL) {
if (strcmp((*A)[h(x)]->element,x)==0) {
temp = (*A)[h(x)];
(*A)[h(x)] = (*A)[h(x)]->next;
free(temp);
}else{
current = (*A)[h(x)];
while (current->next != NULL)
if (strcmp(current->next->element, x)==0) {
temp = current->next;
current->next = current->next->next;
free(temp);
return;
}else
current = current->next;
}
}
}[/code:1]
imam u zadatku implementaciju rjecnika preko otvorene hash tablice i sad kad sam to napisala, build log mi ne javlja nikakve greske niti upozorenja, ali program prestane raditi cim ga pokrenem, prije ikakvog unosa pa molim ako netko vidi u cemu je problem da se javi
ovo je kod:
Kod: | void MAKE_NULL (DICTIONARY *A){
int i;
for (i=0; i<B; i++) (*A)[i] = NULL;
}
int MEMBER(char x[], DICTIONARY A){
celltype *current;
current = A[h(x)];
while (current != NULL){
if (strcmp(current->element, x)==0) return 1;
else current = current->next;
}
return 0;
}
void INSERT(char x[], DICTIONARY *A){
celltype *temp;
temp = (*A)[h(x)];
(*A)[h(x)] = (celltype*)malloc(sizeof(celltype));
strcpy((*A)[h(x)]->element, x);
(*A)[h(x)]->next = temp;
return;
}
void DELETE(char x[], DICTIONARY *A){
celltype *current, *temp;
if ( (*A)[h(x)] != NULL) {
if (strcmp((*A)[h(x)]->element,x)==0) {
temp = (*A)[h(x)];
(*A)[h(x)] = (*A)[h(x)]->next;
free(temp);
}else{
current = (*A)[h(x)];
while (current->next != NULL)
if (strcmp(current->next->element, x)==0) {
temp = current->next;
current->next = current->next->next;
free(temp);
return;
}else
current = current->next;
}
}
} |
|
|
[Vrh] |
|
kkarlo Forumaš(ica)
Pridružen/a: 19. 05. 2010. (08:43:59) Postovi: (1B2)16
Spol:
|
Postano: 21:14 ned, 15. 1. 2012 Naslov: |
|
|
[quote="Buki"]imam u zadatku implementaciju rjecnika preko otvorene hash tablice i sad kad sam to napisala, build log mi ne javlja nikakve greske niti upozorenja, ali program prestane raditi cim ga pokrenem, prije ikakvog unosa pa molim ako netko vidi u cemu je problem da se javi :)
ovo je kod:
[code:1]void MAKE_NULL (DICTIONARY *A){
int i;
for (i=0; i<B; i++) (*A)[i] = NULL;
}
int MEMBER(char x[], DICTIONARY A){
celltype *current;
current = A[h(x)];
while (current != NULL){
if (strcmp(current->element, x)==0) return 1;
else current = current->next;
}
return 0;
}
void INSERT(char x[], DICTIONARY *A){
celltype *temp;
temp = (*A)[h(x)];
(*A)[h(x)] = (celltype*)malloc(sizeof(celltype));
strcpy((*A)[h(x)]->element, x);
(*A)[h(x)]->next = temp;
return;
}
void DELETE(char x[], DICTIONARY *A){
celltype *current, *temp;
if ( (*A)[h(x)] != NULL) {
if (strcmp((*A)[h(x)]->element,x)==0) {
temp = (*A)[h(x)];
(*A)[h(x)] = (*A)[h(x)]->next;
free(temp);
}else{
current = (*A)[h(x)];
while (current->next != NULL)
if (strcmp(current->next->element, x)==0) {
temp = current->next;
current->next = current->next->next;
free(temp);
return;
}else
current = current->next;
}
}
}[/code:1][/quote]
A gdje ti je main i to ucitavanje koje se ne dogodi?
:wink:
Nisam siguran isto da li bi u MAKE_NULL trebala radit i alokaciju, ili ces to u mainu...iako mislim da bi to trebala u MAKE_NULL. Mislim radis ti kasnije alokaciju kad ubacujes element, ali ako sam dobro shvatio to bi trebali bit double pointeri, te kad u MAKE_NULL staviš (*A)[i] = NULL; to nemože radit, jer nisi alocirala tu memoriju...
Buki (napisa): | imam u zadatku implementaciju rjecnika preko otvorene hash tablice i sad kad sam to napisala, build log mi ne javlja nikakve greske niti upozorenja, ali program prestane raditi cim ga pokrenem, prije ikakvog unosa pa molim ako netko vidi u cemu je problem da se javi
ovo je kod:
Kod: | void MAKE_NULL (DICTIONARY *A){
int i;
for (i=0; i<B; i++) (*A)[i] = NULL;
}
int MEMBER(char x[], DICTIONARY A){
celltype *current;
current = A[h(x)];
while (current != NULL){
if (strcmp(current->element, x)==0) return 1;
else current = current->next;
}
return 0;
}
void INSERT(char x[], DICTIONARY *A){
celltype *temp;
temp = (*A)[h(x)];
(*A)[h(x)] = (celltype*)malloc(sizeof(celltype));
strcpy((*A)[h(x)]->element, x);
(*A)[h(x)]->next = temp;
return;
}
void DELETE(char x[], DICTIONARY *A){
celltype *current, *temp;
if ( (*A)[h(x)] != NULL) {
if (strcmp((*A)[h(x)]->element,x)==0) {
temp = (*A)[h(x)];
(*A)[h(x)] = (*A)[h(x)]->next;
free(temp);
}else{
current = (*A)[h(x)];
while (current->next != NULL)
if (strcmp(current->next->element, x)==0) {
temp = current->next;
current->next = current->next->next;
free(temp);
return;
}else
current = current->next;
}
}
} |
|
A gdje ti je main i to ucitavanje koje se ne dogodi?
Nisam siguran isto da li bi u MAKE_NULL trebala radit i alokaciju, ili ces to u mainu...iako mislim da bi to trebala u MAKE_NULL. Mislim radis ti kasnije alokaciju kad ubacujes element, ali ako sam dobro shvatio to bi trebali bit double pointeri, te kad u MAKE_NULL staviš (*A)[i] = NULL; to nemože radit, jer nisi alocirala tu memoriju...
|
|
[Vrh] |
|
Buki Forumaš(ica)
Pridružen/a: 17. 10. 2010. (20:15:17) Postovi: (56)16
|
Postano: 22:18 ned, 15. 1. 2012 Naslov: |
|
|
aha, kuzim otprilike, sad sam izmjenila make_null da mi izgleda ovako
[code:1]void MAKE_NULL (DICTIONARY *A){
int i;
for (i=0; i<B; i++){ (*A)[i] = (celltype*)malloc(sizeof(celltype));
(*A)[i] = NULL;
}
return;
}[/code:1]
i sad mi se vise ne rusi kad ga pokrenem vec se jednostavno nista ne dogada, a mogu pisat normalno u onom crnom prozoru
ovo mi je prvi dio main-a, dalje je sve vezano za konkretan zadatak:
[code:1]int main (void){
DICTIONARY A;
char naredba[30], rijec[30];
MAKE_NULL(&A);
INSERT("auto", &A);
INSERT("break", &A);
INSERT("case", &A);
INSERT("char", &A);
INSERT("const", &A);[/code:1]
EDIT: puno ti hvala, sad mi radi normalno, ali samo ako mi je B<5, imas ideju kako da to ispravim?
aha, kuzim otprilike, sad sam izmjenila make_null da mi izgleda ovako
Kod: | void MAKE_NULL (DICTIONARY *A){
int i;
for (i=0; i<B; i++){ (*A)[i] = (celltype*)malloc(sizeof(celltype));
(*A)[i] = NULL;
}
return;
} |
i sad mi se vise ne rusi kad ga pokrenem vec se jednostavno nista ne dogada, a mogu pisat normalno u onom crnom prozoru
ovo mi je prvi dio main-a, dalje je sve vezano za konkretan zadatak:
Kod: | int main (void){
DICTIONARY A;
char naredba[30], rijec[30];
MAKE_NULL(&A);
INSERT("auto", &A);
INSERT("break", &A);
INSERT("case", &A);
INSERT("char", &A);
INSERT("const", &A); |
EDIT: puno ti hvala, sad mi radi normalno, ali samo ako mi je B<5, imas ideju kako da to ispravim?
|
|
[Vrh] |
|
kkarlo Forumaš(ica)
Pridružen/a: 19. 05. 2010. (08:43:59) Postovi: (1B2)16
Spol:
|
Postano: 22:46 ned, 15. 1. 2012 Naslov: |
|
|
[quote="Buki"]aha, kuzim otprilike, sad sam izmjenila make_null da mi izgleda ovako
[code:1]void MAKE_NULL (DICTIONARY *A){
int i;
for (i=0; i<B; i++){ (*A)[i] = (celltype*)malloc(sizeof(celltype));
(*A)[i] = NULL;
}
return;
}[/code:1]
i sad mi se vise ne rusi kad ga pokrenem vec se jednostavno nista ne dogada, a mogu pisat normalno u onom crnom prozoru
ovo mi je prvi dio main-a, dalje je sve vezano za konkretan zadatak:
[code:1]int main (void){
DICTIONARY A;
char naredba[30], rijec[30];
MAKE_NULL(&A);
INSERT("auto", &A);
INSERT("break", &A);
INSERT("case", &A);
INSERT("char", &A);
INSERT("const", &A);[/code:1]
EDIT: puno ti hvala, sad mi radi normalno, ali samo ako mi je B<5, imas ideju kako da to ispravim?[/quote]
Mislim da bi ti dobar MAKE_NULL izgledao otprilike ovako:
{
int i;
(*A)=(DICTIONARY*)malloc(B*sizeof(DICTIONARY));
for (i=0; i<B; i++){ (*A)[i] = (celltype*)malloc(sizeof(celltype));
(*A)[i] = NULL;
}
}
To je onak na prvu, ak nije to, budem sutra navecer pogledao malo detaljnije, nemogu sada...
Naravno ako ti netko drugi vec ne pomogne...
Mislim da bi trebala imat polje[B] a svaki član tog polja je pointer. Prema tome prvo moras alocirat polje od B elemenata, a potom za svaki clan dodatno...
Valjda...
Buki (napisa): | aha, kuzim otprilike, sad sam izmjenila make_null da mi izgleda ovako
Kod: | void MAKE_NULL (DICTIONARY *A){
int i;
for (i=0; i<B; i++){ (*A)[i] = (celltype*)malloc(sizeof(celltype));
(*A)[i] = NULL;
}
return;
} |
i sad mi se vise ne rusi kad ga pokrenem vec se jednostavno nista ne dogada, a mogu pisat normalno u onom crnom prozoru
ovo mi je prvi dio main-a, dalje je sve vezano za konkretan zadatak:
Kod: | int main (void){
DICTIONARY A;
char naredba[30], rijec[30];
MAKE_NULL(&A);
INSERT("auto", &A);
INSERT("break", &A);
INSERT("case", &A);
INSERT("char", &A);
INSERT("const", &A); |
EDIT: puno ti hvala, sad mi radi normalno, ali samo ako mi je B<5, imas ideju kako da to ispravim? |
Mislim da bi ti dobar MAKE_NULL izgledao otprilike ovako:
{
int i;
(*A)=(DICTIONARY*)malloc(B*sizeof(DICTIONARY));
for (i=0; i<B; i++){ (*A)[i] = (celltype*)malloc(sizeof(celltype));
(*A)[i] = NULL;
}
}
To je onak na prvu, ak nije to, budem sutra navecer pogledao malo detaljnije, nemogu sada...
Naravno ako ti netko drugi vec ne pomogne...
Mislim da bi trebala imat polje[B] a svaki član tog polja je pointer. Prema tome prvo moras alocirat polje od B elemenata, a potom za svaki clan dodatno...
Valjda...
|
|
[Vrh] |
|
Buki Forumaš(ica)
Pridružen/a: 17. 10. 2010. (20:15:17) Postovi: (56)16
|
|
[Vrh] |
|
butterfly Forumaš(ica)
Pridružen/a: 08. 07. 2010. (16:27:56) Postovi: (4)16
|
|
[Vrh] |
|
pecina Forumaš(ica)
Pridružen/a: 19. 01. 2005. (14:15:23) Postovi: (157)16
Spol:
Lokacija: Happily traveling through space since 1986!
|
|
[Vrh] |
|
butterfly Forumaš(ica)
Pridružen/a: 08. 07. 2010. (16:27:56) Postovi: (4)16
|
|
[Vrh] |
|
travana Forumaš(ica)
Pridružen/a: 22. 09. 2010. (17:12:41) Postovi: (16)16
Spol:
|
Postano: 1:17 čet, 19. 1. 2012 Naslov: |
|
|
imam problema s funkcijom delete_max za hrpu, nikako ne vidim u cemu je greska, pogotovo jer je prakticki prepisana iz skripte, a na njoj mi se program rusi :roll:
pa ako vidite gresku slobodno ukazite na nju :D
[code:1]
typedef struct {
int last;
elementtype labels[MAXLENGHT];
} HEAP;
elementtype DELETE_MAX (HEAP *H) {
int i, j;
elementtype max;
if (H->last < 0) {
error("Hrpa je prazna!");
}
else {
max = H->labels[0]; //u korijenu je najveci element
H->labels[0] = H->labels[H->last];
(H->last)--;
i = 0;
while (i <= (H->last+1)/2-1) {
if ((2*i + 1 == H->last) || (H->labels[2*i + 1] > H->labels[2*i + 2]))
j = 2*i + 1;
else
j = 2*i + 2;
if (H->labels[i] < H->labels[j]) {
swap(H->labels[i], H->labels[j]);
i = j;
}
else
return max;
}
return max;
}
}[/code:1]
imam problema s funkcijom delete_max za hrpu, nikako ne vidim u cemu je greska, pogotovo jer je prakticki prepisana iz skripte, a na njoj mi se program rusi
pa ako vidite gresku slobodno ukazite na nju
Kod: |
typedef struct {
int last;
elementtype labels[MAXLENGHT];
} HEAP;
elementtype DELETE_MAX (HEAP *H) {
int i, j;
elementtype max;
if (H->last < 0) {
error("Hrpa je prazna!");
}
else {
max = H->labels[0]; //u korijenu je najveci element
H->labels[0] = H->labels[H->last];
(H->last)--;
i = 0;
while (i <= (H->last+1)/2-1) {
if ((2*i + 1 == H->last) || (H->labels[2*i + 1] > H->labels[2*i + 2]))
j = 2*i + 1;
else
j = 2*i + 2;
if (H->labels[i] < H->labels[j]) {
swap(H->labels[i], H->labels[j]);
i = j;
}
else
return max;
}
return max;
}
} |
|
|
[Vrh] |
|
mini Forumaš(ica)
Pridružen/a: 04. 02. 2009. (14:31:34) Postovi: (69)16
Spol:
|
|
[Vrh] |
|
pecina Forumaš(ica)
Pridružen/a: 19. 01. 2005. (14:15:23) Postovi: (157)16
Spol:
Lokacija: Happily traveling through space since 1986!
|
Postano: 10:13 čet, 19. 1. 2012 Naslov: |
|
|
[quote="mini"][quote="michelangelo"]može neko pojašnjenje ovako zadane strukture nisam sigurna s čime tu zapravo raspolažem... ovaj labels mi nije jasan, što mi tu zapravo ulazi???
Neka je uredjeno stablo prikazano pomoću slijedeće strukture podataka:
typedef struct {
LIST header[maxnodes] ;
labeltype labels[maxnodes] ;
node root;
} TREE;
Uz ovakvu reprezentaciju implementirajte a.t.p. TREE. Pretpostavljamo da je node tipa int, labeltype je podatak tipa char, dok je a.t.p. LIST implementiran pomoću pointera, a header[i] predstavlja listu djece čvora i.[/quote]
trebalo bi i meni par odgovora. kako uopće implementirati listu. može li mi netko dati primjer za bar jednu funkciju? malo me to sve skupa zbunilo :/[/quote]
Piše ti: LIST implementirajte pomoću pointera.
[code:1]typedef struct tag_celltype
{
struct tag_celltype *next;
node childIndex;
} celltype;[/code:1]
Dakle, svi čvorovi stabla su zapisani u linearnom polju. root ti je 0 tj. na 0. mjestu se nalazi oznaka korijena u polju labels
labels[root] - oznaka korijena
header[root] - lista nodeova djece, npr [1, 2, 7]
Sad, ako želiš doći do djece od nekog node-a, samo pogledaš u header polje na njegovom mjestu. Dobit ćeš listu [i]novih indeksa[/i] u oba polja labels i header koji ti definiraju tim redom oznaku tog čvora i popis djece.
Jasnije?
mini (napisa): | michelangelo (napisa): | može neko pojašnjenje ovako zadane strukture nisam sigurna s čime tu zapravo raspolažem... ovaj labels mi nije jasan, što mi tu zapravo ulazi???
Neka je uredjeno stablo prikazano pomoću slijedeće strukture podataka:
typedef struct {
LIST header[maxnodes] ;
labeltype labels[maxnodes] ;
node root;
} TREE;
Uz ovakvu reprezentaciju implementirajte a.t.p. TREE. Pretpostavljamo da je node tipa int, labeltype je podatak tipa char, dok je a.t.p. LIST implementiran pomoću pointera, a header predstavlja listu djece čvora i. |
trebalo bi i meni par odgovora. kako uopće implementirati listu. može li mi netko dati primjer za bar jednu funkciju? malo me to sve skupa zbunilo |
Piše ti: LIST implementirajte pomoću pointera.
Kod: | typedef struct tag_celltype
{
struct tag_celltype *next;
node childIndex;
} celltype; |
Dakle, svi čvorovi stabla su zapisani u linearnom polju. root ti je 0 tj. na 0. mjestu se nalazi oznaka korijena u polju labels
labels[root] - oznaka korijena
header[root] - lista nodeova djece, npr [1, 2, 7]
Sad, ako želiš doći do djece od nekog node-a, samo pogledaš u header polje na njegovom mjestu. Dobit ćeš listu [i]novih indeksa u oba polja labels i header koji ti definiraju tim redom oznaku tog čvora i popis djece.
Jasnije?
_________________ -- space available for rent --
|
|
[Vrh] |
|
pajopatak Forumaš(ica)
Pridružen/a: 25. 10. 2009. (22:20:04) Postovi: (BE)16
|
Postano: 17:45 pet, 20. 1. 2012 Naslov: |
|
|
može mala pomoć,imam implementaciju SET-a pomoću vezane liste, to sam sve napravila i sad kao zadani elementtype mi je char i to nikako nemogu ukomponirat u f-je,stalno mi grešku javlja,evo samo dio koda, pa ako netko zna u čemu je problem:
[code:1]typedef struct cell_tag {
char element[100];
struct cell_tag *next;
} celltype;
typedef celltype *SET;
void MAKE_NULL(SET *A){
*A = (celltype*) malloc(sizeof(celltype));
(*A)->next = NULL;
}
void INSERT(char x[], SET *A){
celltype *novi, *prethodni, *trenutni;
prethodni = *A;
trenutni = prethodni->next;
while(trenutni != NULL && strcmp(trenutni->element,x)<0){
prethodni = trenutni;
trenutni = prethodni->next;
}
if (trenutni != NULL && strcmp(trenutni->element,x)==0)
return;
else{
novi = (celltype*) malloc(sizeof(celltype));
strcpy(novi->element,x);
novi->next=trenutni;
prethodni->next = novi;
}
}[/code:1]
može mala pomoć,imam implementaciju SET-a pomoću vezane liste, to sam sve napravila i sad kao zadani elementtype mi je char i to nikako nemogu ukomponirat u f-je,stalno mi grešku javlja,evo samo dio koda, pa ako netko zna u čemu je problem:
Kod: | typedef struct cell_tag {
char element[100];
struct cell_tag *next;
} celltype;
typedef celltype *SET;
void MAKE_NULL(SET *A){
*A = (celltype*) malloc(sizeof(celltype));
(*A)->next = NULL;
}
void INSERT(char x[], SET *A){
celltype *novi, *prethodni, *trenutni;
prethodni = *A;
trenutni = prethodni->next;
while(trenutni != NULL && strcmp(trenutni->element,x)<0){
prethodni = trenutni;
trenutni = prethodni->next;
}
if (trenutni != NULL && strcmp(trenutni->element,x)==0)
return;
else{
novi = (celltype*) malloc(sizeof(celltype));
strcpy(novi->element,x);
novi->next=trenutni;
prethodni->next = novi;
}
} |
|
|
[Vrh] |
|
satja Forumaš(ica)
Pridružen/a: 16. 05. 2010. (10:44:17) Postovi: (F1)16
|
Postano: 19:03 pet, 20. 1. 2012 Naslov: |
|
|
[quote="pajopatak"]može mala pomoć,imam implementaciju SET-a pomoću vezane liste, to sam sve napravila i sad kao zadani elementtype mi je char i to nikako nemogu ukomponirat u f-je,stalno mi grešku javlja,evo samo dio koda, pa ako netko zna u čemu je problem:
[code:1]typedef struct cell_tag {
char element[100];
struct cell_tag *next;
} celltype;
typedef celltype *SET;
void MAKE_NULL(SET *A){
*A = (celltype*) malloc(sizeof(celltype));
(*A)->next = NULL;
}
void INSERT(char x[], SET *A){
celltype *novi, *prethodni, *trenutni;
prethodni = *A;
trenutni = prethodni->next;
while(trenutni != NULL && strcmp(trenutni->element,x)<0){
prethodni = trenutni;
trenutni = prethodni->next;
}
if (trenutni != NULL && strcmp(trenutni->element,x)==0)
return;
else{
novi = (celltype*) malloc(sizeof(celltype));
strcpy(novi->element,x);
novi->next=trenutni;
prethodni->next = novi;
}
}[/code:1][/quote]
Kakvu ti grešku javlja? Meni se tvoj kod, uz [code:1]#include<stdio.h>
#include<stdlib.h>
#include<string.h>[/code:1] normalno kompajlira.
pajopatak (napisa): | može mala pomoć,imam implementaciju SET-a pomoću vezane liste, to sam sve napravila i sad kao zadani elementtype mi je char i to nikako nemogu ukomponirat u f-je,stalno mi grešku javlja,evo samo dio koda, pa ako netko zna u čemu je problem:
Kod: | typedef struct cell_tag {
char element[100];
struct cell_tag *next;
} celltype;
typedef celltype *SET;
void MAKE_NULL(SET *A){
*A = (celltype*) malloc(sizeof(celltype));
(*A)->next = NULL;
}
void INSERT(char x[], SET *A){
celltype *novi, *prethodni, *trenutni;
prethodni = *A;
trenutni = prethodni->next;
while(trenutni != NULL && strcmp(trenutni->element,x)<0){
prethodni = trenutni;
trenutni = prethodni->next;
}
if (trenutni != NULL && strcmp(trenutni->element,x)==0)
return;
else{
novi = (celltype*) malloc(sizeof(celltype));
strcpy(novi->element,x);
novi->next=trenutni;
prethodni->next = novi;
}
} |
|
Kakvu ti grešku javlja? Meni se tvoj kod, uz Kod: | #include<stdio.h>
#include<stdlib.h>
#include<string.h> | normalno kompajlira.
|
|
[Vrh] |
|
viki Forumaš(ica)
Pridružen/a: 07. 09. 2011. (08:53:07) Postovi: (9)16
|
|
[Vrh] |
|
pupi Forumaš(ica)
Pridružen/a: 20. 12. 2009. (11:03:15) Postovi: (92)16
Spol:
|
Postano: 19:35 pet, 20. 1. 2012 Naslov: |
|
|
Zadatak glasi ovako :
Sortirajte zadanu listu pomoću binarnog stabla traženja uzlazno i silazno koristeći isto binarno stablo traženja. Pretpostavimo da lista sadrži elemente tipa char. Binarno stablo traženja je prikazano pomoću polja, a implementaciju liste odaberite sami. Ne trebate implementirati sve funkcije iz atp LIST, nego samo one koje su vam potrebne u zadatku. Na binarnom stablu implementirajte sve operacije iz atp DICTIONARY osim DELETE.
Ulazni podaci: niz znakova koji čine elemente liste koje treba sortirati; ubacujte ih u BST točno redom kojim su navedeni.
Izlazni podaci: 3 retka: u prvom su elementi uzlazno sortirane liste, u drugom silazno sortirane, a u trećem je (za kontrolu) PREORDER obilazak konstruiranog stabla.
Na primjer, za ulazne podatke:
MIRKO
treba ispisati:
uzlazno sortirana lista: IKMOR
silazno sortirana lista: ROMKI
preorder: MIKRO
Funkcija insert mi uđe u beskonačnu petlju :
[code:1]void INSERT(char x, BTREE *T)
{
int i;
if (T->labels[0] == PRAZNO)
{
T->labels[0] = x;
return;
}
else if (x < T->labels[0]) {
i = 1;
while(1)
{
if (T->labels[i] == PRAZNO) { T->labels[i] = x; break; }
else if (x < T->labels[i]) i = 2*i+1;
else if (x > T->labels[i]) i = 2*i+2;
}
return;
}
else if(x > T->labels[0]) {
i = 2;
while(1)
{
if (T->labels[i] == PRAZNO) { T->labels[i] = x; break; }
else if (x < T->labels[i]) i = 2*i+1;
else if (x > T->labels[i]) i = 2*i+2;
}
return;
}
} [/code:1]
Jel može pomoć u pronalasku greške? :)
Zadatak glasi ovako :
Sortirajte zadanu listu pomoću binarnog stabla traženja uzlazno i silazno koristeći isto binarno stablo traženja. Pretpostavimo da lista sadrži elemente tipa char. Binarno stablo traženja je prikazano pomoću polja, a implementaciju liste odaberite sami. Ne trebate implementirati sve funkcije iz atp LIST, nego samo one koje su vam potrebne u zadatku. Na binarnom stablu implementirajte sve operacije iz atp DICTIONARY osim DELETE.
Ulazni podaci: niz znakova koji čine elemente liste koje treba sortirati; ubacujte ih u BST točno redom kojim su navedeni.
Izlazni podaci: 3 retka: u prvom su elementi uzlazno sortirane liste, u drugom silazno sortirane, a u trećem je (za kontrolu) PREORDER obilazak konstruiranog stabla.
Na primjer, za ulazne podatke:
MIRKO
treba ispisati:
uzlazno sortirana lista: IKMOR
silazno sortirana lista: ROMKI
preorder: MIKRO
Funkcija insert mi uđe u beskonačnu petlju :
Kod: | void INSERT(char x, BTREE *T)
{
int i;
if (T->labels[0] == PRAZNO)
{
T->labels[0] = x;
return;
}
else if (x < T->labels[0]) {
i = 1;
while(1)
{
if (T->labels[i] == PRAZNO) { T->labels[i] = x; break; }
else if (x < T->labels[i]) i = 2*i+1;
else if (x > T->labels[i]) i = 2*i+2;
}
return;
}
else if(x > T->labels[0]) {
i = 2;
while(1)
{
if (T->labels[i] == PRAZNO) { T->labels[i] = x; break; }
else if (x < T->labels[i]) i = 2*i+1;
else if (x > T->labels[i]) i = 2*i+2;
}
return;
}
} |
Jel može pomoć u pronalasku greške?
|
|
[Vrh] |
|
satja Forumaš(ica)
Pridružen/a: 16. 05. 2010. (10:44:17) Postovi: (F1)16
|
Postano: 19:45 pet, 20. 1. 2012 Naslov: |
|
|
[quote="pupi"]Zadatak glasi ovako :
Sortirajte zadanu listu pomoću binarnog stabla traženja uzlazno i silazno koristeći isto binarno stablo traženja. Pretpostavimo da lista sadrži elemente tipa char. Binarno stablo traženja je prikazano pomoću polja, a implementaciju liste odaberite sami. Ne trebate implementirati sve funkcije iz atp LIST, nego samo one koje su vam potrebne u zadatku. Na binarnom stablu implementirajte sve operacije iz atp DICTIONARY osim DELETE.
Ulazni podaci: niz znakova koji čine elemente liste koje treba sortirati; ubacujte ih u BST točno redom kojim su navedeni.
Izlazni podaci: 3 retka: u prvom su elementi uzlazno sortirane liste, u drugom silazno sortirane, a u trećem je (za kontrolu) PREORDER obilazak konstruiranog stabla.
Na primjer, za ulazne podatke:
MIRKO
treba ispisati:
uzlazno sortirana lista: IKMOR
silazno sortirana lista: ROMKI
preorder: MIKRO
Funkcija insert mi uđe u beskonačnu petlju :
[code:1]void INSERT(char x, BTREE *T)
{
int i;
if (T->labels[0] == PRAZNO)
{
T->labels[0] = x;
return;
}
else if (x < T->labels[0]) {
i = 1;
while(1)
{
if (T->labels[i] == PRAZNO) { T->labels[i] = x; break; }
else if (x < T->labels[i]) i = 2*i+1;
else if (x > T->labels[i]) i = 2*i+2;
}
return;
}
else if(x > T->labels[0]) {
i = 2;
while(1)
{
if (T->labels[i] == PRAZNO) { T->labels[i] = x; break; }
else if (x < T->labels[i]) i = 2*i+1;
else if (x > T->labels[i]) i = 2*i+2;
}
return;
}
} [/code:1]
Jel može pomoć u pronalasku greške? :)[/quote]
Čini mi se da, ako se u nekom trenutku petlje dogodi da je [tt]x == T->labels[i][/tt], brojač [tt]i[/tt] se neće promijeniti i ostat ćeš u beskonačnoj petlji.
pupi (napisa): | Zadatak glasi ovako :
Sortirajte zadanu listu pomoću binarnog stabla traženja uzlazno i silazno koristeći isto binarno stablo traženja. Pretpostavimo da lista sadrži elemente tipa char. Binarno stablo traženja je prikazano pomoću polja, a implementaciju liste odaberite sami. Ne trebate implementirati sve funkcije iz atp LIST, nego samo one koje su vam potrebne u zadatku. Na binarnom stablu implementirajte sve operacije iz atp DICTIONARY osim DELETE.
Ulazni podaci: niz znakova koji čine elemente liste koje treba sortirati; ubacujte ih u BST točno redom kojim su navedeni.
Izlazni podaci: 3 retka: u prvom su elementi uzlazno sortirane liste, u drugom silazno sortirane, a u trećem je (za kontrolu) PREORDER obilazak konstruiranog stabla.
Na primjer, za ulazne podatke:
MIRKO
treba ispisati:
uzlazno sortirana lista: IKMOR
silazno sortirana lista: ROMKI
preorder: MIKRO
Funkcija insert mi uđe u beskonačnu petlju :
Kod: | void INSERT(char x, BTREE *T)
{
int i;
if (T->labels[0] == PRAZNO)
{
T->labels[0] = x;
return;
}
else if (x < T->labels[0]) {
i = 1;
while(1)
{
if (T->labels[i] == PRAZNO) { T->labels[i] = x; break; }
else if (x < T->labels[i]) i = 2*i+1;
else if (x > T->labels[i]) i = 2*i+2;
}
return;
}
else if(x > T->labels[0]) {
i = 2;
while(1)
{
if (T->labels[i] == PRAZNO) { T->labels[i] = x; break; }
else if (x < T->labels[i]) i = 2*i+1;
else if (x > T->labels[i]) i = 2*i+2;
}
return;
}
} |
Jel može pomoć u pronalasku greške? |
Čini mi se da, ako se u nekom trenutku petlje dogodi da je x == T→labels[i], brojač i se neće promijeniti i ostat ćeš u beskonačnoj petlji.
|
|
[Vrh] |
|
pupi Forumaš(ica)
Pridružen/a: 20. 12. 2009. (11:03:15) Postovi: (92)16
Spol:
|
|
[Vrh] |
|
pajopatak Forumaš(ica)
Pridružen/a: 25. 10. 2009. (22:20:04) Postovi: (BE)16
|
Postano: 20:11 pet, 20. 1. 2012 Naslov: |
|
|
Implementirajte a.t.p. SET pomoću sortirane vezane liste (veze u listi su uspostavljene pomoću pointera) i pretpostavku da skupovi sadrže podatke tipa char. Nadopunite skupovne operacije iz implementacije sa simetričnom razlikom, tj. napišite dodatni potprogram koji računa simetričnu razliku skupova.
Ulazni podaci: dva stringa čiji znakovi predstavljaju elemente dvaju skupova A i B.
Izlazni podaci: 5 stringova, svaki u jednom redu – unija, presjek, razlika A∖ B, simetrična razlika; zadnji string je DA ako je A⊆ B, a NE u protivnom.
Na primjer, za ulazne podatke:
MIRKO
SLAVKO
treba ispisati:
unija: AIKLMORSV
presjek: KO
razlika: IMR
sim. razlika: AILMRSV
podskup: NE
Ovo je zadatak,ja sad ne razumijem dali ja trebam napravit impl.pomoću vezane liste za slova ili stringove,i kad npr.imam INSERT dali unosim samo slovo u skup ili string?
Implementirajte a.t.p. SET pomoću sortirane vezane liste (veze u listi su uspostavljene pomoću pointera) i pretpostavku da skupovi sadrže podatke tipa char. Nadopunite skupovne operacije iz implementacije sa simetričnom razlikom, tj. napišite dodatni potprogram koji računa simetričnu razliku skupova.
Ulazni podaci: dva stringa čiji znakovi predstavljaju elemente dvaju skupova A i B.
Izlazni podaci: 5 stringova, svaki u jednom redu – unija, presjek, razlika A∖ B, simetrična razlika; zadnji string je DA ako je A⊆ B, a NE u protivnom.
Na primjer, za ulazne podatke:
MIRKO
SLAVKO
treba ispisati:
unija: AIKLMORSV
presjek: KO
razlika: IMR
sim. razlika: AILMRSV
podskup: NE
Ovo je zadatak,ja sad ne razumijem dali ja trebam napravit impl.pomoću vezane liste za slova ili stringove,i kad npr.imam INSERT dali unosim samo slovo u skup ili string?
|
|
[Vrh] |
|
pupi Forumaš(ica)
Pridružen/a: 20. 12. 2009. (11:03:15) Postovi: (92)16
Spol:
|
|
[Vrh] |
|
|