C++ Linked list(연결 리스트)

Joosi_Cool·2022년 10월 10일
2

C++

목록 보기
16/20
post-thumbnail

Linked list란?


연결리스트란? 각각의 노드 안에 다음 노드와의 연결을 위한 부분을 만들어놓는다. 그 연결 공간을 다음 노드와 연결시킴으로써 여러 노드가 서로 이어질 수 있게 해준다. 이를 위해 next 멤버 변수가 존재하고, 이 next를 가지고 다른 노드를 연결해주는 것이다.

우리는 이중에서도 클래스에서의 연결리스트를 주의깊게 보려한다.
아래 예제코드를 살펴보자

예제코드

클래스 정의 부분

class StudentNode {
public:
	//파놓은 공간을 연결시켜줄 생성자
	StudentNode(const char*, int, StudentNode*);
    //생성자
	StudentNode(const char*, int);
    // 미리 파놓은 부분을 연결시켜줄 멤버 함수
	void setNext(StudentNode*);
    // 연결한 객체를 불러올 get함수
	StudentNode* getNext();
    //멤버 변수 get함수
	const char* getName();
	const int getId();
private:
	const char* name;
	int id;
    //생성자 연결할 부분을 미리 파놓는다.
	StudentNode* next;
};

const int StudentNode::getId() {
	return id;
}
//생성자 => 연결 X
StudentNode::StudentNode(const char* name, int id)
{
	this->name = name;
	this->id = id;
	this->next = NULL;
}

// 생성자 => 연결 O
// 연결 받을 객체를 포인터로 받아와서 연결시켜준다.
StudentNode::StudentNode(const char*, int, StudentNode* next)
{
	this->name = name;
	this->id = id;
    //본인의 next를 받아온 next에 연결
	this->next = next;
}

//이는 위에 연결시켜주는 생성자와 비슷한데, 생성하는 역할은 하지 않는다
//이미 있던 객체를 연결시켜준다.
void StudentNode::setNext(StudentNode* next)
{
	this->next = next;
}

// 본인 객체와 next로 연결되어있는 객체를 불러옴.
StudentNode* StudentNode::getNext() {
	return next;
}

const char* StudentNode::getName() {
	return name;
}

메인 함수 부분(set함수를 통해 연결하는 방법)

int main() {
	//문자형 포인터 배열 생성
	const char* name[3] = { "kim","lee","park" };

	// studentA,B,C객체 생성
	StudentNode studentA(name[0], 1111);
    StudentNode studentB(name[1], 2222);
	StudentNode studentC(name[2], 3333);
    //포인터 연결(setNext함수 사용)
	studentA.setNext(&studentB);
	studentB.setNext(&studentC);

	//첫 포인터를 A로 선택
	StudentNode* temp = &studentA;
	while (true) {
    	//포인터가 가리키는 객체의 Name과 ID 출력
		cout << "Name: " << temp->getName() << " | ID: " << temp->getId() 
        << endl;
		if (temp->getNext() == NULL)break;
		else {
        	//다음 연결 리스트로 이동
			temp = temp->getNext();
		}
	}

	return 0;
}

메인함수 부분(생성자에서 연결)

int main() {


	const char* name[3] = { "kim","lee","park" };
	StudentNode studentA(name[0], 1111);
    //생성자에서 연결시킬 객체 선택
    // B->A
	StudentNode studentB(name[1], 2222, &studentA);
	// C->B
    StudentNode studentC(name[2], 3333, &studentB);


	// C->B->A
	StudentNode* temp = &studentC;
	while (true) {
		cout << "Name: " << temp->getName() << " | ID: " << temp->getId() 
        << endl;
		if (temp->getNext() == NULL)break;
		else {
			temp = temp->getNext();
		}
	}

	return 0;
}

이처럼 연결을 해주는 방법은 대표적으로 두가지이다.

  1. set함수를 만들어서 기존에 있던 객체를 연결 시켜주는 방법
  2. 생성자를 통해 객체를 만들면서 연결 시켜주는 방법
profile
집돌이 FE개발자의 노트

0개의 댓글