Boa tarde onde está o erro neste código ? #include #include #define tam 5 /*comando typedef define

Boa tarde onde está o erro neste código ?

#include
#include

#define tam 5

/*comando typedef
define um novo nome para um tipo já existente.
*/
typedef struct list
{
int *lista; //elementos da lista
int pos_livre; //proxima posicao livre da lista

} lista;

//funcao que inicia a lista
void inicia_lista(lista* lista)
{
lista-> pos_livre = 0;
lista-> lista = (int *)malloc(sizeof(int) * tam);
}

//retorna numero de elementos na lista
int tamanho_lista(lista* lista)
{
return lista-> pos_livre;
}

//dobra o tamanho da lista
void aloca(lista *lista, int ) {

lista-> lista = (int *)malloc(sizeof(int) * * 2);

}

//retorna 1 se a lista está vazia. retorna 0 caso contrario
int lista_vazia(lista* lista)
{
if(lista-> pos_livre == 0)
return 1;
else
return 0;
}

//retorna 1 se a lista esta cheia. retorna 0 caso contrario
int lista_cheia(lista* lista)
{
if(lista-> pos_livre == tam)
return 1;
else
return 0;
}

//retorna 1 se o elemento x e inserido. retorna 0 se não é possível inserir.
int insere_elemento(lista* lista, int x)
{
//existe espaco na lista
if(lista_cheia(lista) == 0)
{
lista-> lista[lista-> pos_livre] = x; //escreve x na posicao livre da lista
lista-> pos_livre = lista-> pos_livre + 1; //atualiza posicao livre da lista
return 1; //indica que foi possivel inserir o elemento
}
else
return 0; //indica que nao foi possivel inserir elemento
}
//retorna 1 se o elemento é encontrado e removido. retorna 0 caso contrario.
int remove_elemento(lista* lista, int x)
{
int i;
int pos_x;
if(lista_vazia(lista) == 0)
{
//percorrer a lista até encontrar o elemento x
for(i = 0; i < lista-> pos_livre; ++i)
{
if(lista-> lista[i] == x) //elemento x encontrado
{
pos_x = i;
break;
}
}
//verifica se o elemento foi encontrado
if(i < lista-> pos_livre)
{
//mover para a posicao anterior cada elemento apos o elemento x
for(i = pos_x; i+1 < lista-> pos_livre; ++i)
lista-> lista[i] = lista-> lista[i+1];

//atualiza posicao livre
lista-> pos_livre = lista-> pos_livre - 1;

return 1; //indica que o elemento foi removido
}

return 0; //indica que não foi possível remover o elemento
}
}

void mostra_elementos(lista* lista)
{
int i;
printf("lista: ");
for(i = 0; i < lista-> pos_livre; ++i)
printf("%d ", lista-> lista[i]);
printf(" ");

}

int main()
{
int op;
int elem;
int sucesso;
lista minha_lista;

//inicia os valores adequados da lista
inicia_lista(& minha_lista);

do
{
printf(" menu ");
printf("1 - inserir elemento na lista ");
printf("2 - remover elemento da lista ");
printf("3 - mostrar elementos da lista ");
printf("0 - sair ");

scanf("%d", & op);

switch(op)
{
case 1:
printf("digite o elemento: ");
scanf("%d", & elem);
sucesso = insere_elemento(& minha_lista, elem);

// se sucesso igual a 0, a função aloca() é chamada, a lista é dobrada e então insere_elemento() é chamado novamente
if(sucesso == 0) {
aloca(& minha_lista, tamanho_lista);
insere_elemento(& minha_lista, elem);
printf("a lista estava cheia e seu tamanho foi dobrado! ");
}
else {
printf("elemento inserido com sucesso! ");
break;
}
break;
case 2:
printf("digite o elemento: ");
scanf("%d", & elem);
sucesso = remove_elemento(& minha_lista, elem);
if(sucesso == 0)
printf("nao foi possivel remover o elemento! ");
else
printf("elemento removido com sucesso! ");

break;
case 3:
mostra_elementos(& minha_lista);
break;
case 0:
printf("saindo ");
break;
default:
printf("opcao nao encontrada! ");
break;
}
} while(op ! = 0);

return 0;
}

1 Resposta

  • Isabelly

    Verifica o for e o ponteiro, pra ver se estar indicando corretamente

Clique aqui para adicionar a sua resposta.