#include <stdio.h>
#include <stdlib.h>
using namespace std;
typedef struct DynArrayStack{
int top;
int capacity;
int *arr;
}DynArrayStack;
DynArrayStack* CreateStack(int capacity){
DynArrayStack *S=(DynArrayStack*)malloc(sizeof(DynArrayStack));
if(!S)
return NULL;
S->capacity=capacity;
S->top=-1;
S->arr=(int*)malloc(sizeof(int)*S->capacity);
if(!S->arr)
return NULL;
return S;
}
int IsEmptyStack(DynArrayStack *S)
{
return S->top==-1;
}
int IsFullStack(DynArrayStack *S)
{
return S->top==S->capacity-1;
}
void DoubleStack(DynArrayStack *S)
{
S->capacity*=2;
printf("capacity = %d\n", S->capacity);
S->arr=(int*)realloc(S->arr, S->capacity);
int i;
for(i=0; i<S->capacity/2; i++)
printf("%d ", S->arr[i]);
printf("\n");
}
void Push(DynArrayStack *S, int data)
{
if(IsFullStack(S))
{
DoubleStack(S);
}
S->arr[++S->top]=data;
}
int Pop(DynArrayStack *S)
{
if(IsEmptyStack(S))
{
printf("비었음\n");
return 0;
}
return S->arr[S->top--];
}
void DeleteStack(DynArrayStack *S)
{
if(S){
if(S->arr)
free(S->arr);
free(S);
}
}
int main(void)
{
DynArrayStack *S;
S=CreateStack(1);
while(true)
{
int num;
int data;
int exit=-1;
printf("입력 = 1 , 출력 = 2, 종료 = 3 : ");
scanf("%d", &num);
switch(num)
{
case 1:
printf("데이터 입력 = ");
scanf("%d", &data);
Push(S, data);
break;
case 2:
>
printf("출력 값 = %d\n", data);
break;
case 3:
DeleteStack(S);
exit=1;
}
if(exit==1)
break;
}
return 0;
}
요고 스택을 구현한건데
푸시할때 스택이 꽉차면 스택 크기를 두배로 늘리고 거기에 푸시하거든요
근데 스택 크기 두배로 늘릴때
S->arr=(int*)realloc(S->arr, S->capacity);
이걸 사용하는데 이거 사용하고 나서 이전의 스택 값이 그대로 유지가 안되더라고요
왜그런지 설명좀 해주실분 그리고 어떻게하면 이거 해결하죠 ㅜ
사이즈가 바이트수로 들어가야되지않니?