Usunięcie danego elementu z kolejki.

0

Witam!
Czy jest możliwość usunięcia danego elementu z kolejki, który nie znajduje sie na początku ani na końcu?
Dokładnie chce wyzbyć się parzystych.

Kombinuje coś takiego:

void Queue::tururu()
{
    Node*walker=head;
 
    while(walker!=NULL)
    {
 
        if(walker->next!=NULL && walker->dane.getNumber()%2==0)
        {
 
            Node*killer=walker;
            walker=killer->next;
            delete killer;
        }
 
        walker=walker->next;
    }
} 

Aczkolwiek to nie działa, działa mi jeżeli killer będzie następnym elementem

Node*killer=walker->next; 

ale wtedy pomijam pierwszy element.

Pozdrawiam

0

Nie znam Twojej kolejki, jeśli Ty ją pisałeś to Ty powinieneś wiedzieć. W kontenerach standardowych masz idiom erase-remove.

0

Robione tak jak mnie uczyli na uczelni, więc tak:
Plik h:

#include <iostream>
#include <stdexcept>
#include <cstdlib>
using namespace std;

struct Id
{
    int number;
public:
    Id(int _number=0)
    {
        number=_number;
    }
    int getNumber()const;
    void setNumber(int n);
    bool operator<(Id i)const;
};

struct Queue
{
    struct Node
    {
        Id dane;
        Node*next;
        Node(Id _dane,Node*_next)
        {
            dane=_dane;
            next=_next;
        }
    };
    Node *head;
public:
    Queue();
    void print()const;
    void push(Id _dane);
    void pop();
    void transfer();
    void compres();
    };
 

Plik cpp:

 #include <iostream>
#include "id.h"
using namespace std;

Queue::Queue()
{
    head=NULL;
}

int Id::getNumber()const
{
    return number;
}

void Id::setNumber(int n)
{
    number=n;
}

bool Id::operator<(Id i)const
{
    if(number<i.number) return true;
    else return false;
}

void Queue::print()const //wyswietlanie
{
    Node*walker=head;
    while(walker!=NULL)
    {
        cout<<"|"<<walker->dane.getNumber()<<"|"<<endl;
        walker=walker->next;
    }
}

void Queue::pop() //usuwanie elementu pierwszego kolejki
{
    Node*killer=head;
    if(killer==NULL) throw length_error("ERROR");
    head=killer->next;
    delete killer;
}

void Queue::push(Id _dane)
{
    Node*succ=head;
    Node*pred=NULL;
    while(succ!=NULL)//&& succ->dane<_dane)
    {
        pred=succ;
        succ=succ->next;
    }
    Node*nowy=new Node(_dane,succ);
    if(pred!=NULL) pred->next=nowy;
    else head=nowy;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1