1
resposta

[Dúvida] Dúvidas em programação em C e em lista encadeada

Boa noite, tudo bem? Preciso de uma ajuda nessa tarefa, fiz o código dessa maneira e da erros que eu não sei resolver

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

TAREFA:

Com base nisso, sua tarefa, neste desafio, é declarar uma lista  encadeada e implementar as seguintes funções na linguagem C:

- Inicializar a lista;

- Inserir elemento no início;

- Inserir elemento no final;

- Excluir elemento do meio da lista;

- Imprimir a lista nos dois sentidos;

- Excluir toda a lista.


Use como base da lista uma estrutura com os seguintes atributos: nome, nota e turma, conforme segue:


typedef struct {

   char nome[20];

   float nota;

   int turma;

} Aluno;


Após implementar a lista e os métodos, faça algumas operações de inserção e exclusão para testar as funcionalidades do exercício e apresente o resultado da tela conforme roteiro de teste a seguir. O principal método desse exercício é o que exclui elementos do meio da lista, sendo que os outros servirão de apoio para o desenvolvimento deste. ??????


Roteiro de teste (fazer um print da tela no final para entregar):

Adicionar João no inicio.

Adicionar Maria no final.

Adicionar Paula no final.

Adicionar Carlos na terceira posição.

Mostrar a lista com o nome,nota e turma:

Excluir Maria.

Exclui Paula.

Mostrar a lista com o nome,nota e turma:
typedef struct{
  char nome [20];
  float nota;
  int turma;
} Aluno;


struct Nodo{
  Aluno dado; //Variável que armazena atributos dos Alunos (nome, nota, turma)
  struct Nodo *ant; //Variável ponteiro armazena endereço do elemento anterior
  struct Nodo *prox; //Variável ponteiro armazena endereço do próximo elemento
};
typedef struct Nodo nodo; 


struct Descritor{
  int n; //Variável tipo inteiro que armazena a quantidade de elementos da lista
  struct Nodo *prim; //Variável ponteiro armazena endereço do primeiro elemento
  struct Nodo *ult; //Variável ponteiro armazena endereço do último elemento
};
typedef struct Descritor descritor; //Declaração descritor para uso da estrutura

Aluno aluno;
nodo *L= (nodo *L) malloc(sizeof(nodo));
descritor *D= (descritor *D) malloc(sizeof(descritor));

void iniciar(nodo *L, descritor *D) {
  L->ant= NULL;
  L->prox= NULL;

  D->n= 0;
  D->prim= NULL;
  D->ult= NULL;
}

int estaVazia(descritor *D) {
  if (D->n ==0)
    return 1;
  else 
    return 0;
}

Aluno ultimoElemento(descritor *D) {
  nodo *no= D->ult;
  return no->dado;
}

void inserirInicio(nodo *L, descritor *D, Aluno *dado){
  nodo *novo= (nodo *) malloc(sizeof(nodo));

  strcpy(novo->dado.nome, dado->nome);
  novo->dado.turma= dado->turma;
  novo->dado.nota= dado->nota;

  if(estaVazia(D)){
    L->prox= novo;
    novo->prox= NULL;
    D->ult=novo;
  } else{
    nodo *primeiro= L->prox;
    L->prox= novo;
    novo->prox= primeiro;
    primeiro->ant= novo;
  }
  D->n++;
  D->prim= novo;
  novo->ant= NULL;
}

void inserirFinal(nodo *L, descritor *D, Aluno *dado){
  nodo *novo= (nodo *) malloc(sizeof(nodo));

  strcpy(novo->dado.nome, dado->nome);
  novo->dado.turma= dado->turma;
  novo->dado.nota= dado->nota;

  if(estaVazia(D)){
    L->prox= novo;
    novo->ant=NULL;
    D->prim= novo;
  } else {
    nodo *no= D->ult;
    novo->ant= no;
    no->prox= novo;
  }
  novo->prox= NULL;
  D->ult= novo;
  D->n++;
}

void excluirInicio(nodo *L_, descritor *D) {
  nodo *primeiro= L->prox;
  nodo *segundo= primeiro->prox;
  L->prox= segundo;
  segundo->ant= NULL;
  D->prim= segundo;
  D->n--;
  free(primeiro);
}

void excluirFinal(nodo *L, descritor *D){
  nodo *ultimo= D->ult;
  nodo *penultimo= ultimo->ant;
  penultimo->prox= NULL;
  D->ult= penultimo;
  D->n--;
  free(ultimo);
}

void liberar(nodo *L, descritor *D){
  if (!estaVazia(D)){
    nodo *proxNodo, *atual;
    atual= L->prox;
    while(atual !=NULL){
      proxNodo= atual->prox;
      free(atual);
      D->n--;
    }
  }
}

int main()
{
Aluno aluno, aluno1, aluno2, aluno3;
  int opcao, nome, nota, turma;
  aluno.nome= 0;
  aluno.nota=0;
  aluno.turma=0;
  aluno1.nome=0;
  aluno1.nota=0;
  aluno1.turma=0;
  aluno2.nome=0;
  aluno2.nota=0;
  aluno2.turma=0;
  aluno3.nome=0;
  aluno3.nota=0;
  aluno3.turma=0;

}
do{
printf("1-Iniciar a lista\n2-Inserir elemento no ínicio\n3-Inserir elemento no final\n4-Excluir elemnto no meio da lista\n5- Imprimir a lista nos dois sentidos\n6- Excluir toda lista\n7- Sair\n

  scanf("%d", &opcao);

  switch(opcao);

  case 1:

    printf("\Aluno original:\n")
  imprimir(&Aluno);
    break;

  case 2:
    printf("digite um elemento a ser inserido:");
scanf("%d", &Aluno);
    inserirInicio(&Aluno, Aluno);
  break;

  )
1 resposta

Oi, oi, Maria! Tudo bem?

Ainda tem erros aparecendo pra você?

Quais são os erros? Manda aqui para que eu possa te ajudar melhor.

Aguardo retorno :)