2
I need to stop queuing when the user enters a negative number (-1) and print out all the entered values, how do I do this?
#include <iostream>
using namespace std;
// Define a Estrutura Nó
struct No {
int valor; // Valor armazenado
No * prox; // Ponteiro para próximo elemento da lista
};
// Define a Fila
struct Fila {
No * ini; // Início da fila
No * fim; // Fim da fila
};
// Insere valor da lista
int inserir(Fila &f, int valor);
// Remove elemento da lista
int remover(Fila &f, int &valor);
int main(void) {
// Declara e inicializa fila
Fila fila;
fila.ini = fila.fim = NULL;
// Variável para armazenar dado digitado
int dado;
int n;
while (n>0) {
cout << "Digite um numero inteiro: ";
cin >> dado;
inserir(fila, dado);
n--;
}
// Agora mostra o reultado...
while (remover(fila, dado) == 0) {
cout << dado << endl;
};
}
// Insere um valor na fila
int inserir(Fila &f, int valor) {
No * tmp; // Ponteiro para armazenar endereço de nó temporariamente
// Cria nó
tmp = new No;
// Configura nó...
tmp->valor = valor; // Valor do nó
tmp->prox = NULL; // Sempre insere no fim da fila
// Se lista vazia, insere primeiro elemento
if (f.ini == NULL) {
f.ini = f.fim = tmp; // O primeiro elemento é o primeiro e o último
}
// Se lista não está vazia, atualiza lista...
else {
f.fim->prox = tmp; // Pendura novo elemento no antigo fim
f.fim = tmp; // Indica que novo elemento é o novo fim
}
// Retorna que inserção ocorreu com sucesso
return 0;
}
// Remove um valor da fila
int remover(Fila &f, int &valor) {
No * tmp; // Ponteiro temporário
// Se a lista está vazia, vai embora
if (f.ini == NULL) return 1;
// Armazena valor do elemento sendo removido
valor = f.ini->valor;
// Armazena endereço de elemento a ser removido
tmp = f.ini;
// Aponta inicio da lista para segundo elemento (novo primeiro!)
f.ini = f.ini->prox;
// Remove o primeiro elemento da lista
delete tmp;
// Boa prática... se a lista ficou vazia, atualiza último ponteiro
if (f.ini == NULL) f.fim = NULL;
// Retorna novo início da lista
return 0;
}
@bigown is the same code yes, I’m still working on it, as you suggested, I took the counter/iteration limiter.
– Paulo Roberto
Edit there instead of opening another question. Because the question is the same and only changed one detail and still no one answered. Anyway see http://answall.com/help/mcve. To know when to stop doesn’t have to be a queue, just be a bunch of data, where this data goes doesn’t matter. The problem you’re asking has nothing to do with dynamic queuing.
– Maniero