/*
* Stack.h
*
* Created on: Oct 6, 2015
* Author: chris
*/
#ifndef SQSTACK_H_
#define SQSTACK_H_
typedef int ElemType;
enum {STACKINITSIZE = 10, STACKINCSIZE = 10};
struct SqStack{
ElemType* base;
ElemType* top;
int siz;
};
bool SqStackCreate(SqStack& stk);
void SqStackDestroy(SqStack& stk);
void SqStackClear(SqStack& stk);
int SqStackLength(SqStack& stk);
bool SqStackEmpty(SqStack& stk);
int SqStackSize(SqStack& stk);
bool SqStackPush(SqStack& stk, ElemType e);
bool SqStackPop(SqStack& stk);
bool SqStackTop(SqStack& stk, ElemType& e);
void SqStackDisplay(SqStack& stk);
#endif /* SQSTACK_H_ */
/*
* SqStack.cpp
*
* Created on: Oct 7, 2015
* Author: chris
*/
#include"SqStack.h"
#include<iostream>
using namespace std;
bool SqStackCreate(SqStack& stk)
{
stk.top = stk.base = new ElemType[STACKINITSIZE];
if(!stk.base) return false;
stk.siz = STACKINITSIZE;
return true;
}
void SqStackDestroy(SqStack& stk)
{
delete stk.base;
stk.base = stk.top = NULL;
stk.siz = 0;
}
void SqStackClear(SqStack& stk)
{
stk.top = stk.base;
}
int SqStackLength(SqStack& stk)
{
return stk.top-stk.base;
}
bool SqStackEmpty(SqStack& stk)
{
return stk.top == stk.base;
}
int SqStackSize(SqStack& stk)
{
return stk.siz;
}
bool SqStackPush(SqStack& stk, ElemType e)
{
if(stk.top == stk.base + stk.siz) { //realloc.
ElemType * temp = new ElemType[stk.siz + STACKINCSIZE];
if(!temp) return false; //overflow.
stk.siz = stk.siz + STACKINCSIZE;
int cnt = stk.top - stk.base;
for(int i = 0; i < cnt; ++i)
temp[i] = stk.base[i];
delete stk.base;
stk.base = temp;
stk.top = stk.base + cnt;
}
*stk.top++ = e;
return true;
}
bool SqStackPop(SqStack& stk)
{
if(stk.base == stk.top)
return false;
--stk.top;
return true;
}
bool SqStackTop(SqStack& stk, ElemType &e)
{
if(stk.base == stk.top)
return false;
e = *(stk.top-1);
return true;
}
void SqStackDisplay(SqStack& stk)
{
ElemType* pcur = stk.top;
while(pcur != stk.base) {
cout << *(pcur-1) << " ";
--pcur;
}
cout << endl;
}