单项选择(2017年秋程序员软考)

表示“以字符a开头且仅由字符a、b构成的所有字符串”的正规式为【 】。

A、a*b*

B、(a|b)*a

C、a(a|b)*

D、(ab)*

答案解析

C正规式a*b*表示的是若干个a后面跟若干个b的字符串;(ab)*a表示的是以a结尾的所有由a、b构成的字符串;(ab)*表示b在a之后且a、b 交替出现的字符串;a(a|b)*表示以字符a开头且仅由...

查看完整答案

讨论

设有字符串S和P,串的模式匹配是指确定【 】。

设有字符串S='software',其长度为3的子串数目为【 】。

函数 Reverselist(LinkList headptr)的功能是将含有头结点的单链表就地逆置。处理思路是将链表中的指针逆转,即将原链表看成由两部分组成,已经完成逆置的部分和未完成逆置的部分,令s指向未逆置部分的第一个结点,并将该结点插入已完成部分的表头(头结点之后),直到全部结点的指针域都修改完成为止。例如,某单链表如图所示,逆置过程中指针s的变化情况如图(a)(b)所示。链表结点类型定义如下:typedef struct Node{ int data, struct Node *next;}Node, *LinkList;void ReverseList (LinkList headptr){//含头结点的单链表就地逆置, headptr为头指针 LinkList p,s; if(__(1)__) return;//空链表(仅有头结点)时无需处理 p=__(2)__;//令p指向第一个元素结点 if (!p->next) return;//链表中仅有一个元素结点时无需处理 s= p->next;//s指向第二个元素结点 __(3)__=NULL;//设置第一个元素结点的指针域为空 while (s){ p=s;//令p指向未处理链表的第一个结点 s=__(4)__; p-> next= headptr-> next;//将p所指结点插入已完成部分的表头 headptr-> next=__(5)__; }}

设有字符串S= "software",其长度为3的子串数目为【 】。

在数据结构中,【 】是与存储结构无关的术语。

队列采用如下图所示的循环单链表表示,左图表示队列为空,右图为e1、e2、e3依次入队列后的状态,其中,rear指针指向队尾元素所在结点,size为队列长度。以下叙述中,正确的是【 】。

对二叉树中的结点如下编号:树根结点编号为1,根的左孩子结点编号为2、右孩子结点编号为3,以此类推,对于编号为i的结点,其左孩子编号为2i、右孩子编号为2i+1。例如,下图所示二又树中有6个结点,结点a、b、c、d、e、f的编号分别为1、2、3、5、7、11。那么,当结点数为n(n>0)的【 】时,其最后一个结点编号为2n-1。

在单 CPU 计算机系统中,完成相同功能的递归程序比非递归程序【 】

线性表采用单循环链表存储的主要特点是【 】

正规式(ab|c)(0|1|2)表示的正规集合中有【 】个元素。