Atividade Listas Lineares por Encadeamento com Ponteiros
1) Elabore um programa em C que contenha funções e um pequeno programa de teste para implementar as seguintes funcionalidades:
Declaração das variáveis físicas que representarão a lista (variável para o início da lista)
Inicialização da lista
Inserção de elemento na lista
Deleção de Elemento da Lista
Percorrimento da lista mostrando o conteúdo na tela
As funções devem retornar uma indicação de sucesso ou insucesso da operação
As funções não interagem com o usuário, apenas com os parâmetros que recebem
A lista contém a seguinte estrutura: nome[50], idade, salario
As funções que devem ser implementadas são as seguintes:
llep_inicializa(&inicio)
llep_insere(&inicio, nodo)
llep_percorre(&inicio)
llep_deleta(&nodo)
O programa principal deve fazer a declaração das estruturas e o teste das funções.
Obs1: Estas funções farão parte da biblioteca do aluno. Faça-as da forma mais genérica possível para que possam ser facilmente adaptadas a outros contextos.
Depois de me debater um pouco cheguei perto do fim mas não sei como fazer para deletar os elementos da lista, aqui vai o meu código, digam oque acham e se possível como posso finalizá-lo.
#include <stdio.h>
#define NOT_PRESENT -1
#define NULL 0
#define LIST_CREATED 123456
typedef struct
{
int key;
char name[32];
}Node;
typedef struct
{
Node *array;
int array_size;
int list_size;
int first_pos;
int next_pos;
int magic_number;
}List;
List * listCreate(int max_size);
int listGetSize(List *l);
void listMakeEmpty(List *l);
void listDestroy (List *l);
void listPrint (List *l);
Node nodeCreate(int key, char *nome);
void listInsertNode (List *l, Node n, int pos);
int listFindNode (List *l, int key);
Node listGetNode (List *l, int pos);
void listRemoveNode (List *l, int pos);
int main(int argc, char *argv[])
{
printf("\t\tGerencia uma lista Linear\n"
listCreate(100);
getchar();
return 0;
}
List* listCreate (int max_size)
{
Node *new_array;
List *new_list;
new_array = (Node*) calloc(max_size,sizeof(Node));
new_list = (List*) calloc(1,sizeof(List));
(*new_list).array = new_array;
(*new_list).array_size = max_size;
(*new_list).list_size = 0;
(*new_list).first_pos = 0;
(*new_list).next_pos = 0;
(*new_list).magic_number = LIST_CREATED;
return new_list;
}
void listInsertNode (List *l, Node n, int pos)
{
if ((*l).next_pos ==(*l).array_size)
return;
if (pos <= (*l).next_pos-(*l).first_pos)
{
(*l).array[pos+(*l).first_pos] = n;
if (pos==(*l).next_pos-(*l).first_pos)
{
++ (*l).next_pos;
++ (*l).list_size;
}
}
}
void listPrint (List *l)
{
int i=0;
for (i+(*l).first_pos; i<(*l).next_pos; ++i);
{
nodePrint((*l).array[i]);
printf(" "
}
printf("\n"
}
void nodePrint(Node n)
{
printf("(%d,%s)", n.key, n.name);
}
Posso criar só uma funçãozinha para pega o nodo tipo getNode e passar ele pra dentro da insertNode? Qual a maneira mais fácil de deletar os nodos? onde acho algorítimos parecidos com esse.