摘要: 逆波兰表达式(中缀转后缀表达式)##一 问题描述解析并计算 9+(3-1)*3+10/2 为后缀表达式 [9,3,1,-,3,*,+,10,2,/,+ ]中缀转后缀###1 描述:在我们转换中缀到后缀的过程,其实是一个取出表达式中的操作数或运算符号进行重排列的过程。主要的转换都是根据运算符号来进行的,从表达式中取出来的数字都会放入栈中,然后根据取出来运算符号来解析出新表达式。但是运算符号其实也有一个优先级,低优先级的符号应该比高优先级符号的解析优先级别要低,也就是先解析高优先级符号,然后才会解析低优先级符号。比如 9+2*3,此时应该先解析*也就是 2,3,* 然后才会解析 + 。最终结果为. 阅读全文
posted @ 2013-04-24 10:41 零界寒冰 阅读(187) 评论(0) 推荐(0) 编辑
摘要: 逆波兰表达式(简介)##一 问题描述解析并计算 9+(3-1)*3+10/2首先,以上的公式对于人来说是很好解析计算的。但是对于计算机来说就不是那么友好了。后来波兰的逻辑学家创建了一种后缀表达法类解决这个问题。这位同学的表示方法被称为逆波兰表达式。###1 后缀表达式:简单介绍下什么叫做中缀表达式和后缀表达式。中缀表达式:平时的计算表达式为中缀表达式,类似3-1这样的平时我们书写的格式。比如上面的9+(3-1)*3+10/2。后缀表达式:将计算的操作数放在前面,最后才放置操作符。称为后缀表达式。比如3-1的后缀表达式为 3,1, -。###2 后缀表达式的转换比如将上面表达式的中缀表达式转为后 阅读全文
posted @ 2013-04-24 10:04 零界寒冰 阅读(162) 评论(0) 推荐(0) 编辑
摘要: [算法初步]之快速排序##1 场景大家有没有见过苹果装箱呢,苹果长出来的时候总是大小不一的。这个时候就需要人工挑选出来,大的装一箱,小的装一箱。这样才能卖出合理的价钱。假如现在有一箱苹果,重量分别如下(好吧,外星球产的苹果,差别比较大。细节问题,不要关心~):* [3, 5, 1, 7, 6, 2, 11, 13, 4]我们决定分在个箱子里卖掉。当然要先把苹果按照制定的标准挑选出来,然后定一个统一价。小于这个标准和大于这个标准的装在另外2个箱子里。以不同的价格卖出。我们就以左边箱子装小苹果,右边的箱子装大苹果。下面就需要来挑拣了。首先怎么判定大小的标准呢,这个可是没有定数的。既然没有标准,我们 阅读全文
posted @ 2013-04-22 20:13 零界寒冰 阅读(150) 评论(0) 推荐(0) 编辑
摘要: [算法初步]希尔排序##1 描述##2 场景一群黑帮的大佬决定一起打一场牌,来小赌一把。于是他们来到一个赌场。3位大佬站在桌子的外围,发牌师站在桌子的内围。然后发牌师开始发牌,大佬们拿到牌后,结果如下:*[3, 7, A] [K, 6, 4][ J, 5, 2]结果大佬们很不满意,左边的大佬说我只要小牌,右边的大佬却只想要大牌。结果经过跟发牌师协调,这3位将每个人面前的第一张牌3,J,K丢给发牌时,让他重新排列发还。*[3, 7, A] [J, 6, 4] [K, 5 ,2 ]然后又将第二张也丢给发牌时排列发还。第三张也如此。结果如下:*[3, 5, A] [J, 6, 2] [K, 7, 4 阅读全文
posted @ 2013-04-22 20:12 零界寒冰 阅读(233) 评论(0) 推荐(0) 编辑
摘要: [数据结构]之栈##1 描述栈:后进先出的数据结构。栈是封底的,只能从一个方向写入读出。栈的实现有两种,基于顺序表方式和基于链表方式。栈的场景:比如浏览器的返回场景。顺序表实现:1)在顺序表的基础上创建栈。2)使用arr[0]作为栈底,arr[MAXSIZE]为栈顶。Top当栈顶元素位置标志,从0-MAXSIZE之间。3)局限:分配的空间固定。链表实现:1)链表的基础上创建栈。2)使用末尾节点作为栈底,头节点为栈顶。Top为栈顶元素位置标志。##2 数据结构* 顺序表实现:1)属性元素数组 elemets 栈顶元素位置 top元素个数 length(值为top+1)2)操作NewStack 初 阅读全文
posted @ 2013-04-17 17:27 零界寒冰 阅读(120) 评论(0) 推荐(0) 编辑
摘要: [数据结构]之链表##1 描述链表:对于当前链表中元素,除了存储本身的值,还存储有指示后面元素的地址(通常是指针或引用)。节点:每一个链表的元素称为一个节点。##2 数据结构节点Node,链表Linklist1)节点属性存储的数据 data指向下一元素的指针 next2)链表属性链表的起始节点 begin当前长度 3)操作Get(index)获取元素Insert(index,elem) 插入元素Delete(index) 删除第i个元素##3 go语言实现 package main import ( "fmt" ) /* * 定义节点 */ type Node struct 阅读全文
posted @ 2013-04-17 17:06 零界寒冰 阅读(117) 评论(0) 推荐(0) 编辑
摘要: [数据结构]之顺序表##1 描述顺序表:是指在一段连续的存储单元存储数据的线性表。多使用数组来实现。##2 数据结构1)属性:最大长度 CAP当前长度 Length存储数组 Elements2)操作:Get(index) 获取元素Insert(index,elem) 插入元素Delete(index) 删除第index个元素##3 go语言实现 package main import ( "fmt" ) const CAP = 20 type SqList struct { elemets [CAP]string length int } /* * 获取顺序表的第ind.. 阅读全文
posted @ 2013-04-17 16:48 零界寒冰 阅读(126) 评论(0) 推荐(0) 编辑
摘要: ##1 说明简单选择排序不用多说,也是属于一种选择排序。##2 场景:小学时候出操时候,老师都要求小学生按高矮站成一排。但是明显的小学生们没那么有意识,站成的队伍还是很混乱的。这个时候就只能由老师亲自出马进行排序了,比如一行队伍:* [3, 5, 1, 7, 6, 2, 11, 13, 4]老师认为前排站的肯定是最矮的同学,因此老师先把3号同学定义为最矮的同学。然后在此基础上调整。* [3, 5, 1, 7, 6, 2, 11, 13, 4] (标记3号最矮)结果老师往后走了一圈,发现后面的1号同学才应该是标记为最矮的,直接拉出来3号和1号交换位置。* 已排序[1] 未排序[5, 3, 7, 阅读全文
posted @ 2013-04-16 22:58 零界寒冰 阅读(128) 评论(0) 推荐(0) 编辑
摘要: [算法初步]之归并排序##1 说明归并排序##2 场景我一直觉得算法是在赌博中发明出来,比如这个归并算法,我们可以通过打麻将来模拟这个场景。一般打麻将抓牌,都是先抓好,等牌都抓齐了牌之后才会进行整理。比如我们手里抓到了从一万到九万,一手未排序的万子。* [3, 5 , 1, 7, 6, 2, 8, 9, 4]麻将这玩意一般比较大,一手一堆放不下,所以我们分为2堆来整理。* [[3, 5 , 1, 7][ 6, 2, 8, 9, 4]]干脆分到底好了,继续分成2张为一堆的。* [[[3, 5] [1, 7]] [[6, 2][ 8, 9] 4]]]继续拆,知道拆分为一张为一堆* [[[[3] [ 阅读全文
posted @ 2013-04-16 22:49 零界寒冰 阅读(188) 评论(0) 推荐(0) 编辑
摘要: [算法初步]之冒泡排序##1 描述冒泡排序是一种交换排序的方法。1)从一个方向开始比较,如果小于后面的数字,则交换位置。直到最小数字被交换到另一端。2)持续循环,从最小数字一直到最大数字都完成排序。##2 场景首选假设一根试管里面有N个气泡,这些气泡都是大小不同的,数字代表大小,但是这些气泡没有排序好的。如下:* 底层 [3, 5, 1, 7, 6, 2, 11, 13, 4] 上面我们假设小气泡的浮力比较大,大气泡更容易沉在水滴。但是眼前的这个排列明显不合规矩的,因为我们需要的是大的气泡沉在底下,而小的气泡浮在上面。这样才符合我们的期望。很明显,这个状态时不稳定的,必然会发生变化。这个变化的 阅读全文
posted @ 2013-04-15 20:15 零界寒冰 阅读(281) 评论(0) 推荐(0) 编辑