Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
Tags
- 미라클모닝
- unreal
- C++
- 구조체
- dfs
- 얌얌코딩
- 자료구조
- permutation
- 개발자
- 백준
- 게임프로그래밍
- 게임개발
- 내가해냄
- 코딩테스트
- 재귀함수
- UE5
- 탐색기법
- 개발
- 프로그래밍
- TPS
- 커스텀로그
- 코딩
- 오늘의에러
- fstring
- 구조체포인터
- 언리얼
- 연산자오버로딩
- c++자료구조
- 링크드리스트
- 언리얼로그
Archives
- Today
- Total
All is well
[YYBASIC0302/얌얌코딩] 구조체 포인터 연결하기 본문
구조체 포인터를 이용한 노드 연결
- `Node`라는 구조체를 사용하여 각 노드가 하나의 데이터와 다음 노드의 주소를 갖도록 연결해 연결 리스트 구조를 완성해보았습니다.
- 노드를 연결하려면 노드 형 포인터 타입의 변수를 만들어 노드 간의 주소를 연결해 주어야 합니다.
구조체 포인터를 통한 링크드 리스트 구현
// YYBASIC03_02
#include <iostream>
using namespace std;
int main(void)
{
/* 연결 리스트(Linked List) 노드 구조체 정의 */
struct Node
{
int data;
Node* next; // 다음 노드를 가리키는 포인터
};
// 연결 리스트 노드 선언 및 초기화
Node* head; // 리스트의 첫 번째 노드를 가리킬 포인터
Node n1, n2, n3;
// 노드 연결 (연결 리스트 구성)
head = &n1;
n1.next = &n2;
n2.next = &n3;
n3.next = nullptr; // 마지막 노드는 nullptr을 가리켜야 함
// 각 노드의 데이터 값 초기화
n1.data = 1;
n2.data = 2;
n3.data = 3;
#pragma region Print Linked List (직접 접근 방식)
cout << "< Print Linked List (직접 접근 방식) >" << endl;
cout << "n1 : " << head->data << endl;
cout << "n2 : " << head->next->data << endl;
cout << "n3 : " << head->next->next->data << endl;
#pragma endregion
#pragma region Print Linked List with while() (순회 방식)
cout << "\n< Print Linked List with while() (순회 방식) >" << endl;
Node* temp = head; // head 값을 변경하지 않도록 임시 포인터 사용
int n = 1;
while (temp != nullptr) // 마지막 노드까지 출력하도록
{
cout << "n" << n++ << " : " << temp->data << endl;
temp = temp->next; // 다음 노드로 이동
}
#pragma endregion
return 0;
}
1. `head` 포인터와 노드 연결
- `head` 포인터는 연결 리스트의 첫 번째 노드를 가리키는 역할을 하며, `n1`을 가리키도록 설정하였습니다.
- `n1.next`에 `n2`의 주소를 저장하고, `n2.next`에 `n3`의 주소를 저장함으로써 각 노드를 연결하여 단순 연결 리스트(Singly Linked List)를 구성하였습니다.
- `n3` 노드의 `nex`t를 `nullptr`로 설정하여 리스트의 마지막 노드임을 명시하였습니다.
- 이를 통해 while 문에서 마지막 노드까지 정상적으로 탐색할 수 있도록 처리하였습니다.
2. Print Linked List (직접 접근 방식)
- 직접 구조체 포인터를 이용하여 연결 리스트의 각 노드에 접근하는 방식을 확인하였습니다.
- `head`를 사용하여 첫 번째 노드부터 `next` 포인터를 따라가며 데이터를 출력하였습니다.
- 이 방식은 노드 개수를 알고 있을 때 유용하지만, 노드 개수가 동적으로 변할 경우 적절하지 않음을 인지해야 합니다.
3. Print Linked List with while() (순회 방식)
- while 문을 사용하여 연결 리스트의 각 노드를 순회하며 출력하는 방식을 구현하였습니다.
- `temp` 포인터를 활용하여 `head`를 변경하지 않고, 리스트의 각 요소를 순차적으로 탐색할 수 있도록 하였습니다.
- `head`를 직접 변경하지 않는 것은 중요한 포인트입니다. `head`가 변하면 리스트의 시작점을 잃어버리기 때문입니다.
- `temp`가 `nullptr`이 될 때까지 반복하여 모든 노드를 출력하도록 하였습니다.
- 각 노드를 출력한 후 `temp = temp->next;`를 수행하여 다음 노드로 이동하도록 하였습니다.
< 실행 결과 >

https://www.youtube.com/watch?v=CZRLEPhYPRM
'C++ > YYBASIC' 카테고리의 다른 글
| [YYBASIC0304/얌얌코딩] AddNode 구현, 링크드리스트 출력 (0) | 2025.03.03 |
|---|---|
| [YYBASIC0303/얌얌코딩] 링크드 리스트 설명, 동적 할당 설명 (0) | 2025.02.16 |
| [YYBASIC0301/얌얌코딩] 포인터 타입변수, 구조체 포인터 (1) | 2025.02.09 |
| [YYBASIC0210,11/얌얌코딩] 재귀 함수 가지치기 1,2 (0) | 2025.02.08 |
| [YYBASIC0209/얌얌코딩] 3차원 배열 (1) | 2025.02.08 |