문자열의 단일 링크드 리스트의 노드
class StringNode {
private:
string elem; // 원소값
StringNode* next; // 리스트의 다음 항목
friend class StringLinkedList; // StringLinkedList에 접근
};
- 생성자와 소멸자, 삽입과 삭제를 위한 함수 등을 포함한 많은 멤버 함수를 제공!
- private 데이터는 리스트의 헤드 노드를 가리키는 포인터로 구성되어 있음.
문자열의 단일 링크드 리스트를 정의하는 클래스
class StringLinkedList {
public:
StringLinkedList(); // 빈 리스트 생성자
~StringLinkedList(); // 소멸자
bool empty() const; // 리스트가 비어있는지?
const string& front() const; // 이전 원소를 얻음
void addFront(const string& e); // 리스트의 앞에서 추가
void removeFront(); // 앞의 리스트 항목을 삭제한다
private:
StringNode* head; // 리스트의 헤드를 가리키는 포인터
};
- 리스트 생성자는 head 포인터를 NULL로 만들어서 비어있는 리스트를 만든다.
- 소멸자는 리스트에 있는 원소들을 반복적으로 삭제
- 리스트가 비었는지 테스트하기 위해선 head 포인터가 NULL 인지만 확인하면 됨.
StringLinkedList 클래스의 멤버함수들
StringLinkedList::StringLinkedList()
: head(NULL){}
StringLinkedList::~StringLinkedList() {
while (!empty()) removeFront();
}
bool StringLinkedList::empty() const {
return head == NULL;
}
const string& StringLinkedList::front() const {
return head->elem;
}
단일 링크드 리스트의 앞에서 삽입하기
void StringLinkedList::addFront(const string& e) {
StringNode* v = new StringNode; // 새로운 노드 생성
v->elem = e; // 데이터를 저장
v->next = head; // 지금 head는 v의 뒤에 있다.
head = v; // v가 이제 head가 됨.
}