知识大全 数据结构考研分类复习真题 第三章 答案[8]
Posted 表达式
篇首语:天下之事常成于困约,而败于奢靡。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 数据结构考研分类复习真题 第三章 答案[8]相关的知识,希望对你有一定的参考价值。
两栈共享一向量空间(一维数组) 栈底设在数组的两端 两栈顶相邻时为栈满 设共享数组为S[MAX] 则一个栈顶指针为 另一个栈顶指针为MAX时 栈为空
用C写的入栈操作push(i x)如下 const MAX=共享栈可能达到的最大容量 typedef struct node elemtype s[MAX] int top[ ] anode anode ds; int push(int i elemtype x) //ds为容量有MAX个类型为elemtype的元素的一维数组 由两个栈共享其空间 i的值为 或 x为类型为elemtype的元素 本算法将x压入栈中 如压栈成功 返回 否则 返回 if(ds top[ ] ds top[ ]== )printf( 栈满\\n ) return( ) switch(i) case ds s[++ds top[i]]=x break case ds s[ ds top[i]]=x return( ) //入栈成功
本程序段查找栈S中有无整数为k的元素 如有 则删除 采用的办法使用另一个栈T 在S栈元素退栈时 若退栈元素不是整数k 则压入T栈 遇整数k k不入T栈 然后将T栈元素全部退栈 并依次压入栈S中 实现了在S中删除整数k的目的 若S中无整数k 则在S退成空栈后 再将T栈元素退栈 并依次压入S栈 直至T栈空 这后一种情况下S栈内容操作前后不变
中缀表达式 ( + )*( / )的后缀表达式是 + / *
栈的变化过程图略(请参见 题) 表达式生成过程为
中缀表达式exp 转为后缀表达式exp 的规则如下
设操作符栈s 初始为空栈后 压入优先级最低的操作符 # 对中缀表达式从左向右扫描 遇操作数 直接写入exp 若是操作符(记为w) 分如下情况处理 直至表达式exp 扫描完毕
( )w为一般操作符( + * / 等) 要与栈顶操作符比较优先级 若w优先级高于栈顶操作符 则入栈 否则 栈顶运算符退栈到exp w再与新栈顶操作符作上述比较处理 直至w入栈
( )w为左括号( ( ) w入栈
( )w为右括号( ) ) 操作符栈退栈并进入exp 直到碰到左括号为止 左括号退栈(不能进入exp ) 右括号也丢掉 达到exp 中消除括号的目的
( )w为 # 表示中缀表达式exp 结束 操作符栈退栈到exp 直至碰到 # 退栈 整个操作结束
这里 再介绍一种简单方法 中缀表达式转为后缀表达式有三步 首先 将中缀表达式中所有的子表达式按计算规则用嵌套括号括起来 接着 顺序将每对括号中的运算符移到相应括号的后面 最后 删除所有括号
例如 将中缀表达式 ( + )*( / )转为后缀表达式 按如上步骤
执行完上面第一步后为 ( (( + )*( ( / ))))
执行完上面第二步后为 ( (( )+( ( )/) )*)
执行完上面第三步后为 + / *
可用类似方法将中缀表达式转为前缀表达式
cha138/Article/program/sjjg/201311/22716相关参考
第三章 栈和队列答案 一选择题 BBABDCBDDCDBDDDCBCBDBBBDDDDCAADBBDCBCBACCFCCAAD 二判断题 √√√√×√√√√×√×××√×√×√√
最大容量为n的循环队列队尾指针是rear队头是front则队空的条件是( )【南京理工大学 一(分)】 A(rear+)MODn=front 
见上题的解答 参见上面题 typedefstructnode elemtypeelemcq[m]; //m为队列最大可能的容量 intfrontrear;
typedefstruct elemtpq[m]; intfrontcount; //front是队首指针count是队列中元素个数 cqnode; &nbs
[题目分析]本题与上面题基本相同现用类C语言给出该双端队列的定义 #definemaxsize typedefstruct datatypeelem[maxsize]; int
#definemaxsize栈空间容量 voidInOutS(ints[maxsize]) //s是元素为整数的栈本算法进行入栈和退栈操作 inttop=;  
s=(LinkedList)malloc(sizeof(LNode))s>data=x;s>next=r>nextr>next=sr=s 牺牲一个存储单元 &n
既不能由输入受限的双端队列得到也不能由输出受限的双端队列得到的输出序列是dbca () () &nbs
本题与上题本质上相同现用类C语言编写入队和出队算法 ()voidEnQueue(LinkedListrearElemTypex) //rear是带头结点的循环链队列的尾指针本算法将元素x插入到
intMaxValue(inta[]intn)//设整数序列存于数组a中共有n个本算法求解其最大值 if(n==)max=a[]; elseifa[n]>MaxValue(an)max=