본문 바로가기

자료구조

연결리스트 #2 리스트 추가기능

연결리스트 #1에서 구현한 리스트에서 추가하고 싶은 위치에 리스트를 추가해보자.

 

예시

리스트에서 내가 원하는 index에 추가를 하고자 할려면 각 리스트 구조체마다 index number가 필요하다

 

따라서 다음과 같이 구조체에 index_num을 추가한다.

 

typedef struct __LinkedList
{
	char data[50];
	int index_num;
	struct __LinkedList *next;

}LinkedList;

 

또한 기존에 List를 Malloc으로 생성 후 RecvData를 저장 했던 작업에서 index_num역시 추가해준다.

	{
			BODY = (LinkedList*) malloc(sizeof(LinkedList));
			strcpy(BODY->data, RecvData);
			BODY->index_num = target_num++;
			CurPoint->next = BODY;
			CurPoint = BODY;
			printf("Struct number: %d \r\n", CurPoint->index_num);
		}

 

다음은 insert를 어떻게 넣을까에 대한 명령어다.

 

그냥 insert라는 String이 입력되면 insert가 되도록 만들었다.

		if (HEAD == NULL)
		{
			HEAD = (LinkedList*) malloc(sizeof(LinkedList));
			HEAD->index_num = 1;
			strcpy(HEAD->data, RecvData);
			CurPoint = HEAD;
			printf("Struct number: %d \r\n", CurPoint->index_num);
		}
		else if (strncmp((char*) RecvData, "insert", 6) == 0)

 

Insert 들어가기 전 기존에 LinkedList 포인터들이 나타내는 위치를 확인해 보자.

 

NextPoint는 Free 할 때 사용하므로 현재 그림에는 나타나있지 않다.

 

Insert를 2번 Index에 추가한다고 했을 때 순서는 다음과 같다.

 

1. 2번 Index에 추가 할 것이므로 1번 Index List의 구조체와 2번 Index List의 구조체를 알고 있어야한다.

(1번 Index는 CurPoint, 2번 Index는 NextPoint)

2. BODY를 생성한다.

 

3. 연결한다.

4. Index Number를 정리한다.

 

5. CurPoint를 원상복귀 한다.

 

 

실행 화면#1

Data를 1 ~5 저장 후 2번과 5번에 goodjob이라는 Data를 가진 List를 추가

 

실행 화면#2

'자료구조' 카테고리의 다른 글

Stack - 중위표기법 (괄호 x)  (0) 2020.11.10
STACK 구현  (0) 2020.10.22
연결 리스트 #1 구현  (0) 2020.10.15
배열 리스트  (0) 2020.10.10
재귀알고리즘(하노이타워)  (0) 2020.10.03