1、 中缀表达式转后缀表达式

开始遍历

若为数字,则加入后缀表达式

若为运算符,则:

a. 若为 '(' ,入栈。

b. 若为 ')' ,则依次把栈中的的运算符加入后缀表达式中,直到出现’(’ ,从栈中删除'('

c. 若为除括号外的其他运算符,当其优先级高于除'(' 以外的栈顶运算符时,直接入栈。否则从栈顶开始,依次出比当前处理的运算符优先级高和优先级相等的运算符,直到一个比它优先级低的或者遇到了一个左括号为止。

当遍历的中缀表达式结束时,栈中的的所有运算符出栈。

 

2、 后缀表达式的计算

后缀表达式的计算就是从左到右遍历表达式,遇到数字就将其放入栈,遇到操作符则表示可以计算,此时取出栈顶的两个元素ab, 计算:b(操作符)a =(结果)。然后将结果压入栈,最后栈里会只留下一个元素,该元素就是运行的结果。

 

3、 中缀表达式转后缀表达式以及计算后缀表达式同时进行的方法

首先,中缀表达式转后缀表达式需要一个栈,这个栈是用来存运算符的。在后缀表达式计算时也需要一个栈,这个栈是用来存数字的。所以若要同时进行这两部,则需要2个栈。一个用来存运算符(栈opt),一个用来存数字(栈num)。

先对中缀表达式进行扫描如:A+B*C-D/E

遇到数字则入栈num

遇到运算符则进行判断出入栈条件:

1 opt为空,入栈。

2 该符号优先级大于栈顶符号,入栈。

3 左括号(,入栈。

4 栈顶符号为左括号,入栈。

5 若该符号优先级小于等于栈顶符号,则栈顶符号依次出栈进行计算,直到该符号的优先级大于栈顶符号。

6 当该符号为右括号)时,栈顶符号依次出栈进行计算,直到栈顶符号为左括号(,

  栈顶左括号出栈,舍弃左括号和右括号。

简单来说就是左括号都进栈。遇到右括号,则把右括号和左括号之间的运算符依次拿出来计算,算完后把左右括号扔了。遇到优先级高于栈顶运算符的四则运算符就进栈(*高于+),如果平级或者比较低,那就把栈里比你高的运算符依次拿出来计算,直到你是最高的了,然后进栈。

计算的步骤就是一个运算符要计算,就从num栈里依次拿出两个数字,ab

然后a 运算符 b(如a /b,然后把结果放回到num栈中。

        最后,opt栈中为空了(运算符都算完了),这个时候num栈中就只有一个数字,就是答案。

 

4、 两栈共享储存空间

其实栈的顺序存储很方便,因为它只在表尾进行操作,不存在普通线性表插入与删除还需要移动元素的情况。同样它也有普通线性表的缺陷,即必须确定数量。然而对于两个相同类型的栈,却可以做到最大限度地利用其开辟的存储空间来进行操作。

数组有两个端点,两个栈使用这一个数组的存储区域,两个栈有两个栈底,分别为数组的始端和末端。这样在压栈的时候,是栈顶指针往中间靠拢,当两指针相遇时,则栈满。栈空即top1=-1,top2=n。而栈满则是top1 + 1 == top2;

5、 某系统中有3个并发进程,都需要同类资源4 个,试问该系统不会发生死锁的最少资源数是:(10

死锁:指多个进程因为竞争资源而造成的一种僵局,若无外力作用,这些进程都将永远不能再向前推进。

若资源小于等于9个,则可能造成每个进程都占有3个资源,但是没有一个进程能够运行。陷入僵局。

若资源有10个,则有2个进程拥有3个资源,1个进程有4个资源。那么总有进程在运行,所以不会死锁。

 

6、 虚拟内存和物理内存

物理内存所指的就是你主板上所插的可以看到的内存条,它的容量有64M128M256M512M等不同规格。

内存在计算机中的作用很大,电脑中所有运行的程序都需要经过内存来执行,如果执行的程序很大或很多,就会导致内存消耗殆尽。为了解决这个问题,Windows中运用了虚拟内存技术,即拿出一部分硬盘空间来充当内存使用,当内存占用完时,电脑就会自动调用硬盘来充当内存,以缓解内存的紧张。举一个例子来说,如果电脑只有128MB物理内存的话,当读取一个容量为200MB的文件时,就必须要用到比较大的虚拟内存,文件被内存读取之后就会先储存到虚拟内存,等待内存把文件全部储存到虚拟内存之后,跟着就会把虚拟内存储存的文件释放到原来的安装目录里了。

7、 虚拟内存可以无限扩大吗?受什么限制?

只要你的硬盘足够大,理论上是可以的,但是虚拟内存受寻址空间的限制。如32位机的寻址空间最大为4G。所以虚拟内存只有4GB是有用的。多余的是浪费。

8、 总线分为几种

9、三种总线

 

地址总线

CPU通过地址总线来制定存储单元。地址总线上能传送多少个不同的信息,CPU就可以对多少个存储单元进行寻址。

地址总线的宽度决定了CPU的寻址能力。

数据总线

CPU与内存或其他部件之间的数据传送是通过数据总线来进行的。数据总线的宽度决定了CPU和外界的数据传送速度。

数据总线的宽度决定了CPU与其他器件进行数据传送时的一次数据传送量。

控制总线

控制总线的宽度决定了CPU对系统中其他器件的控制能力。

 

用个比较通俗的说法:

数据总线:好比是高速公路,公路越宽,单位时间内通过的车就越多!

地址总线:好比是你的嘴,嘴越大,一口吃的东西就越多!

 

10、递归

一个函数在它的函数体内调用它自身称为递归(recursion)调用。是一个过程或函数在其定义或说明中直接或间接调用自身的一种方法,通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解。递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。用递归思想写出的程序往往十分简洁易懂。

递归中最主要的是描述递归关系和确定递归边界。确定递归边界十分重要,如果没有确定递归边界,将导致程序无限递归而引起死循环。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值