王道数据结构源码实战自学-栈(c++版)

王道数据结构源码实战自学-栈(c++版)

image-20220710195911115

  • 初始化的时候 top为 -1
  • 栈顶top 等于 MaxSize-1时栈满
#include <iostream>
using namespace std;

#define MaxSize 50
typedef int ElemType;
//定义栈的结构体
typedef struct {
	ElemType data[MaxSize];
	int top;
}SqStack;

1 初始化函数

初始化就是将栈的top置为-1

//初始化栈
void InitStack(SqStack& S) {
	S.top = -1;
}

2 判断栈是否为空

就是判断栈的top是否为 -1

//判断栈空
bool StackEmpty(SqStack S) {
	if (S.top == -1) {
		return true;
	}
	return false;
}

3 入栈

入栈的时候首先要判断栈是否为空的

其次注意的是:往栈里面插入值的时候,中括号里是 ++S.top,这样top也实现了自增。++i返回的是加一后的值

拓展:i++ 和 ++i的区别

#include <iostream>
using namespace std;

int main()
{
	int i = 1;
	cout << i++ << endl;//1
	int j = 1;
	cout << ++j << endl;//2
}

image-20220710222629968

1、 i++ 返回原来的值,++i 返回加1后的值。

2、 i++ 不能作为左值,而++i 可以。

测试:插入1 2 3,查看内存情况

//入栈
bool Push(SqStack& S, ElemType x) {
	if (S.top == MaxSize - 1) {
		return false;
	}
	S.data[++S.top] = x;
	return true;
}

image-20220710222327812

4 获取栈顶元素

只拿元素,不弹栈

提前声明一个变量 x 来接收栈顶元素,所以函数的返回值为bool类型,传参的时候引用x

测试例子:创建一个栈,入栈 1 2 3 ,获取栈顶元素,查看内存

//获取栈顶元素
bool GetTop(SqStack S, ElemType& x) {
	if (S.top == -1)
	{
		return false;//栈为空
	}
	x = S.data[S.top];
	return true;
}

image-20220710223811755

5 出栈

既拿元素 又修改栈

这里也是提前声明一个变量 x,让它来接收弹出的元素

代码实现过程中,使用了i–的操作,类似于i++。

//弹栈
bool Pop(SqStack& S, ElemType& x) {
	if (S.top ==  -1) {
		return false;//栈为空
	}
	x = S.data[S.top--];//简化的操作,先获取到当前的top,然后对top操作减一
	//x = S.data[S.top--]; 还可以写成如下样式
	//x = S.data[S.top];
	//S.top--;
	return true;
}

在这里插入图片描述

6 链表实现栈 - 链栈

在考研中相对来说重要性不大

原理:就是在链表中使用 头部插入法 头部删除法

image-20220710225107199

源码下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

不会挂科i

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

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

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

打赏作者

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

抵扣说明:

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

余额充值