#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef struct
{
int *base;
int *top;
int StackSize;
}Stack;
void InitStack(Stack *stack)//构造空栈stack
{
stack->base = (int*)malloc(sizeof(int)*STACK_INIT_SIZE);
if (!stack->base){
printf("error!!\n");
return;
}
stack->top = stack->base;
stack->StackSize = STACK_INIT_SIZE;
}
int IsEmpty(Stack *stack)//判断栈是不是空栈
{
if (stack->base == stack->top)
return 1;
return 0;
}
int IsFull(Stack *stack)//判断栈stack是不是满了
{
if (stack->top - stack->base == stack->StackSize)
return 1;
return 0;
}
void GetTop(Stack *stack,int *data)//获取栈顶元素
{
if (stack->base == stack->top)
return;
stack->top--;
*data = *stack->top;
stack->top++;
}
void Stack_Push(Stack *stack,int data)//入栈
{
if (stack->top - stack->base == stack->StackSize)//入栈判断栈满
{
stack->base = (int*)realloc(stack->base, sizeof(int)*(stack->StackSize + STACKINCREMENT));
if (!stack->base)
return;
stack->top = stack->base + stack->StackSize;
stack->StackSize = stack->StackSize + STACKINCREMENT;
}
*stack->top = data;
stack->top++;
}
void Stack_Pop(Stack *stack,int *data)//出栈
{
if (stack->base == stack->top)//出栈判断栈是否为空
return;
stack->top--;
*data = *stack->top;//栈顶始终指向栈定元素的下一个位置
}
int Stack_Size(Stack *stack)
{
return (stack->top - stack->base);
}
数据结构-顺序栈
最新推荐文章于 2023-05-08 00:00:00 发布