A、4
B、6
C、9
D、10
A、4
B、6
C、9
D、10
A、6/11
B、1
C、16/11
D、不确定
A、8
B、3
C、5
D、9
【Ex-9-2】假定用一个头指针为head的不带头结点的循环链表来实现一个有序表。指针current指向当前查找成功的结点,下一次如果给定值key大于current->data,可以从current开始查找,否则从head开始查找。下面算法的功能是:Bool search(CircList head, CircNode *¤t, DataType key)实现这种查找。当查找成功时函数返回true,同时current保存查找成功时结点的地址,若查找不成功则函数返回false,current不变。请在空白处填入正确的语句。 bool Search ( CircList head, CircNode *¤t, DataType key ) { circLinkNode *p, *q; if ( current == NULL ) ________①_______; if ( ________②________ ) { //确定检测范围, 用 p, q 指示 p = head; q = current; } else { p = current; q = head; } while ( ________③____________ ) p = p->link; //循链查找 if ( p->data == key ) { current = p; //找到 return true; } else return false; //未找到 }
【Ex-9-3】线性表中各结点的查找概率不等,则可用如下策略提高顺序查找的效率。若找到与给定值相匹配的元素,则将该元素与其直接前驱元素(若存在)交换,使得经常被查找的元素尽量位于表的前端。下面算法的功能是:在线性表的顺序存储表示和链接存储表示的基础上实现顺序查找。请在空白处填入正确的语句。 【解答】: (1) int SeqSearch ( SeqList &L, elemType x ) { // 在顺序表 L 中从表的前端开始查找与给定值 x 匹配的元素,找到后与它前一个元素 //(若有)交换位置,再返回新的位置(注意地址从 0 开始)。 int i = 0; elemType temp; while ( __________①__________ ) i++; if ( _____②_________ ) return 0; //查找不成功 else { //查找成功 if ( i > 0 ) { temp = L.elem[i - 1]; L.elem[i - 1] = L.elem[i]; L.elem[i] = temp; } return i; } } (2) LinkNode *LinkSearch ( LinkList &L, elemType x ) { LinkNode *p = L->link, _______③_________; while ( p != NULL && p->elem != x ) { ppre = pre; _____④_____; p = p->link; } if ( p != NULL && pre != L ) { //查找成功,交换结点 p 与 pre _______⑤_______; p->link = pre; ppre->link = p; } return p; }
为了保护您的账号安全,请在“简答题”公众号进行验证,点击“官网服务”-“账号验证”后输入验证码“”完成验证,验证成功后方可继续查看答案!