数据结构之---栈

作者: Cool_Pomelo | 来源:发表于2020-05-10 20:40 被阅读0次

    数据结构之---栈

    顺序栈

    内部采用数组实现

    结构图;

    定义结构体:

    typedef struct StackInfo
    {
        int topOfStack; /*记录栈顶位置*/
        ElementType stack[STACK_SIZE]; /*栈数组,也可以使用动态数组实现*/
    }StackInfo_st;
    
    

    函数声明

    int stack_push(StackInfo_st *s,ElementType value);
    int stack_pop(StackInfo_st *s,ElementType *value);
    int stack_top(StackInfo_st *s,ElementType *value);
    int stack_is_full(StackInfo_st *s);
    int stack_is_empty(StackInfo_st *s)
    

    进栈以及出栈

    图示:

    图2.png
    int stack_push(StackInfo_st *s,ElementType value)
    {
        if(stack_is_full(s))
            return FAILURE;
        /*先增加topOfStack,再赋值*/
        s->topOfStack++;
        s->stack[s->topOfStack] = value;
        return SUCCESS;
    }
    
    int stack_pop(StackInfo_st *s,ElementType *value)
    {
        /*首先判断栈是否为空*/
        if(stack_is_empty(s))
            return FAILURE;
        *value = s->stack[s->topOfStack];
        s->topOfStack--;
        return SUCCESS;
    }
    

    其余操作

    /*访问栈顶元素*/
    int stack_top(StackInfo_st *s,ElementType *value)
    {
        /*首先判断栈是否为空*/
        if(stack_is_empty(s))
            return FAILURE;
        *value = s->stack[s->topOfStack];
        return SUCCESS;
    }
    /*判断栈是否已满,满返回1,未满返回0*/
    int stack_is_full(StackInfo_st *s)
    {
        return s->topOfStack == STACK_SIZE - 1;
    }
    /*判断栈是否为空,空返回1,非空返回0*/
    int stack_is_empty(StackInfo_st *s)
    {
        return s->topOfStack ==  - 1;
    }
    
    

    链栈

    定义结构体:

    
    typedef struct StackInfo
    {
        ElementType value;
        struct StackInfo *next; /*指向栈的下一个元素*/
    }StackInfo_st;
    
    

    函数声明

    StackInfo_st *createStack(void);
    int stack_push(StackInfo_st *s,ElementType value);
    int stack_pop(StackInfo_st *s,ElementType *value);
    int stack_top(StackInfo_st *s,ElementType *value);
    int stack_is_empty(StackInfo_st *s);
    

    进栈以及出栈

    图示:

    图3.png
    
    int stack_push(StackInfo_st *s,ElementType value)
    {
        StackInfo_st *temp = malloc(sizeof(StackInfo_st));
        if(NULL == temp)
        {
            printf("malloc failed\n");
            return FAILURE;
        }
        /*将新的节点添加s->next前,使得s->next永远指向栈顶*/
        temp->value = value;
        temp->next = s->next;
        s->next = temp;
        return SUCCESS;
    }
    /*出栈*/
    int stack_pop(StackInfo_st *s,ElementType *value)
    {
        /*首先判断栈是否为空*/
        if(stack_is_empty(s))
            return FAILURE;
        /*找出栈顶元素*/
        *value = s->next->value;
        StackInfo_st *temp = s->next;
        s->next = s->next->next;
    
        /*释放栈顶节点内存*/
        free(temp);
        temp = NULL;
    
        return SUCCESS;
    }
    
    

    其余操作

    
    
    /*访问栈顶元素*/
    int stack_top(StackInfo_st *s,ElementType *value)
    {
        /*首先判断栈是否为空*/
        if(stack_is_empty(s))
            return FAILURE;
        *value = s->next->value;
        return SUCCESS;
    }
    /*判断栈是否为空,空返回1,未空返回0*/
    int stack_is_empty(StackInfo_st *s)
    {
        /*栈顶指针为空,则栈为空*/
        return s->next == NULL;
    }
    
    

    相关文章

      网友评论

        本文标题:数据结构之---栈

        本文链接:https://www.haomeiwen.com/subject/qqssnhtx.html