堆栈实现

该博客介绍了如何使用C语言实现堆栈数据结构,包括初始化、压栈、弹栈、获取栈顶元素、检查容量、销毁堆栈等操作。通过`StackInit`、`StackPush`、`StackPop`、`StackTop`、`StackSize`和`StackDestroy`等函数,详细阐述了堆栈的基本功能和动态扩容策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include “Stack.h”
#include <malloc.h>
#include <assert.h>
#include <stdio.h>

void CheckCapacity(Stack* ps)
{
assert(ps);
if (ps->_size == ps->_capacity)
{
// 开辟新空间
int newCapacity = ps->_capacity * 2;
SDataType* pTemp = (SDataType*)malloc(sizeof(SDataType)*newCapacity);
if (NULL == pTemp)
{
assert(0);
return;
}

	// 拷贝元素
	for (int i = 0; i < ps->_size; ++i)
		pTemp[i] = ps->_array[i];

	// 释放旧空间
	free(ps->_array);
	ps->_array = pTemp;
	ps->_capacity = newCapacity;
}

}

void StackInit(Stack* ps)
{
assert(ps);
ps->_array = (SDataType*)malloc(sizeof(SDataType)* 3);
if (NULL == ps->_array)
{
assert(0);
return;
}

ps->_capacity = 3;
ps->_size = 0;

}

void StackPush(Stack* ps, SDataType data)
{
// 检测是否有空间
CheckCapacity(ps);

ps->_array[ps->_size++] = data;

}

void StackPop(Stack* ps)
{
assert(ps);
if (StackEmpty(ps))
return;

ps->_size -= 1;

}

SDataType StackTop(Stack* ps)
{
assert(ps);
return ps->_array[ps->_size - 1];
}

int StackSize(Stack* ps)
{
assert(ps);
return ps->_size;
}

int StackEmpty(Stack* ps)
{
assert(ps);
return 0 == ps->_size;
}

void StackDestroy(Stack* ps)
{
assert(ps);
if (ps->_array)
{
free(ps->_array);
ps->_capacity = 0;
ps->_size = 0;
}
}

void TestStack()
{
Stack s;
StackInit(&s);

StackPush(&s, 1);
StackPush(&s, 2);
StackPush(&s, 3);
printf("size = %d\n", StackSize(&s));
printf("top = %d\n", StackTop(&s));

StackPush(&s, 4);
StackPush(&s, 5);
printf("size = %d\n", StackSize(&s));
printf("top = %d\n", StackTop(&s));

StackPop(&s);
StackPop(&s);
printf("size = %d\n", StackSize(&s));
printf("top = %d\n", StackTop(&s));

StackDestroy(&s);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值