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;
)