반응형
- 배열로 만든 리스트는 구현하기는 단순하지만, 고정된 크기이다.
- 연결리스트는 구현이 조금 복잡하지만, 항목과 항목을 연결하는 방식이라서 삽입과 삭제가 매우 간편하고 크기가 제한적이지 않다.
리스트 관련 함수
add_first(list, item) : 첫번째 위치에 요소를 추가
add(list, pos, item) : pos 위치에 요소를 추가
delete(list, pos) : pos 위치의 요소를 제거
is_empty(list) : 리스트가 비었는지 검사
is_full(list) : 리스트가 꽉 찼는지 검사
#include <stdio.h>
typedef int element;
typedef struct {
element list[100];
int length; // 리스트 길이를 확인하기 위한 변수
}ArrayListType;
void init(ArrayListType* L) // 리스트 초기화
{
L->length = 0; // L이라는 리스트의 길이를 0으로 초기화
}
정수형 element 선언
배열의 크기는 100
L 안에 있는 length는 0으로 초기화
1. 리스트 상태 확인 함수
is_empty(list) {
if (L->length == 0) {
printf("리스트가 비었습니다.")
return 1;
}
printf("리스트가 비어있지 않습니다.")
return 0;
}
is_full(list) {
if (L->length == 100) {
printf("리스트가 가득찼습니다.")
return 1;
}
printf("리스트에 여유공간이 있습니다.")
return 0;
}
length를 기준으로 0이면 empty, 100이면 full 이라는 형태로 함수 구현이 가능하다.
리스트 추가 함수
void add(ArrayListType* L, int position, element item)
{
int i;
// 리스트가 가득차지 않아야 하고
// 배열이기 때문에 0 이상이어야 하고
// 포지션은 현재 배열 길이 이하여야 한다.
if (!is_full(L) && (position >= 0) && (position <= L->length))
{
for (i = (L->length - 1); i >= position; i--)
L->list[i + 1] = L->list[i];
L->list[position] = item;
L->length++;
}
리스트 삭제 함수
int delete(ArrayListType* L, int position)
{
int i;
element item;
if (position < 0 || position >= L->length)
error("위치가 잘못되었습니다.");
item = L->list[position];
for (i = position; i < (L->length - 1); i++)
L->list[i] = L->list[i + 1];
L->length--;
return item;
}
반응형
'Programming > Data Structure' 카테고리의 다른 글
[리눅스][C언어] 구조체 구현 (0) | 2022.04.15 |
---|---|
[리눅스][C언어] 배열 포인터 (0) | 2022.04.13 |
[자료구조] C언어 연결리스트 스택 구현 (0) | 2022.04.11 |
C언어 구조체란? (0) | 2022.04.10 |
포인터, 배열, 구조체 (0) | 2022.03.31 |