zoukankan      html  css  js  c++  java
  • 顺序栈

    顺序栈

     顺序栈是一种受到限制的顺序表,数据只能从栈顶压入,先进后出原则,遵从栈的逻辑。

    构造顺序栈

     使用结构体来构造顺序栈,其中stack是用来存储数据的,size是用来指明数据的个数,top是用来指明栈顶的位置。

    typedef struct seqlist_stack{
    
        int *stack;
        int size;
        int top;
    }my_seqlist_stack,*p_seqlist_stack;
    

    初始化

    p_seqlist_stack init_list(int size)
    {
        p_seqlist_stack new_list = calloc(1, sizeof(my_seqlist_stack));
        new_list->stack =  calloc(size, sizeof(int));
    
        new_list->size = size;
        new_list->top  = 0;
    
        if (NULL == new_list)
            return NULL;
    
        return new_list;
    }
    

    注意:
    需要给结构体成员*stack分配一个空间。

    压栈

    
    int input_msg(char * msg)
    {
        // 让用户输入新的数据
        int num ;
        printf("%s:" , msg);
        scanf("%d" , &num);
        while(getchar() != '
    ');
    
        return num;
    }
    
    bool push_stack(p_seqlist_stack list)
    {
        if (list->top > list->size)
        {
            printf("栈满,压栈失败!!!
    ");
            return false;
        }   
       
       int data = input_msg("输入数据,压栈");
       list->stack[list->top++] = data;
    
        return true;
    }
    

    注意:
    需要判断栈是否满了,满了数据会存储不下。

    出栈

    int pop_stack(p_seqlist_stack list)
    {
        if (0 == list->top)
        {
            printf("出栈失败,栈是空的
    ");
            return -1;
        }
    
        int tmp = list->stack[list->top-1];
        list->top--;    
        
        return tmp;
    
    }
    

    注意:
    1.需要判断栈中是否还有数据;
    2.list->top需要先减1才能取数据,不然数据将错位,并且少一个。

    测试程序

    int test()
    {
        p_seqlist_stack list = NULL;
        int size;
    
        list = init_list(10);
        if(NULL == list)
            return false;
    
        push_stack(list);
        push_stack(list);
        push_stack(list);
        push_stack(list);
        push_stack(list);
    
        for (int i = 0; i < 5; i++)
        {
             int data = pop_stack(list);
             printf("data:%d
    ", data);
        }
    
        return 0;
    }
     
    
  • 相关阅读:
    Spring基础系列-参数校验
    Spring基础系列-容器启动流程(1)
    Java面试系列--java基础
    RabbitMQ基础系列--客户端开发
    Spring基础系列--AOP织入逻辑跟踪
    Spring基础系列--AOP实践
    Spring基础系列-AOP源码分析
    Java设计模式之《模板模式》及使用场景
    Spring基础系列-容器启动流程(2)
    Spring基础系列-容器启动流程(1)
  • 原文地址:https://www.cnblogs.com/ding-ding-light/p/14117372.html
Copyright © 2011-2022 走看看