数据结构之栈

        栈是一种对数据的存储方式,栈对数据要求后进先出,但是栈并不规定使用顺序表还是链表作为实现的方式,根据栈后进先出的特性,我们使用顺序表来实现会比较方便一些。接下来我们就来写一个栈。

要写一个栈首先要创建一个栈,我们从使用场景来看的话我们对于栈顶元素的调用会很频繁,所以我们要用顺序表来实现的同时应当有一个标记来记录栈顶元素的下标。

typedef int datatype;
typedef struct stack
{
	datatype* data;
	int top;
	int capacity;
}stack;

        对于栈的应用方面,通常只是对数据的存储和调用,或者是对栈顶元素的调用,几乎不存在对某个特定元素的查找或者修改。所以我们就通过添加元素和删除元素的接口来学习栈。

一、增

因为栈要符合后进先出的特性,所以我们的栈没有头插一说。我们只需要在创建的数组后面进行尾插就可以了。

void stackpush(stack* p, datatype x)
{
	if (p->top == p->capacity)
	{
		p->capacity = p->capacity == 0 ? 4 : 2 * p->capacity;
		p->data = realloc(p->data, p->capacity * sizeof(datatype));
	}
	p->data[p->top] = x;
	p->top++;
}

二、删

由于栈的底层我们是通过顺序表来实现的,所以我们只需要通过修改栈顶元素的下标来让我们的栈无法调用到栈顶元素就可以了。

void stackpop(stack* p)
{
	assert(p);
	assert(p->top > 0);
	p->top--;
}

三、获取栈顶元素

获取栈顶元素就是字面意思,因为我们在创建栈的数据结构时候就已经给栈顶元素提前保留了一个下标来访问,所以我们可以直接使用这个下标来访问到栈顶元素再把栈顶元素作为返回值返回给函数外部即可。

datatype stacktop(stack* p)
{
	assert(p);
	assert(p->top > 0);
	return p->data[p->top - 1];
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值