Enviado em 02/04/2017 - 12:06h
Bom dia caros colegas, venho mais uma vez recorrer a ajuda de vocês para um problema que eu estou tendo.
//ListaDuplEncad.h
#include <stdio.h>
#include <stdlib.h>
struct no
{
no *ant;
int item;
no *prox;
};
struct TipoLista
{
no *inicio;
no *fim;
};
void Inicializa(TipoLista *lista)
{
lista->inicio = lista->fim = NULL;
}
int Vazia(TipoLista *lista)
{
return (lista->inicio == NULL && lista->fim == NULL);
}
//Insere no fim da lista
void Insere_Fim(int elem, TipoLista *lista)
{
no *novo;
novo = (no *)malloc(sizeof(no));
novo->ant = novo->prox = NULL;
novo->item = elem;
if (Vazia(lista))
{
lista->inicio = novo;
}
else
{
lista->fim->prox = novo;
novo->ant = lista->fim;
}
lista->fim = novo;
}
//Insere o elemento na posição indicada
void Insere_Pos(int elem, int pos, TipoLista *lista)
{
no *novo;
novo = (no *)malloc(sizeof(no));
novo->ant = novo->prox = NULL;
novo->item = elem;
if (pos == 0)
{
novo->prox = lista->inicio;
lista->inicio = novo;
}
else
{
int contador = 0; //contador de posicoes
no *aux, *proximo, *anterior; //declaracao de ponteiros
aux = proximo = anterior = NULL; //no inicio todos são nulos
aux = lista->inicio; //auxiliar aponta para o inicio da fila
while(contador < pos && aux->prox != NULL)
{
contador++;
anterior = aux; //auxiliar passa a ser anterior
aux = aux->prox; //atualiza o endereço do auxiliar para o proximo
proximo = aux->prox; //indica quem vem a frente do auxiliar atualizado
}
if (contador == pos)
{
novo->ant = anterior;
anterior->prox = novo;
novo->prox = aux;
aux->ant = novo;
/*
anterior->prox = novo; //atualiza o prox do anterior para apontar para o novo item
novo->ant = anterior; //aponta para o item anterior
novo->prox = aux; //aponta para o item que entrou na frente
aux->ant = novo; //faz o item da posicao ocupada apontar seu ant para o novo
*/
}
}
}
//Imprime a lista
void Imprime(TipoLista *lista)
{
no *aux;
aux = lista->inicio;
int contador = 0;
while(aux != NULL)
{
printf("pos %d - item %d\n", contador, aux->item);
contador++;
aux = aux->prox;
}
}
//Remove o elemento indicado se houver
void Remove_Elem(int elem, TipoLista *lista)
{
no *aux, *anterior, *proximo;
aux = anterior = proximo = NULL;
aux = lista->inicio;
proximo = aux->prox;
int busca, contador;
busca = contador = 0;
while(aux->item != elem && aux != NULL)
{
anterior = aux;
aux = aux->prox;
proximo = aux->prox;
contador++;
}
if (contador == 0 && busca == 0)
{
lista->inicio = proximo;
proximo->ant == NULL;
busca = 1;
puts("Removido elemento da posicao 0");
getchar();
}
else
if (elem == aux->item && aux->prox == NULL && busca == 0)
{
lista->fim = anterior;
anterior->prox = NULL;
busca = 1;
free(aux);
printf("Removido elemento da posicao %d - Fim da fila alterado\n", contador);
getchar();
}
else
if(aux->item == elem && aux->prox != NULL && busca == 0)
{
anterior->prox = proximo;
proximo->ant = anterior;
busca = 1;
free(aux);
printf("Removido o elemento da posicao %d\n", contador);
getchar();
}
if(busca == 0)
{
puts("Elemento nao encontrado");
getchar();
}
}
//Temp.cpp
#include <stdio.h>
#include <stdlib.h>
#include "ListaDuplEncad.h"
int main()
{
TipoLista lista;
Inicializa(&lista);
Insere_Fim(1, &lista);
Insere_Fim(2, &lista);
Insere_Fim(3, &lista);
Insere_Pos(8, 0, &lista);
Insere_Pos(9, 1, &lista);
Insere_Pos(8, 4, &lista);
if(Vazia(&lista))
{
puts("Lista Vazia");
getchar();
}
else
{
puts("Lista contem itens");
getchar();
}
Imprime(&lista);
Remove_Elem(10, &lista);
Imprime(&lista);
}
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
Acabei de formatar meu ssd e deu erro (3)
Desempenho abaixo do esperado - travadas e congelamento do sistema ope... (5)
Bash ao invés de Fish no CachyOS (1)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta