Data Structure- List by array (c)

자료구조 – 배열로 구현한 리스트 c언어 소스

#include <stdio.h>
#define max 100
typedef struct {
	int array[max];
	int size;
}ArrayListType;
typedef ArrayListType * ArrayList_ptr;


void init(ArrayList_ptr list) {
	list->size = 0;
}

int is_empty(ArrayListType list) {
	if (list.size == 0)
		return 1;
	else
		return 0;
}

int is_full(ArrayListType list) {
	if (list.size == max)
		return 1;
	else
		return 0;
}

void insert_first(ArrayList_ptr list, int item) {
	if (!is_full(*list)) {
		for (int i = list->size - 1; i >= 0; i--)
			list->array[i + 1] = list->array[i];
		list->array[0] = item;
		list->size++;
	}
	else
		printf("리스트가 꽉 차있습니다\n");
}

// 맨 처음에는 삽입 불가능한 함수 
// list[pos] 공간에 삽입 
// pos는 리스트의 현존하는 인덱스 -> 리스트 크기가 n이면 pos는 0~(n-1)까지 존재 
void insert(ArrayList_ptr list, int pos, int item) {
	if (!is_full(*list) && pos >= 0 && pos <= list->size - 1) {
		for (int i = list->size - 1; i >= pos; i--)
			list->array[i + 1] = list->array[i];
		list->array[pos] = item;
		list->size++;
	}
	else
		printf("리스트가 꽉 차있습니다\n");
}

void insert_last(ArrayList_ptr list, int item) {
	if (!is_full(*list)) {
		list->array[list->size] = item;
		list->size++;
	}
	else
		printf("리스트가 꽉 차있습니다\n");
}

int delete_first(ArrayList_ptr list) {
	if (!is_empty(*list)) {
		int tmp = list->array[0];
		for (int i = 1; i < list->size; i++)
			list->array[i - 1] = list->array[i];
		list->size--;
		return tmp;
	}
	else
		printf("리스트가 비어 있습니다\n");
}

int delete(ArrayList_ptr list, int pos) {
	if (!is_empty(*list) && pos >= 0 && pos < list->size) {
		int tmp = list->array[pos];
		for (int i = pos + 1; i < list->size; i++)
			list->array[i - 1] = list->array[i];
		list->size--;
		return tmp;
	}
	else
		printf("리스트가 비어 있습니다\n");
}

int delete_last(ArrayList_ptr list) {
	if (!is_empty(*list)) {
		int tmp = list->array[list->size - 1];
		list->size--;
		return tmp;
	}
	else
		printf("리스트가 비어 있습니다\n");
}

void print_list(ArrayListType list) {
	for (int i = 0; i < list.size; i++)
		printf("%d ", list.array[i]);
	printf("size:%d\n", list.size);
}

int main() {
	ArrayListType list;
	init(&list);

	printf("삽입:");
	insert_first(&list, 10); // 10
	insert_first(&list, 11); // 11 10
	insert_last(&list, 12); // 11 10 12
	insert_last(&list, 13); // 11 10 12 13
	insert(&list, 3,144); // 11 10 12 144 13
	print_list(list);
	
	printf("\n삭제:");
	delete_first(&list); // 10 12 144 13
	delete_last(&list); // 10 12 144
	delete(&list, 1); // 10 144
	print_list(list);
}


실용적인 리스트 소스 (Last In Last Out 구조 + 인덱스로 삭제)

#include <stdio.h>
#include <stdlib.h>
#pragma warning(disable:4996)
#define max 30

typedef int element;
typedef struct {
	element array[max];
	int size;
}ArrayListType;
typedef ArrayListType * ArrayList_ptr;

// 리스트 초기화
void init(ArrayList_ptr list) {
	list->size = 0;
}

// 리스트 생성
ArrayList_ptr create() {
	return (ArrayList_ptr)calloc(1, sizeof(ArrayListType));
}

// 빈 리스트 확인
int is_empty(ArrayList_ptr list) {
	if (list->size == 0)
		return 1;
	else
		return 0;
}

// 풀 리스트 확인
int is_full(ArrayList_ptr list) {
	if (list->size == max)
		return 1;
	else
		return 0;
}

// 아이템 삽입
void insert_last(ArrayList_ptr list, element item) {
	if (!is_full(list)) {
		int pos = list->size;
		list->array[pos] = item;
		list->size++;
	}
	else
		printf("리스트가 꽉 차있습니다\n");
}

// 아이템 삭제
void delete_last(ArrayList_ptr list) {
	if (!is_empty(list)) {
		list->size--;
	}
	else
		printf("리스트가 비어 있습니다\n");
}

// 인덱스로 아이템 삭제 
void delete_idx(ArrayList_ptr list, int pos) {
	if (!is_empty(list)) {
		element tmp = list->array[pos];
		for (int i = pos + 1; i < list->size; i++)
			list->array[i - 1] = list->array[i];
		list->size--;
	}
	else
		printf("리스트가 비어 있습니다\n");
}

// 리스트 출력 
void print_list(ArrayList_ptr list) {
	if (!is_empty(list)) {
		for (int i = 0; i < list->size; i++)
			printf("[%d] ", list->array[i]);
	}
	else
		printf("리스트가 비어 있습니다\n");
}

int main() {
	ArrayList_ptr list = create();
	init(list);
	insert_last(list, 1); // [1]
	insert_last(list, 2); // [1 2]
	insert_last(list, 3); // [1 2 3]
	insert_last(list, 4); // [1 2 3 4]
	insert_last(list, 5); // [1 2 3 4 5]
	delete_last(list); // [1 2 3 4]
	delete_last(list); // [1 2 3]
	delete_idx(list, 0); // [2 3]
	insert_last(list, 4); // [2 3 4]
	delete_idx(list, 1); // [2 4]
	print_list(list); // 리스트 요소 출력 
}

Leave a Reply

Your email address will not be published. Required fields are marked *