栈--顺序栈的基本操作(对小白友好)

栈的基本操作

  以下代码中,默认初始化的top为-1。

栈的定义

#define MaxSize 50 //定义栈中元素最大个数

typedef struct {
	int data[MaxSize]; //存放栈中元素
	int top;         //栈顶指针
}SqStack;

栈的初始化

  将top指指针指向-1.

void InitStack(SqStack &s)
{
	s.top = -1;
}

在这里插入图片描述

栈的判空

bool StackEmpty(SqStack s)
{
	if (s.top == -1)
		return true;
	cout << "栈不为空";
	return false;
}

进栈

  理解这里的指针先加1,在入栈。

bool Push(SqStack& s,int e)
{
	if (s.top == MaxSize - 1)
		return false;   //栈满
	s.data[++s.top] = e; //指针先加1,在入栈
	return true;
}

在这里插入图片描述

出栈

  先出栈,指针在减1。

bool Pop(SqStack& s, int &e)
{
	if (s.top == -1)
		return false; //栈空,报错
	e = s.data[s.top--]; //数据e先出栈,指针在减1
	return false;
}

在这里插入图片描述

读取栈顶元素

bool GetTop(SqStack s, int &e)
{
    //判断栈是否为空
	if (s.top == -1)
		return false;
	e = s.data[s.top];
	return true;
}

销毁栈

bool DestoryStack(SqStack& s)
{
	s.top == -1;
	return true;
}

全部源码

#include<iostream>
using namespace std;

#define MaxSize 50 //定义栈中元素最大个数

typedef struct {
	int data[MaxSize]; //存放栈中元素
	int top;         //栈顶指针
}SqStack;

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

//判断栈是否为空
bool StackEmpty(SqStack s)
{
	if (s.top == -1)
		return true;
	cout << "栈不为空";
	return false;
}


//进栈
bool Push(SqStack& s,int e)
{
	if (s.top == MaxSize - 1)
		return false;   //栈满
	s.data[++s.top] = e;
	return true;
}

//出栈
//数据还残留在栈中,只是在逻辑上被删除
bool Pop(SqStack& s, int &e)
{
	if (s.top == -1)
		return false; //栈空,报错
	e = s.data[s.top--]; //数据e先出栈,指针在减1
	return false;
}

//读取栈顶元素
bool GetTop(SqStack s, int &e)
{
	if (s.top == -1)
		return false;
	e = s.data[s.top];
	return true;
}

//栈的遍历
void PrintStack(SqStack s)
{
	if (s.top == -1)
		return;
	for (int i = 0; i <= s.top; ++i)
	{
		cout << s.data[i]<<" ";
	}
}

//销毁栈
bool DestoryStack(SqStack& s)
{
	s.top == -1;
	return true;
}
int main()
{
	SqStack s;

	//初始化
	InitStack(s);

	//判断栈是否为空
	StackEmpty(s);

	//进栈
	cout << "输入进栈的元素:";
	int e = 0;
	cin >> e;
	while (e != 9999)
	{
		Push(s, e);
		cout << "输入进栈的元素:";
		cin >> e;
	}

	//出栈
	Pop(s, e);
	cout << "出栈的元素为:" << e<<endl;

	//读取栈顶元素
	GetTop(s, e);
	cout << "栈顶的元素为:" << e << endl;

	//打印全部元素
	PrintStack(s);
	//销毁栈
	DestoryStack(s);
	return 0;
}

在这里插入图片描述

对你有帮助,点个关注吧!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

君生我老

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

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

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

打赏作者

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

抵扣说明:

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

余额充值