队列用作指针

时间:2018-06-02 15:51:41

标签: c

我正在为我的单人练习编码,目前我们正在学习C中的队列。这个练习是关于用列表实现的队列。

typedef struct cvor{ //elements of a list
    double broj; //number
    struct cvor *sljed; //pointer to next element
}cvor;

typedef struct red{ //queue realised with a list
    cvor *ulaz; //enter pointer
    cvor *izlaz; //exit pointer
}red;

我有两个功能。初始化队列并将元素添加到队列:

void init_red(red *red);
int dodaj_u_red(double broj, red *red);

在我的main函数中,我首先将变量red初始化为指针,因为我的程序根本不起作用。我调试了它,当它达到init_red(红色)时它崩溃了。如果队列是一个指针,我无法解释为什么代码不起作用。

void init_red(red *red){
    red->ulaz = NULL;
    red->izlaz = NULL;
}

int dodaj_u_red(double broj, red *red){
   cvor *novi; //novi means new
   if( (novi = malloc(sizeof(cvor)))){ //checking for error

        novi->broj = broj;
        novi->sljed = NULL;

        if(red->izlaz == NULL) red->izlaz = novi;
        else (red->ulaz)->sljed = novi;

        red->ulaz = novi;

        return 1;
    }
    return 0;
}

主要功能是

int main(void){

    red red;  //if I change this is *red and I change argument parameters 
    double broj; //from &red to red the program doesn't work

    int n, i;
    printf("Upisite koliko brojeva zelite dodati u listu: ");
    do{
        scanf("%d", &n);
        if(n > 10 || n < 0){
            printf("Pogresna velicina broja. Broj mora biti izmedu 1 i 10.");
        }
    }while(n > 10 || n < 0);

    init_red(&red);

    for( i = 0; i < n; i++){

        printf("Upisi %d clan: ", i+1);
        scanf("%lf", &broj);
        if( !(dodaj_u_red(broj, &red))) return 1;
        printf("Novi clan je: %lf.\n", (red.ulaz)->broj);

    }

    return 0;
}

不起作用的主要功能的版本。 (到达init_red(红色)时会崩溃;行)

int main(void){

    red *red; 
    double broj;

    int n, i;
    printf("Upisite koliko brojeva zelite dodati u listu: ");
    do{
        scanf("%d", &n);
        if(n > 10 || n < 0){
            printf("Pogresna velicina broja. Broj mora biti izmedu 1 i 10.");
        }
    }while(n > 10 || n < 0);

    init_red(red);

    for( i = 0; i < n; i++){

        printf("Upisi %d clan: ", i+1);
        scanf("%lf", &broj);
        if( !(dodaj_u_red(broj, red))) return 1;
        printf("Novi clan je: %lf.\n", (red.ulaz)->broj);

    }

    return 0;
}

1 个答案:

答案 0 :(得分:1)

你没有为* red分配任何内存 将该行更改为

red *red = (red*)malloc(sizeof(red));