栈
ADT 栈
Operation:
InitStack(*S);
DestroyStack(*S);
ClearStack(*S);
StackEmpty(S);
GetTop(S,*e);
Push(*S,e);
Pop(*S,*e);
StackLength(S);
栈的结构定义
typedef int SElemType;
typedef struct{
SElemType data[MaxSize];
int top;
}SqStack;
进栈操作
Status Push(SqStack *S, SElemType e)
{
if(S->top==MaxSize-1)
return ERROR;
S->data[++S->top]=e;
return OK;
}
出栈操作
Status Pop(SqStack *S, SElemType *e)
{
if(S->top==-1)
return ERROR;
*e=S->data[S->top--];
return OK;
}
两栈共享空间
结构定义
typedef int SElmeType;
typedef struct{
SElemType data[MaxSize];
int top1;
int top2;
}SqDoubleStack;
进栈
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;
}
出栈
Status Pop(SqDoubleStack *S, SElemType *e, int StackNumber){
if(StackNumber==1){
if(S->top1==-1) return ERROR;
*e=S->data[S->top1--];
}
if(StackNumber==2){
if(S->top1==MaxSize) return ERROR;
*e=S->data[S->top2++];
}
return OK;
}
栈的链式存储结构
结构代码
栈链不需要头结点
typedef struct StackNode{
SElemType data;
struct StackNode *next;
}StackNode, *LinkStackPtr;
typedef struct LinkStack{
int count;
LinkStackPtr top;
}LinkStack;
进栈
Status Push(LinkStack *S, SElemType e){
LinkStackPtr s=(LinkStackPtr)malloc(sizeof(StackNode));
s->data=e;
s->next=S->top;
S->count++;
S->top=s;
return OK;
}
出栈
Status Pop(LinkStack *S, SElemType *e){
if(StackEmpty(S))
return ERROR;
LinkStackPtr p;
*e=S->top->data;
p=S->top;
S->top=p->next;
free(p);
S->count--;
return OK;
}