컴퓨터/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++]