数组式的栈各个函数的实现

1. 访问栈顶元素

数组式的栈各个函数的实现_第1张图片

 

DataType SToPop(ST* pst)//访问栈顶元素
{
	assert(pst);
	assert(!STEmpty(pst));//栈内元素为空就不能访问了:top==-1时就越界访问了
	return pst->a[pst->top - 1];
}

2.初始化函数

数组式的栈各个函数的实现_第2张图片

void STInit(ST* pst)//初始化
{
	assert(pst);
	pst->a = NULL; 
	pst->capacity = 0;
	pst->top = 0;
}

3.销毁全部空间,因为是数组所以把数组首地址交给free,就可以销毁全部空间了  

void STDestroy(ST* pst)//销毁所有空间
{
	assert(pst);
	free(pst->a);
	pst->a = NULL;
	pst->capacity = 0;
	pst->top = 0;
}

4.栈的概念图

数组式的栈各个函数的实现_第3张图片

5.插入数据,用realloc函数扩容,当pst->a是空指针时,realloc函数和malloc函数功能相同

数组式的栈各个函数的实现_第4张图片

void STPush(ST* pst, DataType x)//插入数据到栈中
{
	assert(pst);
	if (pst->capacity == pst->top)
	{
		int newcapacity = pst->capacity == 0 ? 4 : pst->capacity * 2;//是0就给4,不是0就乘2
		DataType* tmp = (DataType*)realloc(pst->a, sizeof(DataType) * newcapacity);//扩容
		if (tmp == NULL)
		{
			perror("realloc fail");
			return;
		}
		pst->a = tmp;
		pst->capacity = newcapacity;
	}

	pst->a[pst->top] = x;//栈顶放入元素
	pst->top++;

}

6.pst->top--,只可以减到0不能减到-1

数组式的栈各个函数的实现_第5张图片

void STPop(ST* pst)//数据跳出栈顶
{
	assert(pst);
	assert(!STEmpty(pst));
	pst->top--;
}

7.用bool判断栈内是否为空,是空bool返回真,不是空返回假

数组式的栈各个函数的实现_第6张图片

 

bool STEmpty(ST* pst)//判空函数
{
	assert(pst);
	return pst->top == 0; //等于0,bool就真了,
}

8.用STSize函数记录栈内有多少元素(有多少人)

int STSize(ST* pst)//记录栈内有多少元素(有多少人)
{
	assert(pst);
	return pst->top;
}

数组式的栈各个函数的实现_第7张图片

你可能感兴趣的:(数据结构)