顺序栈(用顺序表实现栈的逻辑)也可以改变主函数成顺序栈保存短除法求进制的结果

 1.  栈:先进后出(FILO) first in last out
                两种常见的实现方法:  顺序栈(用顺序表实现栈的逻辑)
                                      链式栈(用单链表实现栈的逻辑)
                (1) 顺序栈
                          栈的初始化
                          压栈(入栈):把数据存放到栈里面
                          弹栈(出栈):把数据从栈里面取出来
                          栈的销毁
                       struct  stack
                       {
                               int  a[10];  //存放整数的顺序栈
                               int  top;  //标记目前栈顶位置
                       };
                      //初始化顺序栈
                      struct  stack  *init_stack()
                      {
                              struct  stack  *mystack=malloc();
                              mystack->top=-1;
                              return mystack;
                      }
                      //压栈  push_stack
                      int push_stack(int newdata,struct  stack  *stack)
                     {
                             //判断栈是否满了
                      if(stack->top>=N-1)
                        {
                            printf("栈已满!\n");
                            return -1;
                        }

                            //更新栈顶
                            stack->top++;
                            //newdata入栈
                            stack->a[stack->top]=newdata;
                           
                     }
                    //出栈   pop_stack
                    int pop_stack(struct  stack  *stack)
                    {
                           //判断栈是否空了
                          if(stack->top<0)
                          {
                    printf("栈已空了!\n");
                    return -1;
                           }
                          //出栈
                          int result=stack->a[stack->top];
                          stack->top--; 
                          return result;
             }
    //栈的销毁
    int stack_uninit(struct seqstack *stack)
    {
        free(stack);
        return 0;
    }
          队列:先进先出
    int main()
    {
        //初始化一个栈
        struct seqstack *mystack=stack_init();
    
        //入栈几个数据
        push(mystack,10);
        push(mystack,11);
        push(mystack,12);

    
    //出栈几个数据
        printf("目前出栈的数据: %d\n",pop(mystack));
        printf("目前出栈的数据: %d\n",pop(mystack));
        printf("目前出栈的数据: %d\n",pop(mystack));
        printf("目前出栈的数据: %d\n",pop(mystack));
        printf("目前出栈的数据: %d\n",pop(mystack));
    
    //销毁顺序栈
    stack_uninit(mystack);
    return 0;
      }

=========================================================================

改变主函数成顺序栈保存短除法求进制的结果。

int main()
{
    int num;
    int n;
    int m; //保存余数
    int result; //保存出栈的结果
    //初始化一个栈
    struct seqstack *mystack=stack_init();
    
    printf("请输入一个整数!\n");
    scanf("%d",&num);
    
    printf("请输入你要求num的多少进制!\n");
    scanf("%d",&n);
    
    //循环不断地用num除以n,把余数入栈
    while(num>n)
    {
        //保存余数
        m=num%n;
        //余数入栈
        push(mystack,m);
        //改变num的值
        num=num/n;
    }
    push(mystack,num);
    
    //出栈几个数据
    while((result=pop(mystack))!=-1)
    {
        //由于16进制存在>=10的情况,需要用字母来表示
        if(result>=10) //10-->a(97)   11-->b(98)
            printf("目前出栈的结果是: %c\n",result+87);
        else
            printf("目前出栈的结果是: %d\n",result);
    }
    
    //销毁顺序栈
    stack_uninit(mystack);
    return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值