bio bih jako zahvalan na pomoći sa ovim problemom!
ne radi se ni o implementaciji, ni o nekakvom algoritmu već o pomoćnoj funkciji pa se valjda može riješiti ovdje.
ili da mi samo netko kaže u čemu je stvar...
QUEUE je implementiran pomoću [b]pointera[/b], i sve što želim je provjeriti je li int x unutar reda Q.
[b]ali[/b], funkcija se mora moći izvršavati više puta na [b]istom[/b] redu.
znači, želim provjeriti je li 7 u redu Q, pa pozovem funkciju. onda želim provjeriti je li 327 u Q, i opet pozovem funkciju.
ali u čemu je problem:
ako bi išli najjednostavnije,
[code:1]int jel_unutra(int n, QUEUE Q){
while(!EMPTY(Q)){
if(n==FRONT(Q)) return 1;
DEQUEUE(&Q);
}
return 0;
} [/code:1]
onda nakon samo jedne provjere cijeli red iščezne (jer je implementiran preko pointera, pa DEQUEUE ne ostaje samo u funkciji).
zato sam probao uvesti pomoćni red A, koji će kupiti sve što "otpadne" od prvog reda prilikom DEQUEUE-anja, npr
[table]
Q 2 4 6 17 4
A [/table]
nakon [tt]DEQUEUE(&Q);[/tt]
[table]
Q 4 6 17 4
A 2[/table]
kako operacije sa redom sve idu u istom smjeru, mogu isprazniti cijeli Q, i napuniti cijeli A (pritom bilježeći jel traženi element unutra)
[table]
Q
A 2 4 6 17 4[/table]
i onda opet sve vratim u Q:
[table]
Q 2 4 6 17 4
A [/table]
činilo mi se da se tako red Q neće izbrisati i da ću moći višestruko provjeravati je li neki element unutra. u C-u bi to izgledalo ovako (uz implementaciju reda pomoću pointera):
[code:1]int jel_unutra(int x,QUEUE Q){
QUEUE A;
MAKE_NULL(&A);
int unutra = 0;
int y;
while (!EMPTY(Q)) {
y = FRONT(Q);
if(x==FRONT(Q))unutra=1;
DEQUEUE(&Q);
ENQUEUE(y, &A);
}
while (!EMPTY(A)){
y = FRONT(A);
DEQUEUE(&A);
ENQUEUE(y, &Q);
}
return unutra;
}[/code:1]
i funkcija stvarno radi ako je riječ o samo jednoj provjeri, no ako ju pozovem dva ili više puta, program se ruši :( :( :(
u čemu je greška? zašto ovo ne radi za više poziva?
ili možda postoji neki drugi način za višestruko provjeravanje je li neki element u redu? funkcija bi trebala raditi u petlji, znači da se red ne uništi kad se pozove funkcija.
svaki savjet bit će obilato obasut sarmom :zlatnizub:
bio bih jako zahvalan na pomoći sa ovim problemom!
ne radi se ni o implementaciji, ni o nekakvom algoritmu već o pomoćnoj funkciji pa se valjda može riješiti ovdje.
ili da mi samo netko kaže u čemu je stvar...
QUEUE je implementiran pomoću pointera, i sve što želim je provjeriti je li int x unutar reda Q.
ali, funkcija se mora moći izvršavati više puta na istom redu.
znači, želim provjeriti je li 7 u redu Q, pa pozovem funkciju. onda želim provjeriti je li 327 u Q, i opet pozovem funkciju.
ali u čemu je problem:
ako bi išli najjednostavnije,
Kod: | int jel_unutra(int n, QUEUE Q){
while(!EMPTY(Q)){
if(n==FRONT(Q)) return 1;
DEQUEUE(&Q);
}
return 0;
} |
onda nakon samo jedne provjere cijeli red iščezne (jer je implementiran preko pointera, pa DEQUEUE ne ostaje samo u funkciji).
zato sam probao uvesti pomoćni red A, koji će kupiti sve što "otpadne" od prvog reda prilikom DEQUEUE-anja, npr
nakon DEQUEUE(&Q);
kako operacije sa redom sve idu u istom smjeru, mogu isprazniti cijeli Q, i napuniti cijeli A (pritom bilježeći jel traženi element unutra)
i onda opet sve vratim u Q:
činilo mi se da se tako red Q neće izbrisati i da ću moći višestruko provjeravati je li neki element unutra. u C-u bi to izgledalo ovako (uz implementaciju reda pomoću pointera):
Kod: | int jel_unutra(int x,QUEUE Q){
QUEUE A;
MAKE_NULL(&A);
int unutra = 0;
int y;
while (!EMPTY(Q)) {
y = FRONT(Q);
if(x==FRONT(Q))unutra=1;
DEQUEUE(&Q);
ENQUEUE(y, &A);
}
while (!EMPTY(A)){
y = FRONT(A);
DEQUEUE(&A);
ENQUEUE(y, &Q);
}
return unutra;
} |
i funkcija stvarno radi ako je riječ o samo jednoj provjeri, no ako ju pozovem dva ili više puta, program se ruši
u čemu je greška? zašto ovo ne radi za više poziva?
ili možda postoji neki drugi način za višestruko provjeravanje je li neki element u redu? funkcija bi trebala raditi u petlji, znači da se red ne uništi kad se pozove funkcija.
svaki savjet bit će obilato obasut sarmom
|