【数据结构地图】顺序栈操作

顺序栈具体定义实现,以及创建顺序栈的实现代码

通过创建结构体实现顺序栈,结构体包含节点的主要信息,包括数组和一个栈顶指针下面是一段节点定义代码,定义了一个节点结构体。主要为了展示操作逻辑,直接在栈区创建顺序栈对象,以便减少不必要的脑算力开支

#include <iostream>
using namespace std;
#define maxsize 5
struct SeqStack{
	int data[maxsize];
	int top;
};

SeqStack S;

bool empty(SeqStack &S) {//判断栈指针是-1,如果是就是空栈
	return S.top == -1;
}

void Seqstack(SeqStack &S) {//传一个指针进去
	S.top = -1;//操纵堆区对象指针指向-1
	cout << "已建新栈" << endl;
}

压栈函数接受一个栈对象引用,和一个数值。函数先完成空栈检测,通过后就是核心代码,因为初始指针top为-1,所以是先指针位移,再进行赋值运算。

void Push(SeqStack &S, int value) {//传入一个指针和一个数值
	if (S.top == maxsize - 1) {
		cout << "本栈已满,数据不予压入" << endl;
		return;
	}
	cout << "压入 " << value;
	S.data[++S.top] = value;//先加加在赋值
	cout << "  当前指针为"<<S.top << " " << endl;
}

弹栈函数传入一个栈对象引用,先做空栈检测,然后弹出数据,庆祝注意指针初始位置,-1的话是先传值再将指针-1


int  Pop(SeqStack &S) {//传入一个引用
	if (empty(S)) {//判断是否空栈
		cout << "栈空,无数据" << endl;
		return 0;
	}
	cout << "弹出 " << S.data[S.top];
	cout << "  当前指针为 " << S.top-1 << endl;
	return S.data[S.top--];//先传值再减减
}

传入一个栈对象引用,取栈顶数据,也就是当前指针指向的数据,此函数不弹出数据,核心代码前依旧是做空栈检测


int GetTop(SeqStack &S) {//得到栈顶指针指向的值
	if (empty(S)) {//判断是否空栈
		cout << "栈空,无数据" << endl;
		return 0;
	}
	cout << "栈顶数据为 "<<S.data[S.top] << endl;;
	return S.data[S.top];//得到当前指针指向的值
}

因为是在内存栈区建立对象,无法动态扩容,故没有记录Resize函数,若有需求可以自行修改代码(反正核心代码不变就没问题),下面是一段可供测试的代码

void test() {
	Seqstack(S);
	Push(S, 3);
	Push(S, 4);
	Push(S, 7);
	Push(S, 2);
	Push(S, 9);
	Push(S, 3);
	Pop(S);
	Pop(S);
	GetTop(S);
}

 直接在main()里调用test()就行

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值