顺序结构
头定义
#define MAXSIZE 20
#define ERROR 0
#define OK 1
结构定义
typedef int SElemType;
typedef struct
{
SElemType data[ MAXSIZE] ;
int top;
} SqStack;
进栈操作Push
Status Push ( SqStack * S, SElemType e)
{
if ( S-> top == MAXSIZE - 1 )
return ERROR;
S-> top++ ;
S-> data[ S-> top] = e;
return OK;
}
出栈操作Pop
Status Pop ( SqStack * S, SElemType * e)
{
if ( S-> top == - 1 )
return ERROR;
* e = S-> data[ S-> top] ;
S-> top-- ;
return OK;
}
两栈共享空间结构
结构定义
typedef struct
{
SElemType data[ MAXSIZE] ;
int top1;
int top2;
} SqDoubleStack;
进栈操作Push
Status Push ( SqDoubleStack * S, SElemType e, int stacknumber)
{
if ( S-> top1 + 1 == S-> top2)
return ERROR;
if ( stacknumber == 1 )
S-> data[ ++ S-> top1] = e;
else if ( stacknumber == 2 )
S-> data[ -- S-> top2] = e;
return OK;
}
出栈操作Pop
Status Pop ( SqDoubleStack * S, SElemType * e, int stacknumber)
{
if ( stacknumber == 1 )
{
if ( S-> top1 == - 1 )
return ERROR;
* e = S-> data[ S-> top1-- ] ;
}
else if ( stacknumber == 2 )
{
if ( S-> top2 == MAXSIZE)
return ERROR;
* e = S-> data[ S-> top2++ ] ;
}
return OK;
}
链式结构
头定义
#include <stdlib.h>
#define MAXSIZE 20
#define ERROR 0
#define OK 1
typedef int Status;
typedef int SElemType;
结构定义
typedef struct StackNode
{
SElemType data;
struct StackNode * next;
} StackNode, * LinkStackPtr;
typedef struct LinkStack
{
LinkStackPtr top;
int count;
} LinkStack;
进栈操作Push
Status Push ( LinkStack * S, SElemType e)
{
LinkStackPtr s = ( LinkStackPtr) malloc ( sizeof ( StackNode) ) ;
s-> data = e;
s-> next = S-> top;
S-> top = s;
S-> count++ ;
return OK;
}
出栈操作Pop
Status Pop ( LinkStack * S, SElemType * e)
{
LinkStackPtr p;
if ( S-> top == NULL )
return ERROR;
* e = S-> top-> data;
p = S-> top;
S-> top = S-> top-> next;
free ( p) ;
S-> count-- ;
return OK;
}