if(')'==*mid){
//遇到右括号时,栈顶元素依次出栈;直到遇到第一个左括号时结束 pop(&S,&e); *(final++)=e;
while(pop(&S,&e) && e!='('){ *(final++)=e; }
// printf(\ mid++;
continue; }
//后续的处理都要取出临时的栈顶元素,与当前输入的符号*mid相比较;当临时栈顶元素优先级大于等于输入符号的优先级时,出栈;否则符号入栈(已经弹出一个,记得把弹出的元素也入栈) pop(&S,&e);
if('+'==*mid || '-'==*mid){ if(e=='('){ push(&S,'('); push(&S,*(mid++)); continue; }else{
*(final++)=e; push(&S,*(mid++)); continue; }
}else if('*'==*mid || '/'==*mid){ if('*'==e || '/'==e){ *(final++)=e; push(&S,*(mid++)); continue; }else{
push(&S,e); push(&S,*(mid++)); continue; } }
}else{
printf(\输入的字符不合法!%c\\n\,*mid); return;
21
} }
//当待转换的字符已经结束时,符号栈至少还有一个元素(中缀表达式的特点:数字结尾;后缀表达式以符号结尾);将栈中的元素依次出栈 while(S.top!=-1){ pop(&S,&e); *(final++)=e; }
//字符串的结束符! *final='\\0'; }
int main() {
char data[]=\; char final[]=\; MidToFinal(data,final); printf(\,final); return 0; }
【11,4,3】设二叉树的存储结构如下:
Lchild data Rchild 1 0 J 0 2 0 H 0 3 2 F 0 4 3 D 9 5 7 B 4 6 5 A 0 7 8 C 0 8 0 E 0 9 10 G 0 10 1 I 0 其中根结点的指针值为6,Lchild,Rchild分别为结点的左、右孩子指针域,data为数据域。
(1) 画出二叉树的逻辑结构。
(2) 写出该树的前序、中序和后序遍历的序列。 答:
22
前序遍历:ECBHFDJIGA 中序遍历:ABCEDFHGIJ 后序遍历:ECHFJIGDBA
【12,4,4】可以生成如下二叉排序树的关键字的初始排列有几种?请写出其中的任意5个。
23
解:30种。任写5个序列如下: (5,4,7,6,2,3,1); (5,7,4,6,2,3,1); (5,4,7,2,3,1,6); (5,7,6,4,2,3,1); (5,7,6,4,2,1,3)
【13,4,5】给定关键字序列(11、7、16、4、22、13、5),请回答: (1)画出依次插入到一棵空的二叉排序树后的最终二叉树(6分); (2)画出依次把给定序列关键字插入一棵空的平衡二叉树后的结果(4分); 答:(1)
24
25