知识大全 数据结构考研分类复习真题 第三章 答案[17]
Posted 表达式
篇首语:博观而约取,厚积而薄发。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 数据结构考研分类复习真题 第三章 答案[17]相关的知识,希望对你有一定的参考价值。
[题目分析]判断表达式中括号是否匹配 可通过栈 简单说是左括号时进栈 右括号时退栈 退栈时 若栈顶元素是左括号 则新读入的右括号与栈顶左括号就可消去 如此下去 输入表达式结束时 栈为空则正确 否则括号不匹配
int EXYX(char E[] int n) //E[]是有n字符的字符数组 存放字符串表达式 以 # 结束 本算法判断表达式中圆括号是否匹配 char s[ ]; //s是一维数组 容量足够大 用作存放括号的栈 int top= ; //top用作栈顶指针 s[top]= # ; // # 先入栈 用于和表达式结束符号 # 匹配 int i= ; //字符数组E的工作指针 while(E[i]!= # ) //逐字符处理字符表达式的数组 switch(E[i]) case ( : s[++top]= ( ; i++ ; break ; case ) : if(s[top]== ( top ; i++; break; elseprintf( 括号不配对 );exit( ); case # : if(s[top]== # )printf( 括号配对\\n );return ( ); else printf( 括号不配对\\n );return ( ); //括号不配对 default : i++; //读入其它字符 不作处理 //算法结束
[算法讨论]本题是用栈判断括号匹配的特例 只检查圆括号的配对 一般情况是检查花括号( ) 方括号( [ ] )和圆括号( ( ) )的配对问题 编写算法中如遇左括号( [ 或 ( )就压入栈中 如遇右括号( ] 或 ) ) 则与栈顶元素比较 如是与其配对的括号(左花括号 左方括号或左圆括号) 则弹出栈顶元素 否则 就结论括号不配对 在读入表达式结束符 # 时 栈中若应只剩 # 表示括号全部配对成功 否则表示括号不匹配
另外 由于本题只是检查括号是否匹配 故对从表达式中读入的不是括号的那些字符 一律未作处理 再有 假设栈容量足够大 因此入栈时未判断溢出
cha138/Article/program/sjjg/201311/22704相关参考
第三章 栈和队列答案 一选择题 BBABDCBDDCDBDDDCBCBDBBBDDDDCAADBBDCBCBACCFCCAAD 二判断题 √√√√×√√√√×√×××√×√×√√
见上题的解答 参见上面题 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=
[题目分析]这是以读入数据的顺序为相反顺序进行累乘问题可将读入数据放入栈中到输入结束将栈中数据退出进行累乘累乘的初值为 PROC test; CONSTmaxsize=; VARs