栈的存储方式:
1、顺序栈:利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时附设指针top指示栈顶元素在顺序栈中的位置
2、链栈:利用链表实现
顺序栈的类C语言定义:
typedef struct{
SElemType *base;
SElemType *top; //设栈顶栈底两指针的目的是便于判断栈是否为空
int StackSize; //栈的当前可使用的最大容量.
}SqStack;
顺序栈的的模块说明:
struct STACK { 
SElemType *base; 
SElemType *top; 
int stacksize; 
}; 
typedef struct STACK Sqstack; 
Status InitStack(SqStack &S); 
Status DestroyStack(SqStack &S); 
Status ClearStack(SqStack &S); 
Status StackEmpty(SqStack S); 
int StackLength(SqStack S); 
Status GetTop(SqStack S,SElemType &e); 
Status Push(SqStack &S,SElemType e); 
Status Pop(SqStack &S,SElemType &e);
Status StackTraverse(SqStack S,Status (*visit)()); 
 
Status InitStack(SqStack &S) { 
S.base=(SelemType *)malloc(STACK_INIT_SIZE *sizeof(ElemType));
if(!S.base)exit(OVERFLOW); 
S.top=S.base; 
S.stacksize=STACK_INI_SIZE; 
return OK; 
}//IniStack 
Status DestroyStack(SqStack &S); { 
}//DestroyStack 
Status ClearStack(SqStack &S); {
S.top=S.base; 
} //ClearStack
Status StackEmpty(SqStack S); {
if(S.top==S.base) return TRUE; 
else return FALSE; 
} //StackEmpty
int StackLength(SqStack S); {
int i; SElemType *p; 
i=0; 
p=S.top;
while(p!=S.base) {p++; i++; }
} //stackLength
Status GetTop(SqStack S,SElemType &e); {
if(S.top==S.base) return ERROR; 
e=*(S.top-1); 
return OK; 
} //GetTop
Status Push(SqStack &S,SElemType e); { 
if(S.top - s.base>=S.stacksize) {
S.base=(ElemType *) realloc(S.base, 
(S.stacksize + STACKINCREMENT) * sizeof(ElemType)); 
if(!S.base)exit(OVERFLOW);
S.top=S.base+S.stacksize; 
S.stacksize+=STACKINCREMENT; 
} 
*S.top++=e; 
return OK;
} //Push
Status Pop(SqStack &S,SElemType &e); {
if(S.top==S.base) 
return ERROR; 
e=*--S.top; 
return OK; 
}//Pop 
Status StackTraverse(SqStack S,Status (*visit)()); { 
}//StackTraverse
以上伪代码的C语言源码