리스트가 필요한 이유 - 배열은 한 번 선언하면, 그 크기를 변경할 수 없다. 동적인 상황에 대처가 불가능한 것이다. 그래서 유연하게 크기를 바꿀 수 있는 자료구조인 리스트가 필요하다!
1. 링크드 리스트를 소개합니다.
리스트 내의 각 요소는 노드(Node)라고 한다. 리스트는 이 노드를 연결해서 만든 자료구조이다.
노드는 데이터 영역과, 다음 노드에 대한 포인터로 이루어져있다.
회색 부분은 데이터를 담는 부분, 파란 색 부분은 다음 노드의 주소를 가리키는 포인터를 담는 부분이다. 저렇게 주렁주렁 엮는 것이 바로 링크드 리스트인 것이다.
리스트의 첫 번째 노트는 '헤드'라고 하고 마지막 노드는 '테일'이라고 한다.
2. C언어로 표현된 링크드 리스트의 노드
/* 링크드 리스트의 노드 */
typedef struct Node
{
int Data; // 데이터 필드
struct Node *NextNode; // 다음 노드를 가리키는 포인터
} Node;
위는 데이터의 자료형이 int형인 것만 표현했으나, 필요에 의해 언제든지 바뀔 수 있다. typedef는 추후 선언이 좀 편하게 하기 위해 사용한 것이다.
3. 링크드 리스트의 주요 연산
총 다섯 가지이다. 노드 생성/소멸, 노드 추가, 노드 탐색, 노드 삭제, 노드 삽입 이다.
먼저, 노드 생성/소멸이다.
/* 노드 생성 */
Node *SLL_CreateNode(ElementType NewData)
{
Node *NewNode = (Node*)malloc(sizeof(Node)); //node의 용량만큼 malloc한 다음, Node*의 자료형으로 바꿔준다.
NewNode -> Data = NewData; //데이터 저장
NewNode -> NextNode = NULL; //다음 노드에 대한 포인터는 NULL로 초기화
return NewNode; //할당한 노드의 주소 반환
}
/* 노드 소멸 */
void SLL_DestroyNode(Node *Node)
{
free(Node); //노드의 주소를 반환함으로써 노드를 소멸시킨다.
}
다음으로 노드의 추가이다.
'자료구조-알고리즘 공부' 카테고리의 다른 글
[구름LEVEL]시험성적 평균과 등급 구하기 (0) | 2021.09.08 |
---|---|
[구름LEVEL]비트연산 기본1 (0) | 2021.09.07 |
[구름LEVEL] 소수 판별 (0) | 2021.09.06 |
[구름LEVEL]계산기 (0) | 2021.09.06 |