관리 메뉴

공부 기록장 💻

[자료구조] 배열 Array List 본문

# CS Study/DS Algorithm

[자료구조] 배열 Array List

dream_for 2021. 4. 14. 17:35
#include <stdio.h>

#define MAX_LIST_SIZE 10
#define TRUE 1
#define FALSE 0

typedef int element;
typedef struct ArrayListType {
	element data[MAX_LIST_SIZE];
	int size;
}ArrayListType;

// init_list
void init_list(ArrayListType* L) { L->size = 0; }

// is_full
int is_full(ArrayListType* L) { return L->size == MAX_LIST_SIZE; }

// is_empty
int is_empty(ArrayListType* L) { return L->size == 0; }

// insert_first
void insert_first(ArrayListType* L, int item) {
	if (is_full(L)) {
		printf("List Array is full \n");
		exit(1);
	}

	for (int i = L->size - 1;i >= 1;i--)
		L->data[i + 1] = L->data[i];

	L->data[0] = item;
}

// insert_last
void insert_last(ArrayListType* L, int item) {
	if (is_full(L)) {
		printf("List Array is full \n");
		exit(1);
	}
	L->data[L->size++] = item;
}

// insert
void insert(ArrayListType* L, int pos, int item) {
	if (!is_full(L) && pos >= 0 && pos <= L->size) {
		for (int i = L->size - 1;i >= pos;i--)
			L->data[i + 1] = L->data[i];
		L->data[pos] = item;
		L->size++;
	}
}

// delete
element delete(ArrayListType* L, int pos) {
	element item; // 삭제하여 반환할 요소
	
	if (!is_empty(L) && pos >= 0 && pos <= L->size) {
		item=L->data[pos];
		for (int i = pos;i < L->size;i++)
			L->data[i] = L->data[i + 1];
		L->size--;
		return item;
	}
}

// get_entry
element get_entry(ArrayListType* L, int pos) {
	if (!is_empty(L) && pos>=0 && pos<=L->size)
		return L->data[pos];
}

// get_length
int get_length(ArrayListType* L) { return L->size; }

// print_list
void print_list(ArrayListType* L) {
	printf("\n------ <리스트 출력> -----\n\n");
	for (int i = 0;i < L->size;i++)
		printf("%d ", L->data[i]);
	printf("\n\n");
}

// clear
void clear(ArrayListType* L) {
	for (int i = 0;i < L->size;i++)
		L->data[i] = 0;
	init_list(L);
}

// replace
void replace(ArrayListType* L, int pos, element item) {
	if (!is_empty(L) && pos >= 0 && pos <= L->size)
		L->data[pos] = item;
}

int main() {
	ArrayListType arr;
	init_list(&arr);

	printf("<0부터 9까지의 숫자를 배열을 배열의 last에 삽입>\n");
	for (int i = 0;i < 10;i++)
		insert_last(&arr, i);
	print_list(&arr);

	printf("<리스트의 짝수번째 요소들을 20으로 변경>\n\n");
	for (int i = 0;i < get_length(&arr);i += 2)
		replace(&arr, i, 20);
	print_list(&arr);

	printf("<앞의 요소 5개를 삭제>\n\n");
	for (int i = 0;i < 5;i++)
		printf("%d 삭제\n", delete(&arr, 0));
	print_list(&arr);

	printf("<뒤의 요소 3개를 삭제>\n\n");
	for (int i = 0;i < 3;i++)
		printf("%d 삭제\n", delete(&arr, get_length(&arr)-1));
	print_list(&arr);

	printf("리스트의 길이 : %d\n", get_length(&arr));

	printf("\n<리스트 모두 clear>\n\n");
	clear(&arr);
	print_list(&arr);
}

 

728x90
반응형
Comments