Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Vektor in Queue(Klasse)

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
06.12.2014, 14:39 Uhr
~clerner
Gast


Hallo, ich habe folgende Aufgabe:

Modifizieren Sie die aus der Vorlesung bekannte Klasse Queue, indem Sie zum Speichern der Elemente einen Vektor vewenden. Wenn man mit einer leeren Queue beginnt, soll eine beliebige Folge von k push back- und pop front-Operationen nur Laufzeit O(k) haben. Wenn n dabei die maximale Zahl von Elementen ist, die sich gleichzeitig in der Queue befinden, soll der Speicherbedarf außerdem nur O(n) groß sein.


Leider habe ich keine Ahnung, was ich machen soll. Es wäre schön, wenn mir hier jemand obiges erklären könnte (mein wissen beschränkt sich dabei auf wenige Stunden gelerntes C++). Hier ist die Klasse, von der oben die Rede ist:


C++:
// queue.h (Queue)

template<typename T> class Queue {  // T is a type to be specified by user
public:
    ~Queue()                        // destructor
    {
        clear();
    }

    bool is_empty()
    {
        return _front == nullptr;
    }

    void clear()
    {
        while (not is_empty()) {
            pop_front();
        }
    }

    void push_back(const T &object)   // insert object at end of queue
    {
        Item* cur = new Item(object); // get new memory for Item at address cur,
                                      // initialize with object and nullptr
        if (is_empty()) {
            _front = cur;
        }
        else {
            _back->_next = cur;     // p->n is abbreviation for (*p).n
        }
        _back = cur;
    }

    T pop_front()                   // delete and return first object of queue
    {                               // ATTENTION: queue must not be empty!
        Item* cur = _front;
        if (_back == _front) {
            _front = nullptr;
            _back  = nullptr;
        }
        else {
            _front = _front->_next;
        }
        T object = cur->_object;
        delete cur;                 // free memory for 1 Item at address cur
        return object;
    }

private:
    struct Item {                           // struct is a class where by
        Item(T object) : _object(object) {} // default everything is public

        T _object;
        Item* _next = nullptr;     // pointer to the next Item (or nullptr)
    };

    Item* _front = nullptr;        // _front and _back are pointers to
    Item* _back = nullptr;         // variables of type Item, or the
};                                 // nullptr if queue is empty
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
06.12.2014, 14:50 Uhr
~clerner
Gast


Meine Vermutung: In der dritten Zeile irgendwie "typename" durch "vector" ersetzen, und dann die beiden Funktionen in der Klasse "pushback" und "popfront" in geeigneter Weise anpassen. Allerdings weiß ich nicht, wie das genauer geschehen soll.

Vielen Dank im Voraus
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: