zoukankan      html  css  js  c++  java
  • 数据结构C语言实现----清空、销毁一个栈

    代码如下:

    #include<stdio.h>
    #include<stdlib.h>
    
    typedef struct 
    {
        char *base;
        char *top;
        int stacksize;
    }sqStack;
    
    //////////////////////////////////////
    //创建一个栈
    #define STACK_SIZE 100
    void initstack(sqStack *stack )
    {
        stack->base = (char*)malloc( STACK_SIZE * sizeof(char));
        if (!stack->base)
        {
            exit(0);
        }
        stack->top = stack->base;
        stack->stacksize = STACK_SIZE;
    }
    ////////////////////////////////////
    //入栈操作
    #define STACK_MORE 10
    void Push(sqStack *stack , char c)
    {
        if (stack->top - stack->base > stack->stacksize)
        {
            stack->base = (char*)realloc(stack->base , (stack->stacksize + STACK_MORE) * sizeof(char));
            if (!stack->base)
            {
                exit(0);
            }
            
            stack->top = stack->base + stack->stacksize;
            stack->stacksize = stack->stacksize + STACK_MORE;
        }
        *(stack->top) = c;
        stack->top++;
    }
    //////////////////////////////////////
    //出栈操作
    void Pop(sqStack *stack , char *c)
    {
        if (stack->base == stack->top)
        {
            return;
        }
        *c = *--(stack->top);
    }
    ///////////////////////////////////////
    //清空栈
    void ClearStack(sqStack *stack)
    {
        stack->top = stack->base;
    }
    //////////////////////////////////////
    //销毁一个栈
    void destoryStack(sqStack *stack)
    {
        for (size_t i = 0; i < stack->stacksize; i++)
        {
            free(stack->base);
            stack->base++;
        }
        stack->base=stack->top = NULL;
        stack->stacksize = 0;
    }
    
    
    int main()
    {
        sqStack stack;
        char c=1;
        printf("请安任意键创建一个栈...
    ");
        getchar();
        initstack(&stack);
        printf("创建成功!
    ");
        printf("请输入要压入栈的一个字符串(读取到0截至): ");
        while ((c = getchar()) != '
    ')
        {
            //scanf("%c",&c);
            //fflush(stdin);
            if (c!='
    ')
            {
                Push(&stack , c);
            }
        }
        printf("压入字符完成,正在打印字符串...
    ");
        for (size_t i = 0; i < (stack.top - stack.base); i++)
        {
            printf("%c",*(stack.base + i));
        }
        putchar('
    ');
        printf("请输入要弹出几个字符:");
        int k;
        scanf("%d",&k);
        while (k)
        {
            k--;
            Pop(&stack , &c);
            printf("字符%c已弹出!
    ",c);
        }
        printf("弹出字符完成,正在打印字符串...
    ");
        for (size_t i = 0; i < (stack.top - stack.base); i++)
        {
            printf("%c",*(stack.base + i));
        }
        putchar('
    ');
        printf("接下来你可以选择清空(输入1)或者销毁(输入2)这个栈:");
        scanf("%d",&k);
        fflush(stdin);
        switch (k)
        {
        case 1:
            ClearStack(&stack);
            if (stack.top == stack.base)
            {
                printf("清空完成!");
            }
            break;
        case 2:
            destoryStack(&stack);
            if(stack.base == NULL && stack.top == NULL && stack.stacksize == 0)
            {
                printf("已成功销毁!");
            }
            break;
        default:
            break;
        }
    
        return 0;
    }
    

      

    运行结果:

  • 相关阅读:
    基于html5拖拽api实现列表的拖拽排序
    vue组件keepAlive的使用
    阿里云OSS 服务端签名后直传之分片上传(结合element-ui的upload组件)
    element-ui(vue)upload组件的http-request方法的使用
    javascript知识梳理之数据类型
    解决nginx 出现 413:Request Entity Too Large
    git基本命令
    npm源管理
    element-ui的upload组件的clearFiles方法的调用
    vue实例的生命周期
  • 原文地址:https://www.cnblogs.com/jerryleesir/p/13324252.html
Copyright © 2011-2022 走看看