栈(数据结构C语言版)

一、基本概念

栈是一个特殊的线性表,只能在一端操作;

栈顶(top):允许操作的一端

空栈:不含任何数据元素的栈;top = -1;

栈中有一个元素时,top = 0

性质:先进后出,后进先出

二、栈的基本操作

int StackInit(Stack **s)
{
	(*s) = (Stack *)malloc(sizeof(Stack) * 1);   //分配一个结构体,用于保存栈的信息 
	if(NULL == (*s))
	{
		return FAILURE;
	}

	(*s)->top = -1;     //空栈,栈顶为-1
	(*s)->data = (ElemType *)malloc(sizeof(ElemType) * SIZE);  //为栈分配空间
	if (NULL == (*s)->data)
	{
		return FAILURE;
	}

	return SUCCESS;
}

int StackEmpty(Stack *s)
{
	return (s->top == -1) ? TRUE : FALSE;
}

int push(Stack *s, ElemType e)
{
	if (NULL == s || s->top == 9)  //入参判断
	{
		return FAILURE;
	}
//top 相当于数组下标
	s->data[s->top + 1] = e;      //进栈
	s->top++;

	return SUCCESS;
}

int GetTop(Stack *s)
{
	if (s->top == -1)
	{
		return FAILURE;
	}
	return s->data[s->top];
}

int pop(Stack *s)
{
	if (s->top == -1)
	{
		return FAILURE;
	}
	s->top--;

	return SUCCESS;
}

int StackClear(Stack *s)
{
	if (NULL == s)
	{
		return FAILURE;
	}

	s->top = -1;

	return SUCCESS;
}

int StackDestroy(Stack **s)
{
	if (s == NULL || *s == NULL)
	{
		return FAILURE;
	}

	free((*s)->data);
	free(*s);
	(*s) = NULL;

	return SUCCESS;
}

猜你喜欢

转载自blog.csdn.net/weixin_41030848/article/details/81461250