Ich versuche, eine interpretierte Programmiersprache wie Python zu schreiben, also brauche ich eine List-Klasse zum Speichern von 'Adresse von' Funktionen und Variablen. Ich bin für die Umsetzung List-Klasse Stack-Klasse implementiert:Implementieren von List-Klasse mit der Verwendung von Stack-Klasse
typedef unsigned int UIntegerP; //This type for storing addresses
#define Free 0x0
template <typename T> class Stack{
public:
unsigned long UsedBSize; // You can use that like End Of Stack (EOS)
Stack(void){
this->BSize = 0; this->UsedBSize = 0;
this->Buffer = new T;
}
~Stack(void){
delete this->Buffer;
}
inline void Push(T Variable){
if(this->UsedBSize == this->BSize){
this->BSize++;
} this->Buffer[this->UsedBSize] = Variable; this->UsedBSize++;
}
inline T Pop(bool IsProtected = false){
if(IsProtected){
return this->Buffer[this->UsedBSize];
}else{
this->UsedBSize--; T Element = this->Buffer[this->UsedBSize]; this->Buffer[this->UsedBSize] = Free;
return Element;
}
}
private:
T *Buffer;
unsigned long BSize;
};
Und das ist die Klasse i implementieren möchten:
class List{
private:
Stack<UIntegerP> *stack = new Stack<UIntegerP>; //A stack for storing variable addresses
public:
~List(void){
delete this->stack;
}
List(Stack<UIntegerP> Elements){
while(Elements.UsedBSize != 0){
this->stack->Push(Elements.Pop());
}
}
List(Stack<UIntegerP> *Elements){
while(Elements->UsedBSize != 0){
this->stack->Push(Elements->Pop());
}
}
UIntegerP Get(unsigned long Size); //Get Address with Index number
UIntegerP Set(unsigned long Size, UIntegerP Address); //Set Address with Index number
};
Ich werde diese List-Klasse verwenden, um wie Wörterbücher Python implementiert. UIntegerP-Typ ist für die Variablenklasse erforderlich. Wie kann ich diese zwei Funktionen implementieren?
Eine Liste ist eine sehr einfache Datenstruktur, eine der grundlegenden und generischen Datenstrukturen. Tatsächlich ist es üblich, eine andere Datenstruktur (wie einen Stapel) aus einer Liste zu erstellen. Es gibt auch andere Gründe, warum ein Stack eine schlechte Wahl für die Basis einer Liste ist, zum Beispiel kann ein Stack nicht wirklich iteriert werden. Wenn Sie eine Liste wünschen, warum nicht die Klasse [Standardbibliothek 'std :: list'] (http://en.cppreference.com/w/cpp/container/list) verwenden? Erfinde das Rad nicht neu. –
Weil ich versuche, das Rad neu zu erfinden. –
Dann versuchen Sie zumindest, es richtig zu machen. :) Erstellen Sie eine Knotenklasse mit 'next' und' prev' Zeigern und verwenden Sie diese als Grundlage für die 'List' Klasse. Dann in der "List" -Klasse einen Zeiger auf den "Kopf" und "Schwanz" der Liste der Knoten. –