#include<stdio.h>
#include <stdlib.h>
#include <Windows.h>
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define SElemType int
typedef struct {
SElemType *base;
SElemType *top;
int stacksize;
} SqStack;
/* 构造一个空栈 */
bool InitStack(SqStack &S)
{
S.base = (SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
if (!S.base) exit(1);
S.top = S.base;
S.stacksize = STACK_INIT_SIZE;
return TRUE;
}
/* 返回栈顶元素 */
bool GetTop(SqStack S, SElemType &e)
{
// 若栈不空,则用e返回S栈顶元素,并返回true,否则返回false
if (S.top == S.base) return FALSE;
e = *(S.top - 1);
return TRUE;
}
bool Push(SqStack &S, SElemType e)
{
//插入元素e为新的栈顶元素
if (S.top - S.base >= S.stacksize) //栈满,追加存储空间
{
S.base = (SElemType *)realloc(S.base, (S.stacksize+STACKINCREMENT)*sizeof(SElemType));
if (!S.base) exit(1);
S.top = S.base + S.stacksize;
S.stacksize += STACKINCREMENT;
}
*S.top++ = e;
return TRUE;
}
bool Pop (SqStack &S, SElemType &e)
{
//若栈不空,则删除S的栈顶元素,用e返回其值
if (S.top == S.base) return FALSE;
e = * --S.top;
return TRUE;
}
SElemType g_value = 0;
int main()
{
SElemType temp[6] = {100,200,300,400,500,600};
SqStack S;
InitStack(S);
for (int i=0; i<6; ++i)
{
Push(S, temp[i]);
}
GetTop(S, g_value);//获取栈顶元素
printf("g_value=%d \n", g_value);
for (int i=0; i<6; ++i)
{
Pop(S, g_value);
printf("g_value=%d \n", g_value);
}
system("pause");
return 0;
}