C语言_数据结构_栈

版权声明:本文为博主原创文章,未经博主允许不得转载。 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;

}

猜你喜欢

转载自blog.csdn.net/chenyuk1/article/details/83478367