1. 程式人生 > >棧的順序表示和實現

棧的順序表示和實現

#include <iostream>
using namespace std;
const int MAXN = 1000+7;
const int INF = 0X3f3f3f3f;

typedef struct {
	int *base;    // base不存元素
	int *top;    // top始終指向棧頂元素
	int StackSize;
} SqStack;

bool StackInit(SqStack &S)
{
	S.base = new int[MAXN];		// 初始分配空間
	if( !S.base)	// 空間分配失敗
		return false;
	S.top = S.base;		// 棧頂指標和棧低指標初始指向同一位置
	S.StackSize = MAXN;	// 棧的容量
	return true;
}
bool StackEmpty(const SqStack &S)
{
	if(S.top == S.base)
		return true;
	else
		return false;
}
int StackLength(const SqStack &S)
{
	return S.top - S.base;
}
bool StackClear(SqStack &S)
{
	if(S.base)		// 如果棧合法
	{
		S.top = S.base;
		return true;
	}
	else
		return false;

}
bool StackPush(SqStack &S, int e)
{
	if(S.top - S.base == S.StackSize)
		return false;
	*(++S.top) = e;		// top始終指向棧頂元素, 棧的第一個位置(base)不存元素
	return true;
}
bool StackPop(SqStack &S)
{
	if(S.top == S.base)
		return false;
	S.top --;
	return true;
}
int GetTop(SqStack &S)		// 返回棧頂元素值
{
	if(S.top == S.base)
		return INF;			// 如果棧空返回一個極大值
	else
		return *S.top;
}

int main()
{
	SqStack S;
	StackInit(S);

	StackPush(S, 1);
	StackPush(S, 2);
	StackPush(S, 3);

	if(StackEmpty(S))
		cout << "Stack is empty" << endl;
	else
		cout << "Stack is not empty" << endl;
	cout << "The Stack Length is: " << StackLength(S) << endl;
	cout << "The Stack top is: " << GetTop(S) << endl;

	StackPop(S);
	cout << "The Stack top is: " << GetTop(S) << endl;

	StackClear(S);
	if(StackEmpty(S))
		cout << "Stack is empty" << endl;
	else
		cout << "Stack is not empty" << endl;



	return 0;
}