ps:用栈很简单实现的应用有不少,好比说进制转换,括号匹配等。学计算机的都知道,2进制,8进制,10进制,16进制等,进制之间的转换也是须要掌握的,以备不时之需,因此咱们能够本身写一段程序若是会android的话,能够直接打包成APK。下面就按照这两个应用稍微写一点C语言的代码。android
想要本身作一个进制转换的工具,首先咱们要知道如何实现进制之间的转换,咱们日常用的都是10进制,若是想要转成8进制怎么办,按照方法,如图算法
能够看到,N是咱们输入的10进制数,除以8,余数保留在栈中,获得的168接着与8整除运算,直到N div 8 等于0,最后把栈中数据取出便可,正好用到了栈的规则,先进后出的特性。工具
typedef struct zhan{ int data; struct zhan *next; }zhan,*ZhanL;
/** * 初始化栈 * */ ZhanL initZhan(){ ZhanL L =(ZhanL)malloc(sizeof(zhan)); L->next=NULL; return L; }
在pop方法中,把L赋给s,主要是出栈后,把空余的栈位释放掉,push方法用到了尾插法。spa
/** * 进栈操做 * */ int push(ZhanL &L,int data){ //建立一个新的结点 ZhanL p=(ZhanL)malloc(sizeof(zhan)); p->data=data; p->next = L; L = p; return 0; } int pop(ZhanL &L){ if(L->next){ ZhanL s=L;//释放空间用 printf("%d ",s->data); L = L->next; if(L->next){ // printf("栈顶%d \n",L->data); } else{ printf("栈空\n"); } free(s); } return 0; }
/** * 转换方法 * */ int zhuanhuan(ZhanL &L,int data,int jz){ while (data){ push(L,data%jz); data = data/jz; } while (L){ pop(L); } return 0; }
int main(){ ZhanL L; L=initZhan(); printf("请输入一个十进制数"); int data,jz; scanf("%d",&data); printf("请输入转换的进制"); scanf("%d",&jz); zhuanhuan(L,data,jz); return 0; }
什么是括号匹配?code
在编写代码的时候,常常会用到两种括号:圆括号 “()” 和大括号 “{}” 。无论使用哪一种括号,程序编译没有问题的其中一个重要因素就是所使用的括号是否可以匹配上.
在编写程序时,括号能够嵌套,即: “({()})” 这种形式,但 “({)” 或者 “({}” 都不符合要求。blog
咱们能够从键盘录入字符,经过空格分开,在若是是左边括号( { ),就入栈,若是是右边括号( } )就出栈进行比较,看是否输入一对括号,若是匹配,就进行下一个比较,不然return,就没有再比较的必要了。由于上面有栈的入栈和出栈,这里就不在给出,使用上面便可.get
注意:把上面结构体中int型,改为char型。it
从控制台正常输入,空格隔开,碰见m结束,在输入期间,检测到左括号,进栈,右括号就要和和左括号比较,如何比较呢,咱们能够把右括号翻转,说白了就是碰见右括号就让它变成指定的左括号形式,如:if(ch == '}') 这时就能够把ch改为 { 再和栈中元素进行比较。编译
int main(){ ZhanLink zhanLink; zhanLink = initLink(); char ch; while(ch != 'm'){ scanf("输入%c ",&ch); ch = getchar(); switch (ch){ case '{': case '(': push(zhanLink,ch); break; case '}': case ')': // printf(" %c\n",ch); char e=pop(zhanLink); if(ch == '}'){ ch='{'; }else if(ch == ')'){ ch = '('; } // printf("修改后%c\n",ch); if(e == ch){ if(ch == '{'){ ch='}'; }else if(ch == '('){ ch = ')'; } printf("匹配%c %c\n",e,ch); }else{ printf("括号不匹配\n"); return 0; } break; } } printf("匹配合理"); // pop(zhanLink); return 0; }