단일 연결리스트는 인덱스를 이용한 참조는 힘들지만 데이터 삽입과 제거가 용이하다. 다음과 같은 구조를 가지고 있다.

1. 먼저 typedef struct를 이용해 구조체를 만들어 줌
2. 구조체에는 int/float/double/char 등등 의 데이터 부분과 Node 포인터인 next 가 만들어져야 한다.
3. Alias는 Node로 설정.
4. 전역에서 head 노드 포인터 변수를 만들어 준다. head는 자료의 시작지점이라고 생각하면 된다.
- 전역에서 만들어주는 이유는 추후 함수형으로 프로그래밍을 할 때, 함수로 찾기 편하게 하기 위해서이다.
5. main 함수에서 head를 동적할당 시켜준다..
6. node1을 동적할당 합니다. node1의 데이터에 들어가는 값은 1로 한다. node2도 동적할당 이후 데이터 값을 2로 한다.
7. head의 next 값을 node1, node1의 next를 node2, node2의 next값을 NULL로 설정한다.
8. (중요한 부분!) 연결리스트를 하나씩 출력하기 위해 cur (current의 약자) 포인터를 head의 next로 할당한다. 이렇게 하면 연결리스트의 가장 첫 부분부터 참조할 수 있다.
cur가 NULL이 되기 전까지 cur->data 를 출력한다. 이는 현재 cur 포인터가 머물고 있는 노드의 데이터를 볼 수 있게 해준다. 이후 cur변수를 cur->next (cur->next 는 참조한 node의 next 주소값과 같음) 로 할당한다. 이로 인해 다음 원소가 존재하는 주소값으로 옮겨갈 수 있는것이다.
이렇게 하드코딩 방식으로 메인 함수에 하나씩 써서 단일 연결리스트를 구현해 보았다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int data;
struct Node* next;
} Node;
Node* head;
int main(void) {
head = (Node*)malloc(sizeof(Node));
Node *node1 = (Node*)malloc(sizeof(Node));
node1 -> data = 1;
Node* node2 = (Node*)malloc(sizeof(Node));
node2->data = 2;
head->next = node1;
node1->next = node2;
node2->next = NULL; //끝 노드는 무조건 NULL
Node* cur = head->next;
//노드를 하나씩 옮겨가며
while (cur != NULL) {
printf("%d ", cur->data);
cur = cur->next;
}
printf("\n");
system("pause");
return 0;
}
'Algorithms > Theory' 카테고리의 다른 글
[Data Structures][0]Array (0) | 2019.08.23 |
---|