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);
    }
    
    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('
    ');
        return 0;
    }
    

      

    运行结果:

  • 相关阅读:
    13、字符串相互匹配删除
    12、指定长度替换制表符
    11、输入字符颠倒输出
    10、字符串输入删除末尾特殊符,清除空行
    9、筛选满足长度条件的输入内容进行输出
    8、获取输入的字符串并输出最长的那个
    7、初识函数
    6、计数垂直直方图输出
    5、计数水平直方图输出
    Tiny4412 Uboot
  • 原文地址:https://www.cnblogs.com/jerryleesir/p/13324168.html
Copyright © 2011-2022 走看看