저는 Python과 같은 해석 언어를 작성하려고합니다. 따라서 함수와 변수의 '주소'를 저장하기위한 List 클래스가 필요합니다. 나는 List 클래스를 구현하기위한 스택 클래스를 구현하고 있습니다 :Stack 클래스를 사용하여 List 클래스 구현하기
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;
};
그리고 이것은 내가 구현하고자하는 클래스입니다 :
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
};
내가 사전처럼 파이썬을 구현하기위한이 목록 클래스를 사용합니다. Variable 클래스에는 UIntegerP 유형이 필요합니다. 이 두 함수를 어떻게 구현할 수 있습니까?
목록은 기본 데이터 구조와 일반 데이터 구조 중 하나 인 매우 단순한 데이터 구조입니다. 실제로 목록을 사용하여 다른 데이터 구조 (스택과 같은)를 빌드하는 것이 일반적입니다. 스택이 목록의 기본으로 나쁜 선택 인 다른 이유도 있습니다. 예를 들어 실제로 스택을 반복 할 수 없습니다. 리스트를 원한다면 [표준 라이브러리'std :: list' 클래스] (http://en.cppreference.com/w/cpp/container/list)를 사용하지 않을까요? 바퀴를 재발 명하지 마십시오. –
나는 바퀴를 재발 명하려고하기 때문에. –
그럼 적어도 제대로하려고 노력하십시오. :)'next'와'prev' 포인터로 노드 클래스를 만들고 이것을'List' 클래스의 기초로 사용하십시오. 'List' 클래스에는 노드 목록의'head'와'tail'에 대한 포인터가 있습니다. –