Linked list only inserts only one element

0

I am making a static linked list, that numbers will be sorted when the user types, but when I have insert more than one element it appears that the list is full, I do not know why this is happening

My code

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

#define MAX 50
#define INVALIDO -1

typedef int TIPOCHAVE;

typedef struct
{
  TIPOCHAVE chave;
} REGISTRO;

typedef struct
{
  REGISTRO reg;
  int prox;
} ELEMENTO;

typedef struct
{
  ELEMENTO A[MAX];
  int inicio;
  int dispo;
} LISTA;

void incializar(LISTA *l);
int tam(LISTA *l);
void imprime(LISTA *l);
int procura(LISTA *l, int numero);
void inserirElemento(LISTA *l, REGISTRO reg);
int obterNo(LISTA *l);

int main(int argc, char** argv)
{
  LISTA *lista = malloc(sizeof(LISTA));
  REGISTRO registro;
  registro.chave = 190;
  incializar(lista);
  inserirElemento(lista,registro);
  registro.chave = 10;
  inserirElemento(lista,registro);
  printf("%d\n",tam(lista));
  //free(lista);

  return 0;
}

void incializar(LISTA *l)
{
  int i;
  for(i = 0; i < MAX - 1; i++)
  {
     l->A[i].prox = i + 1;
  }
  l->A[MAX - 1].prox = INVALIDO;
  l->inicio = INVALIDO;
  l->dispo = 0;
}
int tam(LISTA *l)
{
   int inicio = l->inicio;
   int tam = 0;
   while(inicio != INVALIDO)
   {
      inicio = l->A[inicio].prox;
      tam++;
   }
   return tam;
 }

 void imprime(LISTA *l)
 {
    int i = l->inicio;
    if(l->dispo == 0)
    {
      puts("A lista nao tem elementos");
    }
    else
   {
      while(i != INVALIDO)
      {
        printf("%d\n", l->A[i].reg.chave);
        i = l->A[i].prox;
       }
    }
 }
 int procura(LISTA *l, int numero)
 {
    int i = l->inicio;
    while((i != INVALIDO) && (l->A[i].reg.chave < numero))
    {
       i = l->A[i].reg.chave;
    }
    if(i != INVALIDO && l->A[i].reg.chave == numero)
    {
      return i;
    }
   return -1;
 }

 void inserirElemento(LISTA *l, REGISTRO reg)
 {
   int i;
   if(l->dispo == INVALIDO)
   {
     puts("Lista cheia");
   }
   int ant = INVALIDO;
   int ch = reg.chave;
   while((i != INVALIDO) && (l->A[i].reg.chave < ch))
   {
     i = l->A[i].reg.chave;
   }
   if(i != INVALIDO && l->A[i].reg.chave == ch)
   {
       puts("Esse elemento ja existe");
   }
   i = obterNo(l);
   l->A[i].reg = reg;
   if(ant == INVALIDO)
   {
      l->A[i].prox = l->inicio;
      l->inicio = i;
   }
   else
   {
      l->A[i].prox = l->A[ant].prox;
    l->A[ant].prox = i;
   }
}

 int obterNo(LISTA *l)
 {
   int resultado = l->dispo;
   while(l->dispo != INVALIDO)
   {
     l->dispo = l->A[l->dispo].prox;
   }
   return resultado;
 }
    
asked by anonymous 02.07.2018 / 02:32

0 answers