栈主要有空栈、判栈空、判栈满、进栈、出栈、取栈顶元素六种。

顺序栈

  • 空栈:

    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;
        }
    }
    
posted @ 2019-10-25 18:52  snail灬  阅读(141)  评论(0编辑  收藏  举报