版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chenyuk1/article/details/83478367
#include <iostream>
#include <algorithm>
using namespace std;
typedef int Status;
#define stackElemType int
#define STACK_INT_SIZE 10
#define STACK_INCREMNET 5
typedef struct {
stackElemType *base;//栈的首地址
stackElemType *top;//栈顶
int stackSize;//栈的大小
}SqStack;
Status InitStack(SqStack &S) {
S.base = (stackElemType*)new stackElemType[STACK_INT_SIZE];
if (S.base == NULL) {
return 0;//失败
}
S.top = S.base;
S.stackSize = STACK_INT_SIZE;
cout << "初始化成功....\n";
return 1;//成功
}
Status StackEmpty(SqStack &S) {
if (S.top == S.base)
return 1;
else
return 0;
}
Status Push(SqStack &S, stackElemType &e) {//进栈
if (S.top - S.base >= S.stackSize) {
stackElemType *p = S.base;
S.base = new stackElemType[S.stackSize + STACK_INCREMNET];
if (S.base == NULL) {
cout << "push栈满重新分配出错\n";
return 0;
}
for (int i = 0; i < S.stackSize; i++) {
S.base[i] = p[i];
}
S.top = S.base + S.stackSize;
S.stackSize += STACK_INCREMNET;
delete[]p;
}
*S.top++ = e;
return 1;
}
Status Top(SqStack &S, stackElemType &e) { //访问栈顶元素
if (S.top == S.base) {
cout << "栈空";
return 0;
}
e = *(S.top - 1);
return 1;
}
Status Pop(SqStack &S, stackElemType &e) { //出栈
if (S.top == S.base) {
cout << "栈空";
return 0;
}
e = *(--S.top);
return 0;
}
Status ClearStack(SqStack &S) {
S.top = S.base;
return 1;
}
Status DestroyStack(SqStack &S) {
delete[]S.base;
return 1;
}
int Stack_main() {
SqStack test;
if (InitStack(test)) {
cout << test.base << endl;
if (StackEmpty(test)){
cout << "________________________" << endl;
for (int i = 0; i != 10; i++){
int tmp = i;
Push(test, tmp);
}
}
if (!StackEmpty(test)) {
for (int i = 0; i != 10; i++) {
int tmp=0;
Pop(test,tmp);
cout<<tmp<<" ";
}
}
}
cout << endl;
if (InitStack(test)) cout << "栈空+++++++++\n";
return 1;
}