【数据结构】顺序栈的建立(2021.06.15)

【数据结构】顺序栈的建立

#include<iostream>
#include<malloc.h>
#include<stdlib.h>
#define MAXSIZE 5
#define INCREAMENT 2//扩充两个位置
using namespace std;
typedef struct {
	int *base;
	int *top;
	int stacksize;//栈目前长度
	int maxsize;//栈最大长度
}SqStack;//构建顺序栈
void IniStack(SqStack*s);
void Push(SqStack*s, int e);//进栈
bool Pop(SqStack*s);//出栈
void TraveStack(SqStack*s);
int main() {
	int e = 0;
	SqStack s;
	IniStack(&s);
	Push(&s, e);
	Push(&s, e);
	Push(&s, e);
	Push(&s, e);
	Push(&s, e);//往s栈里面压元素,压哪个元素,调用5次,压5个
	Pop(&s);//这里进栈出栈再用两个遍历很能简化
	Pop(&s);
	Pop(&s);
	Pop(&s);
	Pop(&s);//输出5次
	TraveStack(&s);//从栈底进行遍历
	return 0;
}
void IniStack(SqStack*s) {
	int *q;
	q = (int *)malloc(sizeof(int)*(MAXSIZE));//分配空间给指针
	if (!q)
		exit(-1);//里面参数非0都是异常退出
	s->base = s->top = q;
	s->stacksize = 0;
	s->maxsize = MAXSIZE;//初始化
}
void Push(SqStack*s, int e) {
	cout << "请输入压栈元素:" << endl;
	cin >> e;
	//1.看栈是否为满  2.如果满了,扩容  3.如果没满
	if (s->top - s->base == s->stacksize&&s->top != s->base) {//栈满
		int*q;
		q = (int*)realloc(s->base, sizeof(int)*(s->maxsize + INCREAMENT));
		if (!q)
			exit(-1);
		s->maxsize += INCREAMENT;//扩容,容量由5变成7
		//s->top 
	}
	s->base[s->stacksize] = e;
	s->stacksize++;//压入一个元素,有效长度增加
	s->top++;
}
bool Pop(SqStack*s) {
	if (s->top == s->base) {
		cout << "栈为空,出栈失败!" << endl;
		return false;
	}
	s->top--;
	cout << "出栈的元素是:" << s->base[s->stacksize - 1] << endl;;
	s->stacksize--;
	return true;

}
void TraveStack(SqStack*s) {
	cout << "栈中的元素是:" << endl;
	for (int i = 0; i < s->stacksize; i++)
		cout << s->base[i];
}

代码借鉴b站up主“困了吃颗糖”
这代码只是简单的进栈出栈以及遍历栈中元素,若是想在题目的引用,还需要进行相应改变。
还有一个问题,在我的电脑用dev运行时会输出一些乱码,用vs2017则可以正常运行,各位uu知道怎么回事可以帮助一下。。。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值