Alguém me socorre , vale nota .Onde está o erro neste código , é para amanhã ? Um filho de Deus aiu por favor ?
#include <stdlib.h>
#include <stdio.h>
#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 tamanhoMaximoAtualDoVetorDaLista) {
lista->lista = (int *)malloc(sizeof(int) * tamanhoMaximoAtualDoVetorDaLista * 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("\n");
}
int main()
{
int op;
int elem;
int sucesso;
Lista minha_lista;
//inicia os valores adequados da lista
inicia_lista(&minha_lista);
do
{
printf("\tMENU\n");
printf("1 - Inserir elemento na lista\n");
printf("2 - Remover elemento da lista\n");
printf("3 - Mostrar elementos da lista\n");
printf("0 - Sair\n");
scanf("%d", &op);
switch(op)
{
case 1:
printf("Digite o elemento:\n");
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!\n");
}
else {
printf("Elemento inserido com sucesso!\n");
break;
}
break;
case 2:
printf("Digite o elemento:\n");
scanf("%d", &elem);
sucesso = remove_elemento(&minha_lista, elem);
if(sucesso == 0)
printf("Nao foi possivel remover o elemento!\n");
else
printf("Elemento removido com sucesso!\n");
break;
case 3:
mostra_elementos(&minha_lista);
break;
case 0:
printf("Saindo ... \n");
break;
default:
printf("Opcao nao encontrada!\n");
break;
}
} while(op != 0);
return 0;
}
Soluções para a tarefa
Respondido por
0
Me desculpe minha primeira resposta pensei que daria certo copiar e colar o código certo para você.
Mais a unica coisa de errada é que você não declarou a variavel "tamanho_lista".
Então va lá antes de "minha_lista" e declare ...
int tamanho_lista;
Mais a unica coisa de errada é que você não declarou a variavel "tamanho_lista".
Então va lá antes de "minha_lista" e declare ...
int tamanho_lista;
Perguntas interessantes