乱数で配列を生成し、配列メンバーを最後から最初にキューに追加する必要があります。私は関数dodajURed()
を使用してキューに個々の番号を追加し、poljeURed()
を使用して配列メンバーをキューに追加します。アレイからキューへの再帰的な追加中にプログラムがクラッシュするのはなぜですか?
ラベルは英語ではないので、ここではクイックリファレンスガイドだ:
cvor =ノード
赤=キュー
ulaz =フロント
izlaz =リア
novi = new
メインプログラムでは、ランダムに生成された数値で配列を塗りつぶし、配列を印刷してpoljeURed()
関数を呼び出します。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
typedef struct cvor {
int element;
struct cvor *sljed;
} cvor;
typedef struct {
cvor *ulaz, *izlaz;
} Red;
void init_red(Red *red) {
red->ulaz = NULL;
red->izlaz = NULL;
}
int dodajURed(double broj, Red *red) {
cvor *novi;
if (!(novi=malloc(sizeof(cvor)))) return 0;
novi->element = broj;
if (!(red->izlaz)) red->izlaz = novi;
else (red->ulaz)->sljed = novi;
novi = red->ulaz;
return 1;
}
int poljeURed(int polje[], int n, Red *red) {
if (n<=0) return 1;
if (!(dodajURed(polje[n-1], red))) return 0;
else {
printf("Dodan u red: %d\n", polje[n-1]);
return poljeURed(polje, n-1, red);
}
}
int main(void) {
int i, polje[10];
int broj;
Red red;
srand((unsigned)time(NULL));
init_red(&red);
for(i=0; i<10; i++) {
broj = rand() % 11;
polje[i]=broj;
}
printf("Polje: ");
for(i=0; i<10; i++) {
printf("%d ", polje[i]);
}
printf("\n");
if (poljeURed(polje, 10, &red)) printf("Dodavanje uspjesno");
else printf("Dodavanje prekinuto");
return 0;
}
さて、プログラムが正常に乱数で配列を埋め、poljeURed()
を呼び出します。最初の呼び出しは成功し、配列の最後のメンバーがキューに追加されます。しかし、プログラムは2回目の呼び出し(再帰)でクラッシュします。私は何かが私の再帰で間違っていると思うが、私は正確に何が間違っているかに私の指を置くことはできません。このプログラムは、cmdのGCCとうまくコンパイルされます。
int poljeURed(int polje[], int n, Red *red) {
if (n<=0) return 1;
if (!(dodajURed(polje[n-1], red))) return 0;
else {
printf("Dodan u red: %d\n", polje[n-1]);
return poljeURed(polje, n-1, red);
}
}
のようになります。その結果、それはコードに直接翻訳を置くように頼むには余りにも多くのだろうか?正確なコードを投稿する必要はありません。予期しない動作を最小限に抑えるだけです。 –
私はちょっと急いでいますが、私が管理すれば挑戦します。私は文脈のためにすべてのコードを置く。私が言ったように、私は問題が私の反復的な機能にあると思う。 – scriptybusiness