I need to stop queuing when the user types a negative number (-1), check if the queue is empty so that when typing the negative number does not give any error and the main, I need the user to tell what specific value he
#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;
cout << "Quantos valores deseja enfileirar? ";
cin >> n;
cout << endl;
while (n>0) {
cout << "Digite um numero inteiro: ";
cin >> dado;
inserir(fila, dado);
n--;
}
cout << endl;
cout << "==== Imprimir todos os dados ====" << endl;
// Agora mostra o reultado...
while (remover(fila, dado) == 0) {
cout << dado << endl;
};
cout << endl;
cout << "===== Remover um unico valor ====" << endl;
cout << endl;
cout << "Qual valor deseja desenfileirar? " << 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;
}