数据结构入门学习系列-8(栈的经典算法用例)
来源:互联网 发布:mariadb与mysql的语法 编辑:程序博客网 时间:2024/05/17 09:12
栈的经典使用:
1.进制转换
十进制向其他进制转换,涉及到一个基本算法,除模取余。及如下图所示:
假如从十进制n向八进制o转换:
n n(div)8 n(mod)8
964 120 4
120 15 0
15 8 7
1 0 1
即964(n)=1704(o)
简单算法如下:
//进制转换算法void Conversion(int n, int d){ Stack_Node *s; int k, *e; s = Init_Stack(); while(n>0) {//循环取模 k = n%d; push(s,k);//入栈 n = n/d; } while(s->top != NULL) { pop(s,*e);//出栈操作 printf("%1d",*e); }}2.括号匹配问题
括号的匹配算法也是栈结构的经典实用例子,基本思想就是设置一个栈,读取括号,如果是左括号,就进栈;如果是右括号就将栈顶的左括号出栈。直到读完所有括号,栈中的存储为空。那么括号就是严格匹配的。
具体算法如下:
//括号匹配问题#define FALSE -1#define TRUE 0SqStack s;s = Init_Stack();int Match_Brackets(){ char ch, sh; scanf("%c",&ch); while(int(ch)!=13) { if(ch = '(' || ch = '[') { push(s,ch); } else if(ch = ')') { x = pop(s); if(x != '(') { printf("不匹配!"); return FALSE; } } else if(ch = ']') { x = pop(s);\ if(x!='[') { printf("不匹配!"); return FALSE; } } } if(s.top != NULL) { printf("不匹配!"); return FALSE; } return TRUE;}3.栈的经典使用之递归算法
学程序的一定听过递归这种算法,核心思想就是利用栈的结构。层层解析入栈,然后层层运算出栈。
递归:一个函数直接或者间接调用自己本身。必须有递归规则,必须有退出条件。
例如求n的阶乘:
可以理解为从n到0一层层入栈,然后将计算后的值层层出栈。具体算法如下:
//n的阶乘int Fact(int n){ if(n==0) return n; if(n>0) return n*Fact(n-1);}
阅读全文
0 0
- 数据结构入门学习系列-8(栈的经典算法用例)
- 数据结构入门学习系列-2(算法的时间复杂度)
- 数据结构入门学习系列-7(栈的结构以及存储方式和算法)
- 数据结构入门学习系列-5(链表的基本操作算法)
- 数据结构入门学习系列-9(二叉树遍历的算法实现)
- 经典机器学习算法系列8-PCA
- 算法竞赛入门经典-STL数据结构的使用
- 各种数据结构与算法知识入门经典
- 算法竞赛入门经典_6数据结构基础
- 数据结构入门学习系列-1(基本数据结构)
- 《算法入门经典2》学习
- 算法入门经典二叉树系列 UVO
- [数据结构与算法]白话经典算法系列之五 归并排序的实现
- 算法竞赛入门经典第二版的学习
- 数据结构经典算法学习之三色旗
- 数据结构经典算法学习之多背包问题
- 数据结构与算法系列----学习数据结构与算法前你需要知道的
- 数据结构入门学习系列-6(链表合并与多项式合并算法)
- centos7 FTP搭建
- 数据结构:单链表,循环链表,双项链表的实现
- MD5加密
- poj1151-Atlantis(线段树+扫描线(经典题))
- 数字图像处理中常用的插值方法
- 数据结构入门学习系列-8(栈的经典算法用例)
- 【云栖大会精华汇】2017杭州云栖大会主论坛、分论坛在内的100+视频分享
- 创建ORACLE Job定时任务来跑存储过程
- 链表找环的起点
- 【Swoole】当SWOOLE遇上PHP
- mysql数据库计算两个经纬度之间的距离问题
- 对Spring注解了解不够引起的问题,@Autowired
- 5.2
- hdu-2602-Bone Collector(01背包)