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;
    }
    

      

    运行结果:

  • 相关阅读:
    03-HTML之body标签
    02-HTML之head标签
    01-HTML介绍
    第十五章 并发编程
    第十四章 网络编程
    第十三章 模块和包
    第十二章 异常和错误
    第十一章 面向对象进阶
    第九章 常用模块(续)
    003 配置负载均衡
  • 原文地址:https://www.cnblogs.com/jerryleesir/p/13324168.html
Copyright © 2011-2022 走看看