내가 C를 대강 문법만 보고 C++까지 공부한지 짐 2주정도되서 완전잘 몰라
지금 자료구조랑 알고리즘 배울려고 뇌를 자극하는 알고리즘이라는 책 보고있는데
용량지정해서 동적할당한 메모리 만든것이 가득 차면 30%씩 늘리는 코드 작성하라길래 해봤는데
연산도 많은거같고 줠라 어설퍼서.. ㅡ.ㅡ; 의도대로 실행은 잘는데 왠지 삽질하는 느낌이라서
typedef int ElementType;
typedef struct tagNode
{
ElementType Data;
} Node;
typedef struct tagArrayStack
{
int Capacity;
int Top;
Node* Nodes;
} ArrayStack;
이건 구조체 형태고 Capacity가 처음 Stack 생성하고 Nodes에 할당한 메모리 크기야 함봐줘
if(AS_IsFull(Stack)) // 메모리 가득찼을때
{
double TempCa = Stack->Capacity; // 원래 용량 임시 저장
Node* TempNode = Stack->Nodes; // 원래 노드배열의 주소를 임시로 저장
int i=0;
Stack->Capacity = (TempCa + TempCa*(0.30)); // 스택의 용량을 일단 30프로 늘림
Stack->Nodes = (Node*)malloc(sizeof(Node)*Stack->Capacity); // 그 용량으로 노드배열에 새로운 메모리 할당
printf(\"Add Node Memory.\\n\");
for(i=0; i<(int)TempCa; i++) // 새로 할당한 노드배열 데이터를 원래 노드배열 데이타로 그 길이만큼 줜나게 바꿈 ㅋㅋㅋㅋㅋ
{
Stack->Nodes[i].Data = TempNode[i].Data;
}
free(TempNode); // 원래있던 노드메모리 날림
}
ㅋㅋㅋ.... 용량 줄어들면 삭제하는 코드도 만들었는데 이런식으로 새로 할당후 복사식이야
만들어는 놨는데 아무리봐도 개삽질 같아!! 다른방법잇으면 알려줘 ㅋㅋ
원래 할당된 동적할당 메모리를 실제로 늘리는 법이라던가..
비타민 퀴즈라고..문제만있고 답이없음..ㅋㅋ
책에 실린 코드도 잘못된거 열라많고.. 그거 잡아서 제대로 돌아가게하는 맛이 쏠쏠한데 암튼 책 좀 병맛
봐드렸습니다
ㄴ 고맙습니다..-_-+