2017-09-21 1 views
1

Ich habe also eine Zuweisung, wo ich eine doppelt verknüpfte Liste erstellen und dann eine Stapel- und Queue-Klasse erstellen und von der Klasse linkedlist erben muss, um eine RPN calculator zu erstellen. Bisher habe ich meine doppelt verlinkte Klasse und die andere Klasse erstellt. Ich habe jedoch Probleme zu verstehen, wie ich die verknüpfte List-Klasse mit dem Stapel und der Warteschlange erben und verwenden werde. Ich werde das liefern, was ich bisher habe.Verknüpfen Doppelt verkettete Liste mit Stack- und Queue-Klassen in C++

Ich bin zum Nachhilfeunterricht gegangen und hatte nicht viel Hilfe, also dachte ich, ich würde nach etwas extra Hilfe suchen, ich möchte nicht, dass Hausaufgaben für mich gemacht werden, sondern nur in die richtige Richtung.

Stack.h

using std::iterator; 
using std::vector; 
using std::string; 

template<class T> 
class Stack : public vector<T> 
{ 
private: 
    T getElement(bool erase); 
    typename std::vector<T> ::iterator pEnd; 
    T top; 

public: 
    Stack(); 
    T pop(); 
    T peek(); 
    void push(T elem); 
}; 



template<class T> 
Stack<T>::Stack() 
{ 

} 

template<class T> 
void Stack<T>::push(T elem) 
{ 
    this->push_back(elem); 

} 

template<class T> 
T Stack<T>::peek() 
{ 
    return this->getElement(false); 
} 

template<class T> 
T Stack<T>::pop() 
{ 
    return this->getElement(true); 
} 

template<class T> 
T Stack<T>::getElement(bool erase) 
{ 
    this->pEnd = this->end() - 1; 
    T tmp; 
    if (this->size() > 0) 
    { 
     tmp = *this->pEnd; 
     if (erase) { 
      this->erase(pEnd); 
     } 
    } 

    return tmp; 

} 

Queue.h

using namespace std; 

class Queue 
{ 

private: 
    int items[MAXQUEUE]; 
    int head; 
    int tail; 

public: 
    Queue(); 
    bool isEmpty(); 
    bool isFull(); 
    bool enqueue(int item); 
    int dequeue(); 
    int peek(); 
}; 



Queue::Queue() 
    :head(QEMPTY), tail(QEMPTY) 
{ 

} 

bool Queue::isEmpty() 
{ 
    return this->head == this->tail; 

} 

bool Queue::isFull() 
{ 

    return this->tail == MAXQUEUE; 
} 

bool Queue::enqueue(int item) 
{ 
    if (this->isFull()) 
     return false; 

    this->items[this->tail] = item; 
    tail = (tail + 1) % MAXQUEUE; 
    return true; 

} 

int Queue::dequeue() 
{ 
    if (this->isEmpty()) 
     return EMPTY; 

    int item = this->items[head]; 
    this->head = (this->head + 1) % MAXQUEUE; 
    return item; 
} 

int Queue::peek() { 

    return this->tail; 
} 

doublylinkedlist.h

using std::iterator; 
using std::vector; 
using std::string; 



/*START OF NODE CLASS*/ 
/*---------------------------------------------*/ 
template<class T> 
struct Node 
{ 

    T Data; 
    T Search; 
    T value; 
    Node<T>*Next; 
    Node<T>*Prev; 
}; 


template<class T> 
class LinkedList 
{ 
private: 
    Node<T> *Head; 
public: 
    LinkedList(); 
    void addNode(T Data); 
    void deleteNode(T Search); 
    void insert(T Search, T value); 
    void printListBackwards(); 
    void printListForwards(); 
}; 
template<class T> 
LinkedList<T>::LinkedList() 
{ 
    this->Head = NULL; 

} 

template<class T> 
void LinkedList<T>::addNode(T data) 
{ 

    if (Head == NULL) 
    { 
     Head = new Node<T>; 
     Head->Data = data; 
     Head->Next = NULL; 
     Head->Prev = NULL; 

    } 
    else 
    { 
     Node<T>*p = this->Head; 


     while (p->Next != NULL) 

      p = p->Next; 

     Node<T>*n = new Node<T>; 
     n->Data = data; 
     n->Next = NULL; 
     p->Next = n; 
     n->Prev = p; 
    } 


} 

template<class T> 
void LinkedList<T>::insert(T Search, T value) 
{ 

    Node *p = Head; 
    while (p->Data != Search) 
    { 
     p = p->Next; 
    } 

    Node *n = new Node; 
    n->Data = value; 
    n->Next = p->Next; 
    p->Next = n; 

} 

template<class T> 
void LinkedList<T>::deleteNode(T Search) 
{ 
    Node *p = Head; 
    while (p->Next->Data != Search) 
    { 
     p = p->Next; 
    } 

    Node *delPtr = p->Next; 
    p->Next = p->Next->Next; 

    delete delPtr; 
} 

template<class T> 
void LinkedList<T>::printListBackwards() 
{ 
    Node<T> *p = Head; 

    while (p->Next != NULL) 
    { 

     p = p->Next; 
    } 
    while (p != NULL) 
    { 
     cout << p->Data<< endl; 
     p = p->Prev; 
    } 
} 

template<class T> 
void LinkedList<T>::printListForwards() 
{ 

    Node<T> *p = Head; 
    while (p != NULL) 
    { 
     cout << p->Data << endl; 
     p = p->Next; 
    } 
} 
+0

Was ist Ihre Frage? Wir können nicht antworten, ohne zu wissen, wo genau Sie nicht verstehen –

+0

@PasserBy Entschuldigung, aber ich soll die erben von der verknüpften Liste in meinem Stapel und Warteschlange Klassen, um den Stapel und die Warteschlange hinzufügen, aber ich bin nicht sicher, wie es geht. –

Antwort

0

Eine doppelt verkettete Liste Anzeige sein kann am Kopf oder Schwanz, und am Schwanz entfernt.

Ein Stapel drückt an einem Ende (der Kopf?) Und knallt am selben Ende (der Kopf).

Eine Warteschlange wird an einem Ende (der Schwanz) gedrückt und knallt am anderen Ende (der Kopf).

Verwandte Themen