zoukankan      html  css  js  c++  java
  • 栈的应用

    栈的应用

    1,进制转换

    把十进制转换成二进制

    思路:要转换成几进制,就除以几,比如要转换成二进制,就每次除以2;比如要转换成16进制,就每次除以16;直到除没了为止。每次除之前,取模。把每次取到的模,压入栈。栈顶的值就是二进制的最大位,所以打印的时候,从栈顶开始打印。

    #include <stdio.h>
    #include <malloc.h>
    
    push(int** top, int val){
      //先取二级指针指向的值,再取一级指针指向的值,最后让一级指针指向上面一个地址
      *(*top)++ = val;
    }
    int pop(int** top){
      //先取二级指针指向的值,再让一级指针的指向下面以个位置,最后取一级指针指向的值
      return *--(*top);
    }
    int main(){
    
    
      int *top, *base;
      top = base = (int*)malloc(sizeof(int) * 32);
      printf("请输入要转换的数字
    ");
      int c,d;
      scanf("%d", &d);
      while(d != 0){
        c = d % 2;
        push(&top, c);
        d = d / 2;
      }
    
      while(top != base){
        printf("%d", pop(&top));
      }
      printf("
    ");
    
    }
    

    2.各种括号配对

    检查各种括号的嵌套,是否正确。

    匹配正确例子:{([])[]}

    匹配错误例子:{([)]}

    思路:压栈之前和栈顶元素比较,如果匹配,就把栈顶元素出栈,如果不匹配就压栈。

    最后看栈是否为空,如果不为空就说明匹配不成功。

    #include <stdio.h>
    #include <malloc.h>
    #include <string.h>
    
    void pop(char** top){
      --(*top);
    }
    void push (char** top, char * base, char s){
      switch (s){
      case ']':
        s = '[';
        break;
      case ')':
        s = '(';
        break;
      case '}':
        s = '{';
        break;
      default:
        break;
      }
      //保存top的指向
      char* tmp = *top;
      //第一次压栈,或者,s和栈顶的值不相同就继续压栈
      if(*top == base || s != *--tmp){
        *(*top)++ = s;
      }
      //s和栈顶的值相同就弹出
      else{
        pop(top);
      }
    }
    int main(){
      char* s = "[({}[])]";
      //char* s = "[";
      char *top, *base;
      top = base = (char*)malloc(sizeof(char) * strlen(s));
      int i = 0;
      for(; i < strlen(s); ++i){
        push(&top, base, s[i]);
      }
      //如果栈顶又回到了栈底,就说明完全都匹配上了
      if(top == base){
        printf("success
    ");
      }else{
        printf("dead
    ");
      }
      free(base);
    }
    
  • 相关阅读:
    深度学习在graph上的使用
    简单区分单射、满射与双射
    CSS自定义属性expression_r
    在linux命令下访问url
    Linux添加/删除用户和用户组
    mysql命令
    LAMP 版本查看
    php 下载文件
    linux 自动备份数据库
    linux下添加定时任务
  • 原文地址:https://www.cnblogs.com/xiaoshiwang/p/9243841.html
Copyright © 2011-2022 走看看