-
Linked List - 여러 가지 연산C 자료구조/2. 연결 리스트 2021. 3. 24. 11:06
아래의 포스트에는 기본적인 연산만을 작업했다.
여기서는 데이터의 중복 삭제, 데이터의 중간 삽입 등에 대한 연산에 대해 구현할 것이다.
여기서 할 작업은 아래의 내용과는 이어지지 않는다.
designatedroom87.tistory.com/42?category=868808
아래는 노드 구초체와 head 와 노드의 개수를 전역 변수로 두었다.
전역 변수로 둔 이유는 약간 문제를 쉽게 풀기 위해서이다.
head를 지역변수로 두게 되면, 이중 포인터를 써야해서 전역변수로 두었다.
1. 아래의 함수는 일반적인 연결 리스트의 데이터 저장함수이다.
노드의 맨 미자막에 데이터를 저장하는 함수이다.
2. 데이터를 중간에 삽입하는 함수이다.
연결 리스트의 노드들 사이에 데이터를 저장하는 역할을 한다.
즉, 위치를 1로 선택하면 첫 번째 노드로 연결을 하겠다는 의미로 노드의 탐색을 할 필요없이
바로 head와 노드를 연결하면 된다.
이 함수에서 한 가지 에외처리를 하지 못했는데,
예외처리를 해야할 내용은 만약 노드의 개수가 4개라고 하였을 시에 위치를 7로 선택했을 경우이다.
즉, 위치값이 노드의 개수보다 많을 경우에 대해 처리가 필요하다.
3. 데이터가 저장될 때, 오름차순 정렬 방식에 따라 저장하는 함수이다.
이 기능을 구한혀기 위해 보조 함수를 하나 만들어야 한다.
연결리스트에 만약 데이터가 아래와 같이 들어있다고 하자.
1 3 4
그리고 나서 이 함수를 통해 데이터를 2를 저장하고 출력하면 아래와 같다.
1 2 3 4
즉, 위의 함수를 이용해서 데이터를 저장하면, head를 중심으로 데이터를 탐색해서 삽입할 공간을 찾아 저장하면 된다.
데이터의 삽입은 head의 위치에서 이뤄져야 하는지 아닌지를 기준으로 한다.
4. 데이터 전체를 출력 함수이다.
설명이 필요 없을 것 같다.
5. 중복 데이터를 제외한 검색 삭제 함수이다.
데이터의 삭제 시에 2가지 경우로 나뉘서 진행해야 한다. 지워야할 노드가 head이냐 아니냐이다.
6. 중복 데이터를 포함한 검색 삭제 함수이다.
연결 리스트에 중복된 데이터가 존재할 가능성이 있으므로, 탐색은 전체 노드를 대상으로 진행해야 한다.
데이터의 삭제 시에 2가지 경우로 나뉘서 진행해야 한다. 지워야할 노드가 head이냐 아니냐이다.
7. 전체 노드를 삭제하는 함수이다.
아래의 함수는 프로그램이 종료되기 전에 반드시 호출되서 메모리 누수를 막아야 한다.
main 함수
프로그램 실행결과
소스 파일
'C 자료구조 > 2. 연결 리스트' 카테고리의 다른 글
Linked List의 활용 - 파일 입출력 활용 (0) 2021.03.24 Linked List의 활용 - 다항식의 표현 및 기본 연산 (1) 2021.03.24 Linked List - 리스트를 역순으로 바꾸기 (0) 2021.03.24 Linked List - 기본 연산 (0) 2020.07.19