본문 바로가기

Programming/Data Structure

C언어로 리스트 구현하기 (배열)

반응형

- 배열로 만든 리스트는 구현하기는 단순하지만, 고정된 크기이다.

- 연결리스트는 구현이 조금 복잡하지만, 항목과 항목을 연결하는 방식이라서 삽입과 삭제가 매우 간편하고 크기가 제한적이지 않다.

 

리스트 관련 함수

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;
}

 

반응형