【数据结构】顺序栈的建立
#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知道怎么回事可以帮助一下。。。