读书人

问点有关问题

发布时间: 2012-02-08 19:52:21 作者: rapoo

问点问题
while(priority(opst[top-1])> =priority(e[i]))
f[j++]=opst[--top];

opst[]是存放操作符的栈,e[i]是中缀表达式,f[j]是后缀表达式
priority()是个判断运算符优先级的函式

这个式子是说栈中的元素的优先级别是否大于中缀表达式中的运算符
我有个问题priority(opst[top-1])这个时候top-1了是吧
但是并没有赋值给top,所以原先的top并没改变直到opst[--top]时才改变的是吗?

//////////////////////////////////////////////////////////
还有个问题,平常写压入栈元素的函式是这样的
stack[top]=x;
top++;
但有个问题,栈压入元素其实是先改变top指针,然后再压入元素,这样写不矛盾吗?

/////////////////////////////////////////////////////////
第三个问题
为什么在一个循环队列中,队首指针指向队首元素的前一个位置?
刚开始队列为空,不是rear和front都在数组0的位置吗?怎么是前一个


//////////////////////////////////////////////////////////
第四个问题
循环队列队满条件为MAXSIZE-1,那下面的式子我就不明白了
对于下面判断队列满时候的情况我有点不明白
(sq-> rear+1)%MAXSIZE==sq-> front
在rear+1之前的rear是指向循环队列什么位置的?


[解决办法]
1、是的
2、其实有两种栈的实现,一种是top指向已有的元素,另一种是top-1指向已有元素。一般都使用后者。
3、初始时情况特殊
4、没看懂问题

这两种数据结构其实是比较简单的,LZ只要再仔细地看看书就行了

[解决办法]
栈和循环队列都有两种表示方法
为空时,栈可以用top=-1也可以用top=0 ,队列可以rear=front-1也可以rear=front
使用时相应地调整一个位置就没问题了
可以根据个人习惯写代码

读书人网 >软件架构设计

热点推荐