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); }
Resolver problemas de Internet
Como compartilhar a tela do Ubuntu com uma Smart TV (LG, Samsung, etc.)
Descritores de Arquivos e Swappiness
Solução rápida para o problema do Network Manager conectar mas não navegar
Como instalar no Linux Jogos da Steam só para Windows
Instalando o Team Viewer no Debian Trixie - problema no Policykit
Como rodo essa suinaria? [RESOLVIDO] (6)
Problemas latentes de performance no Ubuntu 25.04 (1)