컴퓨터/Algorithm

배열 기반 링크드리스트(myalloc)

빵케잌 2019. 12. 21. 11:46

정적배열로 미리 선언해놓고, 노드 할당 요청 시 주소만 받아오는 형식이다.

몇 번까지 할당해줬는지를 별도의 변수에 담아두고, 그 변수가 가리키고 있는 요소를 리턴 후 변수를 증가시켜주면 된다.

속도는 malloc 함수를 이용해 매번 할당받는 것보다 빠르다.

링크드리스트 최대 크기를 알고 있을 때 쓸 수 있는 방법이다.

#define MAX_NODE (10000)
struct node{
	... // data;
    struct node* prev;
    struct node* next;
};
struct node node[MAX_NODE]; // 정적 배열
struct node head;
int node_cnt = 0; // 이미 할당 받은 노드 수

void add(){
	struct node *p = &node[++node_cnt];  // 할당
	p->next = head.next;
	if(head.next) head.next->prev = p;
	head.next = p;
	p.prev = &head;    
}

1부터 할당하는 이유는 인덱싱을 할 때 0이 0번째 할당받은 데이터인지, 아직 할당을 안 받았는지 구분이 안되기 때문이다. 인덱스 배열을 쓰지 않는다면 0부터 할당해도 무관[node_cnt++]