EX 01

Run Settings
LanguageC
Language Version
Run Command
/* Faça um programa para gerenciar uma lista dinâmica duplamente enca- deada circular. O usuário terá a opção de inserir quantos nós (elementos) desejar e imprimir sequencialmente a lista em qualquer ordem. O pro- grama também deverá permitir ao usuário eliminar nós pelo valor digitado e inserir nós na posição que o usuário desejar. */ #include <stdio.h> #include <stdlib.h> typedef int bool; #define true 1 #define false 0 typedef struct estru { int num, posi; struct estru *ant; struct estru *prox; } lista; lista *ini=NULL, *p, *q=NULL, *r; /* renumera a posicao da lista */ void reordena() { p = ini; int i = 1; do { p->posi = i; i++; p = p->prox; } while(p != ini); } /* Procura a posicao a ser a inicial a partir dai imprime os valores */ int print(int val) { p = ini; while(p->posi != val) { if(p->prox == ini) { printf("Posicao nao encontrada."); return 0; } p = p->prox; } do { printf("posicao %d, valor do no: %d\n", p->posi, p->num); p = p->prox; }while(p->posi != val); } /* inicia a lista com os valores do usuario */ void cria(int val, int posicao) { p = malloc(sizeof(lista)); p->num = val; p->posi = posicao; if(ini==NULL) ini = p; else { p->ant = q; q->prox = p; } p->prox = ini; ini->ant = p; q = p; } /* localiza a posicao onde sera inserido o novo ponteiro e posiciona-o na lista */ void insere(int val, int posicao) { q = malloc(sizeof(lista)); q->num = val; q->posi = posicao; p = ini; do { if(p->posi == posicao) { r = p->ant; r->prox = q; q->prox = p; q->ant = p->ant; p->ant = q; } p = p->prox; } while(p != ini); reordena(); } /* localiza o valores a serem removidos e remove-os */ void popn(int val) { bool naoExiste = true; p = ini; do { q = p->prox; if(p->num == val) { printf("posicao %d, valor %d removida.\n", p->posi, p->num); p = p->ant; p->prox = q; q->ant = p; naoExiste = false; } p = p->prox; } while(p != ini); if(naoExiste) printf("valor %d não existe na lista.", val); printf("\n"); reordena(); } int main() { int num, i=1; // recebe valores while(1) { scanf("%d", &num); if(num == -1) break; printf("posicao %d, valor do no: %d\n", i, num); cria(num, i); i++; } printf("\n"); scanf("%d", &num); printf("valor inicial para imprimir %d\n\n", num); print(num); scanf("%d", &num); printf("\nvalor a ser removido %d\n\n", num); popn(num); print(1); scanf("%d %d", &num, &i); printf("\nvalor %d sera adicionado na posicao %d\n\n", num, i); insere(num, i); print(1); free(ini); return 0; }
Editor Settings
Theme
Key bindings
Full width
Lines