第三章栈和队列——3.1:栈

第三章栈和队列——3.1:栈

我们开始栈和队列的学习。

我们先开始学习栈。栈也是一种线性表。不过栈是从下往上放的,我们可以想象一个箱子,元素就是一本本书,我们在放书的时候先放的书都是放在最下面的,而在取书的时候,先取得书都是上面的,所以栈的元素有后进先出的特点,对于栈来说最上面的元素称为栈顶,最下面的元素称为栈底。不含元素的栈称为空栈

因为栈也是一种线性表,所以栈的程序和上一张的线性表类似。在这里我们先了解栈的第一种存储结构,顺序存储

对于栈的顺序存储我们的模板如下

#define chushi 100
#define zengjia 10
typedef struct
{
	selemtype* base;
	selemtype* top;
	int stacksize;
}a;

对于部分基本算法的描述如下

构建一个空栈

Status initstack(a& s)
{
	s.base = (selemtype*)malloc(chushi * sizeof(selemtype));
	if (!s.base) exit(overflow);
	s.top = s.base;
	s.stacksize = chushi;
	return ok;
}

若栈不空,则用e返回s的栈顶元素,若为空返回error

Status gettop(a& s,selemtype &e)
{
	if (s.top = s.base) return error;
	e = *(s.top - 1);
	return ok;
}

插入新的元素e为栈顶

Status push(a& s,selemtype e)
{
	if (s.top - s.base >= s.stacksize)
	{
		s.base = (selemtype*)realloc(s.base, (s.stacksize + zengjia) * sizeof(selemtype));
		if (!s.base)exit(overflow);
		s.top = s.base + s.stacksize;
		s.stacksize += zengjia;
	}
	*s.top++ = e;

	return ok;

}

若栈不空,删除栈顶元素赋值给e。

Status pop(a& s,selemtype& e)
{
	if (s.top == s.base)return error;
	e = *--s.top;
	return ok;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Harden先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值