GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Lista simplesmente encadeada com estrutura dentro de estrutura

programação
struct
Tags: #<Tag:0x00007fbf1cfb4b58> #<Tag:0x00007fbf1cfb49f0>

#1

Boa Noite Pessoal!

Estou com dificuldade em implementar um exercício que pede para criar duas estruturas, uma com os dados de um aluno, e outra para ser a lista. Na inserção de dados pede para fazer em ordem crescente de matriculas. Ele está dando erro. Vocês conseguem me dizer onde estou errando? Vejam meu código:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

struct aluno{
int matricula;
char nome[100];
float media;
};
typedef struct aluno Aluno;

struct no{
Aluno* dados;
struct no* prox;
};
typedef struct no No;

No* cria(No* l){
No* p=(No*)malloc(sizeof(No));
p->dados=NULL;
return l;
}

No* ins_ordenado(No* l,int mat,char* nome,float nota){
Aluno* Al=(Aluno*)malloc(sizeof(Aluno));
No* novo=(No*)malloc(sizeof(No));
int i=0;
Al->matricula=mat;
while(nome[i]!=’\0’){
Al->nome[i]=nome[i];
i++;
}
Al->nome[i]=NULL;

Al->media=nota;
novo->dados=Al;

No*p=l;
No*aux=NULL;

if(l==NULL){
    novo->prox=l;
    return novo;
}
    while(p!=NULL&&((p->dados->matricula)<(Al->matricula))){
          aux=p;
          p=p->prox;
    }

    novo->prox=aux->prox;
    aux->prox=novo;
    if(p==NULL){
        novo->prox=NULL;
    }

return l;

}

void imprime(No* l){
No* p;
printf(“turma 1:\n”);
for(p=l;p!=NULL;p->prox){
printf(“Matricula: %d\t Nome: %s Nota:%f\n”,p->dados->matricula,p->dados->nome,p->dados->media);
}
printf("\n");
}

int vazia(No* l){
return(l==NULL);
}

int main(){
No* l1=cria(l1);
l1=ins_ordenado(l1,1,“Maria”,5);
printf(“vazia? %d”,vazia(l1));
//imprime(l1);

return 0;
}