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개의 댓글

관련 채용 정보