栈
栈
栈主要有空栈、判栈空、判栈满、进栈、出栈、取栈顶元素六种。
顺序栈
-
空栈:
void InitStack(SeqStack *S){ S->top = -1; }
-
判栈空
int StackEmpty(SeqStack *S){ return S->top==-1; }
-
判栈满
int StackFull(SeqStack *S){ return S->top == StackSize -1; }
-
进栈
void Push(SeqStack *S,DataType x){ if(StackFull(S)){ prinf("stack overflow"); }else{ S->top = S->top+1; S->data[S->top]=x; } }
-
出栈
DataType Pop(){ if(StackEmpty(S)){ prinf("stack underflow"); exit(0); }else{ return S->data[S->top--]; } }
-
取栈顶元素
DataType GetTop(SeqStack *S){ if(StackEmpty(S)){ prinf("stack empty"); exit(0); }else{ return S->data[S->top]; } }
链栈
-
判栈空
int StackEmpty(LinkStack top){ return top == NULL; }
-
进栈
LinkStack Push(LinkStack top,DataType x){ StackNode *p; p=(StackNode *)malloc(sizeof(StackNode)); p->data=x; p->next=top; top=p; return top; }
-
出栈
LinkStack Pop(LinkStack top,DataType x){ StackNode *p=top; if(StackEmpty(top)){ prinf("stack empty"); exit(0); } else{ *x=p->data; top=p->next; free(p); return top; } }
-
取栈顶元素
DataType GetTop(LinkStack top){ if(StackEmpty(top)){ prinf("stack empty"); exit(0); }else{ return top->data; } }