Stop C++ Dynamic Queue with negative value

Asked

Viewed 28 times

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.

  • 2

    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.

No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.