메뉴 바로가기 검색 및 카테고리 바로가기

한빛미디어

뇌를 자극하는 알고리즘

뇌를 자극하는 알고리즘 질의응답 게시판입니다.

스택 용량 늘리기

2014-07-18

|

by shinsy11

2695

저자님이 쓰신 알고리즘책 잘 보고 있습니다^^

ch2 뒤에 연습문제 2번과 3번 문제에 관한 질문이 있습니다.

2. 우리가 앞에서 만들어 본 예제에서는 배열 기반 스택을 다음과 같은 구조체로 표현했습니다.
typedef struct tagArrayStack
{
      int Capacity;
      int Top;
      Node* Nodes;
} ArrayStack;

이런 구조의 배열 기반 스택의 단점 중 하나는 용량을 조절하기가 어렵다는 것입니다. 하지만 불가능한 것은 아니지요. 자, 이제 문제입니다. 다음의 AS_Push() 함수를 스택의 용량이 모두 소진되었을 때 현재 용량의 30%만큼을 더 늘리도록 개선하세요.
void AS_Push(ArrayStack* Stack ElementType Data)
{
     int Position = Stack->Top;

     Stack->Nodes[Position].Data = Data;
     Stack->Top++;
}


3. 만약 배열 기반 스택 예제 프로그램의 AS_Push() 함수만 용량이 늘어나도록 수정한다면 스택은 커지기만 하고 줄어들지는 않아 결국에는 메모리를 낭비하는 결과를 만들게 됩니다. 따라서 AS_Pop() 함수도 설제 사용량이 줄어들면 용량을 줄이도록 개선해야 합니다. 이번 문제는 다음의 AS_Pop() 함수를 사용량이 스택 용량의 70% 미만으로 내려가면 용량을 줄이도록 수정하는 것입니다.
ElementType As_Pop(ArrayStack* STack)
{
     int Position = --(Stack->Top);

     return Stack->Nodes[Position].Data;
}


아무리 생각해봐도 잘 모르겟네요.
리스트는 노드를 추가 삭제를 해가며 저장공간을 늘리고 줄일 수 있지만 스택은 불가능 하지 않나요?
배열은 처음 지정한 저장 크기를 중간에 늘리거나 줄일수 없는데 배열 말고 리스트를 사용해서 스택을 구현해야하나요?
그리고 처음에 스택의 공간을 지정해주는데 그럼 기존에 존재하던 스택의 공간을 free로 소멸시키고 원하는 크기의 공간을 새로 malloc 으로 할당해 주어야하나요? 도와주세요^^


아 그리고 알고리즘 자료실은 어디에 있나요?
책에 나와 있는 소스파일을 다운 받고 싶은데 자료실이 어디 있는지 모르겟네요ㅠㅜ
댓글 입력