手写栈
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<malloc.h>
using namespace std;
#define STACK_INIT_SIZE 1001
#define STACKINCREMENT 1001
#define OK 1
#define ERROR 0;
typedef char SElemType;
typedef struct
{
SElemType* base;
SElemType* top;
int stacksize;
} STACK;
int InitStack(STACK& 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 1;
}
char GetTop(STACK S)
{
char e;
if (S.top == S.base)
return ERROR;
e = *(S.top - 1);
return e;
}
int Pop(STACK& S)
{
char e;
if (S.top == S.base)
return -1;
e = *--S.top;
return OK;
}
int Empty(STACK S)
{
if (S.top == S.base)
return 1;
else
return 0;
}
int Push(STACK& S, SElemType 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 OK;
}
#include<iostream>
#include<string>
#include<cstring>
#include<cstdlib>
#include<malloc.h>
using namespace std;
#define STACK_INIT_SIZE 1001
#define STACKINCREMENT 1001
#define OK 1
#define ERROR 0;
typedef char SElemType;
typedef struct
{
SElemType* base;
SElemType* top;
int stacksize;
} STACK;
int InitStack(STACK& 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 1;
}
char GetTop(STACK S)
{
char e;
if (S.top == S.base)
return ERROR;
e = *(S.top - 1);
return e;
}
int Pop(STACK& S)
{
char e;
if (S.top == S.base)
return -1;
e = *--S.top;
return OK;
}
int Empty(STACK S)
{
if (S.top == S.base)
return 1;
else
return 0;
}
int Push(STACK& S, SElemType 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;