#include <stdio.h>
#include <stdlib.h>

#define MAX_LIST_SIZE 100

typedef int element;
typedef struct {
	int list[MAX_LIST_SIZE];
	int length;
}ArrayListType;

//¿À·ùÃ³¸® ÇÔ¼ö
void error(char* message)
{
	fprintf(stderr,"%s\n",message);
		exit(1);
}
//¸®½ºÆ® ÃÊ±âÈ­
void init(ArrayListType* L)
{
	L->length=0;//(*L).length=0;
}

//¸®½ºÆ®°¡ ºñ¾îÀÖÀ¸¸é 1À»¹ÝÈ¯
//±×·¸Áö ¾ÊÀ¸¸é 0À» ¹ÝÈ¯
int is_empty(ArrayListType* L)
{
	return L->length=0;
}

//¸®½ºÆ®°¡ °¡µæ Â÷ÀÖÀ¸¸é 1À» ¹ÝÈ¯
//±×·¸Áö ¾ÊÀ¸¸é 0À» ¹ÝÈ¯
int is_full(ArrayListType* L)
{
	return L->length == MAX_LIST_SIZE;
}

//¸®½ºÆ® Ãâ·Â
void display(ArrayListType* L)
{
	int i;
	for(i=0;i<L->length ; i++)
		printf("%d\n",L->list[i]);
}
//position »ðÀÔÇÏ°íÀÚ ÇÏ´Â À§Ä¡
//item »ðÀÔÇÏ°íÀÚÇÏ´ÂÀÚ·á
void add(ArrayListType* L,int position,element item)
{
	if(!is_full(L) && (position>=0) && (position <= L->length)){
		int i;
		for(i=(L->length-1) ; i>=position ; i--)
			L->list[i+1] = L->list[i];
		L->list[position] = item;
		L->length++;
	}
}


element 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;
}

		
main()
{
	ArrayListType list1;
	ArrayListType* plist;

	init(&list1);
	add(&list1,0,10);
	add(&list1,0,20);
	add(&list1,0,30);
	display(&list1);

	plist = (ArrayListType*)malloc(sizeof(ArrayListType));
	init(plist);
	add(plist,0,10);
	add(plist,1,20);
	add(plist,2,30);
	display(plist);
	free(plist);
}


	