#define STACK_INNIT_SIZE 20
#define STACKINCRMENT 5
struct SqStack
{
int *base;
int *top;
int stacksize;
};
int InitStack(struct SqStack *S)//构造空栈
{
S->base = (int *)malloc(STACK_INNIT_SIZE * sizeof(int));
if(!S->base)
return 0;
S->top=S->base;
S->stacksize = STACK_INNIT_SIZE;
return 1;
}
int Push(struct SqStack *S,int e)//入栈
{
if(S->top - S->base>=S->stacksize)
{
S->base = (int *)realloc(S->base,(S->stacksize+STACKINCRMENT) * sizeof(int));
if(!S->base)
return 0;
S->top = S->base+S.stacksize;
S->stacksize += S->stacksize;
}
*(S->top) = e;
S->top++;
return 1;
}
int GetTop(struct SqStack *S)//获取栈顶元素
{
if(S->top==S->base)
{
printf("空栈");
return 0;
}
int e = *(S->top-1);
return e;
}
int Pop(struct SqStack *S)//删除栈顶元素,并返回
{
if(S->top==S->base)
{
printf("空栈");
return 0;
}
S->top--;
int e = *(S->top);
return e;
}
int main()
{
struct SqStack S;
InitStack(&S);
int e;
scanf("%d",&e);
Push(&S,e);
printf("获取栈顶元素\n");
int i = GetTop(&S);
printf("%d\n",i);
printf("出栈\n");
i = Pop(&S);
printf("%d",i);
}
【数据结构】线性结构—栈的基本操作
最新推荐文章于 2022-10-16 13:12:21 发布