棧的順序表示和實現
阿新 • • 發佈:2018-11-27
#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; }