Enviado em 31/10/2016 - 10:04h
Pessoal, sera que alguém consegue me dar uma ajuda, tenho que fazer uma lista duplamente encadeada, com ELO.ANTERIOR/ INFO/ ELO.POSTERIOR, no entanto consegui fazer apenas uma lista encadeada simples, sem elo anterior. segue o código.#include <iostream> #include <cstdio> #include <cstdlib> #define TAM 5 //constante #define NC 0 using namespace std; struct lista{ int info; int elo; }; void incializaLista(lista *p); bool listaVazia(lista *p); bool listaCheia(lista *p); void incluir(lista *p, int valor); void mostraLista(lista *p); int acha_indice(lista *p, int valor); int excluir(lista *p, int pos); main() { //declarar variável lista umaLista[TAM]; //incializar a fila incializaLista(umaLista); int menu, temp, x; do { system("cls"); cout << "0 - Sair." << endl; cout << "1 - Incluir." << endl; cout << "2 - Mostrar." << endl; cout << "3 - Excluir." << endl; cout << "Sua escolha: "; cin >> menu; fflush(stdin); switch(menu) { case 0: system("cls"); cout << "Programa encerrado."; getchar(); break; case 1: if(!listaCheia(umaLista)) { cout<< "Digite um valor inteiro: "; cin>> temp; fflush(stdin); incluir(umaLista, temp); } else cout << "Lista cheia."; getchar(); break; case 2: if(listaVazia(umaLista)) cout<<"Lista vazia.\n"; else mostraLista(umaLista); getchar(); break; case 3: if(listaVazia(umaLista)) cout<<"Lista vazia.\n"; else { cout << "Informe o valor a ser excluido: "; cin >> temp; fflush(stdin); x = acha_indice(umaLista, temp); if(x == -1) { cout << "O valor " << temp; cout << "Nao pertence a lista"; } else { excluir(umaLista, x); } } getchar(); break; default : cout << "Opcao invalida."; getchar(); break; } }while(menu != 0); } void incializaLista(lista *p) { int i; p[NC].elo = -1; p[NC].info = -1; for(i = 1; i < (TAM - 1); i++) { p[i].elo = i + 1; } p[i].elo = -1; } bool listaVazia(lista *p) { if((p[NC].info == -1) and (p[NC].elo == -1)) return true; else return false; } bool listaCheia(lista *p) { if(p[p[NC].info].elo == -1) { cout << "Fila cheia."; getchar(); return true; } else return false; } void incluir(lista *p, int valor) { if(!listaCheia(p)) { //faz a inclusao if(listaVazia(p)) { p[1].info = valor; p[NC].info = 1; p[NC].elo = 1; } else { p[p[p[NC].info].elo].info = valor; p[NC].info = p[p[NC].info].elo; } }else cout<<"Lista cheia.\n"; } int acha_indice(lista *p, int valor) { int i; i = p[NC].elo; while(i != -1) { if(valor == p[i].info) return i; if(i == p[NC].info) return -1; i = p[i].elo; } } int excluir(lista *p, int pos) { int temp; if(p[NC].info == p[NC].elo) { //é o único elemento da lista p[NC].info = -1; p[NC].elo = -1; } else if(pos == p[NC].elo) { //se for o primeiro elemento da lista p[NC].elo = p[pos].elo; p[pos].elo = p[p[NC].info].elo; p[p[NC].info].elo = pos; } else if(pos == p[NC].info) { //se for o ultimo elemento da lista temp = p[NC].elo; while(p[temp].elo != pos) { temp = p[temp].elo; } p[NC].info = temp; } else { temp = p[NC].elo; while(p[temp].elo != pos) { temp = p[temp].elo; } p[temp].elo = p[pos].elo; p[pos].elo = p[p[NC].info].elo; p[p[NC].info].elo = pos; } } void mostraLista(lista *p) { int i; i = p[NC].elo; cout << "INICIO : " << p[NC].elo << endl; cout << "FIM : " << p[NC].info << endl; cout << "DISPONIVEL : " << p[p[NC].info].elo << endl; cout << "POS " << " INFO " << " ELO" << endl; cout << "NC " << p[NC].info << " "; cout << p[NC].elo << endl; while(i != -1) { cout << i << " "; cout << p[i].info << " "; cout << p[i].elo << endl; if(i == p[NC].info) break; i = p[i].elo; } }
Enviado em 31/10/2016 - 12:24h
posta o codigo no www.pastebin.com, fica melhor de visualizar!Enviado em 31/10/2016 - 12:43h
Olá, bom dia.$ indent -kr -i8 src.c "(...)all right-thinking people know that (a) K&R are _right_ and (b) K&R are right." - linux/Documentation/CodingStyle - TORVALDS, Linus.
Programa IRPF - Guia de Instalação e Resolução de alguns Problemas
Criando uma Infraestrutura para uma micro Empresa
Criar entrada (menuentry) ISO no Grub
Como gerar qualquer emoji ou símbolo unicode a partir do seu teclado
Instalando o Pi-Hole versão v5.18.4 depois do lançamento da versão v6.0
Instalar o VIM 9.1 no Debian 12
Como saber o range de um IP público?
Muitas dificuldades ao instalar distro Linux em Notebook Sony Vaio PCG-6131L (VPCEA24FM)
Discussão sobre monitoramento da integridade de arquivos (6)
Problema no boot do Linux Mint Cinnamon 22 (4)
Atualização do Google Chrome do Ubuntu [RESOLVIDO] (2)
Instalei Windows 11 e não alterou o Grub do Debian (1)
Jogos baixados na Central de Aplicativos mas que não abrem (0)