第三期 续1 C/C++数据结构 顺序栈基本操作

 第三期 栈的基本操作内容基本一致,本次多加入:输入多个元素,多个元素出栈,顺序栈的长度

#include <iostream>
using namespace std;
#define MaxSize 100		//顺序栈存储空间初始分配
						
//定义结构体
/*顺序栈定义结构
1.栈顶指针
2.栈底指针,初始分配空间
3.栈的可用最大空间容量(线性表中length长度)
*/
typedef struct {
	char* top;
	char* base;
	int stackszie;				//定义stacksize,栈的最大可用容量
}SqStack;

//-------------------------------------初始化操作
void InitSqStack(SqStack &S) {
	S.base = new char[MaxSize];			//1.为栈S开辟空间
	if (S.base==NULL) cout << "存储空间分配失败";
	S.top = S.base;						//2.将栈置空(top头指针指向base尾指针
	S.stackszie = MaxSize;				//3.将栈的最大可容量置为MaxSize
	cout << "栈的初始化完成" << endl;
}

//-------------------------------------入栈操作
/*
1.判断栈是否已满
2.将新元素压入栈顶,栈顶指针+1
*/
void Push(SqStack &S,char a) {
	if (S.top - S.base == S.stackszie) cout << "栈满了,不能在存入数据喽~";
	*S.top++ = a;
}

//-------------------------------------入栈操作
/*
1.判断栈是否已满
2.利用循环输入多个元素
3.将新元素压入栈顶,栈顶指针+1(先将top赋值,在将top指针向上移动
*/
void Push2(SqStack& S, int b) {
	if (S.top - S.base == S.stackszie) {
		cout << "栈满了,不能在存入数据喽~";
	}
	else{
		cout << "请输入要进栈的元素:";
		for (int i = 0; i < b; i++){
			char c;
			cin >> c;
			*S.top++=c;
		}
	}

}


//-------------------------------------判断栈是否为空
/*
1.判断栈是否为空
*/
void StackEmpety(SqStack &S) {
	if (S.top != S.base) {
		cout << "顺序栈不为空!" << endl;
	}else {
		cout << "顺序栈是的空哦!"<< endl;
	}
}

//-------------------------------------求长度
/*
1.将栈顶指针减去栈底指针,得到的就是栈的长度
*/
void StackLength(SqStack& S) {

	int length = S.top - S.base;
	cout << "顺序栈的长度为:" << length << endl;
}


//-------------------------------------顺序表取栈顶元素
/*
1.判断栈是否为空
2.输入top指针-1操作,栈顶指针不变
*/
void GetTop(SqStack& S) {
	if (S.top == S.base)  cout << "不好意思栈为空栈,无栈顶元素";
	cout << "取栈顶元素为:" << *(S.top - 1) << endl;

}

//-------------------------------------顺序表出栈
/*
1.判断栈是否为空
2.将栈顶指针-1,将- - top的返回e
*/
void PopStack(SqStack& S,int c) {
	if (S.top == S.base) {
		cout << "不好意思栈为空栈,无元素出栈!" << endl;
	}else{
		cout << "Ding****元素已出栈,出栈元素顺序为:";
		for (int i = 0; i < c; i++) {
			char e;
			e = *(--S.top);
			cout << e << " ";
		}
		cout << endl;
	}
}

//-------------------------------------销毁顺序栈
/*
1.判断顺序栈是否存在
2.将栈释放内存,指针置空
*/
void DestoryStack(SqStack& S) {
	if (S.base) {
		delete S.base;
		S.stackszie = 0;
		S.base = S.top = NULL;
		cout << "顺序栈已被销毁。" << endl;
	}
	else {
		cout << "栈已不存在!";
	}
}



int main() {
	SqStack S;									//一如既往的先定义一个栈
	InitSqStack(S);								//初始化栈

	cout << "1.输入操作,请输入你要插入的字符:";//1.输入操作
	char a; cin >> a;
	Push(S,a);

	cout << "请问还想输入几个字符:";			//更多元素入栈
	int b; cin >> b;
	Push2(S,b);

	cout << "2.判断栈是否为空结果为:";
	StackEmpety(S);								//2.判断顺序栈是否为空

	cout << "3."; StackLength(S);				//3.求长度

	cout << "4.";	GetTop(S);					//3.取栈顶元素

	cout << "5.想要多少个元素出栈:";
	int c; cin >> c;
	PopStack(S,c);								//4.出栈操作

	cout << "6.";	StackEmpety(S);				//5.判断顺序栈是否为空

	cout << "7.";	DestoryStack(S);			//6.销毁
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

赵相机~

谢谢你,调试、讲解私聊我~

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

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

打赏作者

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

抵扣说明:

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

余额充值