자료구조 :: 크기가 조정되는 배열 스택

2009/12/20 01:05

크기가 조정되는 배열 스택을 구현해봤습니다. 처음 스택을 생성하여 초기화를 하면 스택의 크기는 0인 상태입니다. 그리고 데이터를 삽입하면 스택의 크기가 확장되고 데이터를 삭제하면 스택의 크기가 축소됩니다. 그런데 매번 삽입, 삭제할 때마다 스택의 크기, 즉 배열의 크기를 조정하면 속도상 비효율적이기 때문에 스택이 가득 차면 2배로 확장하고, 스택이 1/4만 남으면 1/2로 축소되도록 했습니다.

뭐, 이 정도 구현하는 건 그렇게 어려운 게 아니지만, 매번 이걸 짜는건 딱 질색이라서 C 라이브러리로 만들었습니다. C++는 어차피 STL이 존재하니까...

StackType.h

View source...


StackType.c

View Source...


Test

그럼, 정말로 스택의 크기가 조정되는지 다음의 코드로 확인해보겠습니다.

#include <stdio.h>

#include "StackType.h"

int main (void)
{
int i;

StackType s;
init (&s);

for (i = 0; i < 4; i++)
push (&s, i);
for (i = 0; i < s.size; i++)
printf ("%x%c", (s.stack+i), ((i+1)%8) ? ' ' : '\n');
printf ("\n\n");

for (i = 0; i < 20; i++)
push (&s, i);
for (i = 0; i < s.size; i++)
printf ("%x%c", (s.stack+i), ((i+1)%8) ? ' ' : '\n');
printf ("\n\n");

for (i = 0; i < 20; i++)
pop (&s);
for (i = 0; i < s.size; i++)
printf ("%x%c", (s.stack+i), ((i+1)%8) ? ' ' : '\n');
printf ("\n\n");
}


사용자 삽입 이미지

컴파일해서 실행해보면, 스택의 크기가 7로, 33으로 확장되고 다시 15로 축소되는 것을 볼 수 있습니다.

참고 문헌

스택 :: http://www.winapi.co.kr/clec/cpp2/19-3-1.htm
realloc :: http://www.cplusplus.com/reference/cli ··· alloc%2F
크리에이티브 커먼즈 라이센스
Creative Commons License

6l4ck3y3 0x07 알고리즘 , ,

Trackback Address:http://hisjournal.net/blog/trackback/296