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);
}
Aprenda a Gerenciar Permissões de Arquivos no Linux
Como transformar um áudio em vídeo com efeito de forma de onda (wave form)
Como aprovar Pull Requests em seu repositório Github via linha de comando
Dando - teoricamente - um gás no Gnome-Shell do Arch Linux
Como instalar o Google Cloud CLI no Ubuntu/Debian
Mantenha seu Sistema Leve e Rápido com a Limpeza do APT!
Procurando vídeos de YouTube pelo terminal e assistindo via mpv (2025)
Iinstalar o Scanner Kodak i940 no Linux Mint 19/20? (1)
Alguém que utilize o Warsaw do BB no Ubuntu 24.04 (4)
estou com problemas aqui no manjaro. (3)
warsaw parou de funcionar após atualização do sistema (solução) (7)