知识大全 数据结构考研分类复习真题 第四章 答案[22]
Posted 常量
篇首语:少年辛苦终身事,莫向光阴惰寸功。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 数据结构考研分类复习真题 第四章 答案[22]相关的知识,希望对你有一定的参考价值。
[题目分析]本题是对字符串表达式的处理问题 首先定义 种数据结构 符号的类码 符号的TOKEN 表示 变量名表NAMEL和常量表CONSL 这四种数据结构均定义成结构体形式 数据部分用一维数组存储 同时用指针指出数据的个数 算法思想是从左到右扫描表达式 对读出的字符 先查出其符号类码 若是变量或常量 就到变量名表和常量表中去查是否已有 若无 则在相应表中增加之 并返回该字符在变量名表或常量表中的下标;若是操作符 则去查其符号类码 对读出的每个符号 均填写其TOKEN表 如此下去 直到表达式处理完毕 先定义各数据结构如下
struct //定义符号类别数据结构 char data[ ]; //符号 char code[ ]; //符号类码 TYPL; typedef struct //定义TOKEN的元素 int typ; //符号码 int addr; //变量 常量在名字表中的地址 cmp; struct cmp data[ ];//定义TOKEN表长度< int last; //表达式元素个数 TOKEN; struct char data[ ]; //设变量个数小于 个 int last; //名字表变量个数 NAMEL; struct char data[ ]; //设常量个数小于 个 int last; //常量个数 CONSL; int operator(char cr) //查符号在类码表中的序号 for(i= ;i<= ;i++) if(TYPL data[i]==cr) return(i); void PROCeString() //从键盘读入字符串表达式(以 # 结束) 输出其TOKEN表示 NAMEL last=CONSL last=TOKEN last= ; //各表元素个数初始化为 TYPL data[ ]= * ;TYPL data[ ]= + ;TYPL data[ ]= ( ; TYPL data[ ]= ) ; //将操作符存入数组 TYPL code[ ]= ;TYPL code[ ]= ;TYPL code[ ]= ; TYPL code[ ]= ; //将符号的类码存入数组 scanf( %c &ch); //从左到右扫描(读入)表达式 while(ch!= # ) // # 是表达式结束符 switch(ch)of case A : case B : case C : //ch是变量 TY= ; //变量类码为 for(i= ;i<=NAMEL last;i++) if(NAMEL data[i]==ch)break;//已有该变量 i记住其位置 if(i>NAMEL last)NAMEL data[i]=ch;NAMEL last++;//变量加入 case : case : case : case : case : case ://处理常量 case : case :case : case : TY= ;//常量类码为 for(i= ;i<=CONSL last;i++) if(CONSL data[i]==ch)break;////已有该常量 i记住其位置 if(i>CONSL last){CONSL data[i]=ch;CONSL last++;}//将新常量加入 default: //处理运算符 TY=operator(ch);//类码序号 i= \\ ; //填入TOKEN的addr域(期望输出空白) //结束switch 下面将ch填入TOKEN表 TOKEN data[++TOKEN last] typ=TY;TOKEN data[TOKEN last] addr=i; scanf( %c &ch); //读入表达式的下一符号 //while //算法结束
[程序讨论]为便于讨论 各一维数组下标均以 开始 在字符为变量或常量的情况下 将其类码用TY记下 用i记下其NAMEL表或CONSL表中的位置 以便在填TOKEN表时用 在运算符( + * ( ) )填入TOKEN表时 TOKEN表的addr域没意义 为了程序统一 这里填入了 \\ 本题是表达式处理的简化情况(只有 个单字母变量 常量只有 操作符只 个) 若是真实情况 所用数据结构要相应变化
cha138/Article/program/sjjg/201311/22605相关参考
.() ()next[k] .()i=i+ ()j:=j+ ()i:=ij+ ()j:=; ()imt(或i:=ij+) () 程序
.()p的nextval函数值为(p的next函数值为) ()利用KMP(改进的nextval)算法每趟匹配过程如下 第一趟匹配abcaabbabcabaacbacba abcab(i=j=
.任意个连续的字符组成的子序列 . O(m+n) . . .()模式匹配 ()模式串 .()其数据元素都是字符()顺序存储()和链式存储()串的长度相等且两串中对
.()S的next与nextval值分别为和p的next与nextval值分别为和 ()利用BF算法的匹配过程
[题目分析]实现字符串的逆置并不难但本题要求不另设串存储空间来实现字符串逆序存储即第一个输入的字符最后存储最后输入的字符先存储使用递归可容易做到 voidInvertStore(charA[])
6.模式串的next函数定义如下 next[j]= 根据此定义可求解模式串t的next和nextval值如下 .解法同上题其next和nextval值分别为和 .解法同题t串的next和n
[题目分析]本题属于查找待查找元素是字符串(长)将查找元素存放在一维数组中二分检索(即折半查找或对分查找)是首先用一维数组的中间元素与被检索元素比较若相等则检索成功否则根据被检索元素大于或小于中间
[题目分析]两个串的相等其定义为两个串的值相等即串长相等且对应字符相等是两个串相等的充分必要条件因此首先比较串长在串长相等的前提下再比较对应字符是否相等 intequal(strtpsstrtp
.[题目分析]本题算法采用顺序存储结构求串s和串t的最大公共子串串s用i指针(<=i<=slen)t串用j指针(<=j<=tlen)算法思想是对每个i(<=i<
四.应用题 1.串是零个至多个字符组成的有限序列从数据结构角度讲串属于线性结构与线性表的特殊性在于串的元素是字符 2.空格是一个字符其ASCII码值是空格串是由空格组成的串其长度等于空格的个数