关于数据结构的问题,望解答,谢谢!

14.对于顺序存储的有序表(5,12,20,26,37,42,46,50,64),若采用折半查找,则查找元素26的查找长度()。A.2B.3C.4D.5... 14. 对于顺序存储的有序表(5,12,20,26,37,42,46,50,64),若采用折半查找,则查找元素26的查找长度( )。
A.2 B.3 C.4 D.5
展开
 我来答
混沌帅
2011-07-01
知道答主
回答量:23
采纳率:0%
帮助的人:8.8万
展开全部
答案为C、4
共有9个数
第一次:(1+9)/2=5 第5个数为37,26小于37,所以往左边找
第二次:(1+4)/2=2.5 取4,第2个数为12,26大于12,所以往12的右边找
第三次:(3+4)/2=3.5 取3,为20
第四次:(4+4)/2=4 为26
所以为4 顺序为37 12 20 26
灵秀且巍然的小雀3308
2011-06-30 · TA获得超过125个赞
知道答主
回答量:430
采纳率:0%
帮助的人:271万
展开全部
//注意:以//%%开头的为本次修改的内容
//现在只是修改了编译错误。如果有问题,再帮你看看。

#include<stdio.h>
#include <stdlib.h> //%%加上头文件,解决malloc等问题
#define STACK_INIT_SIZE 100 /*标识符定义不能使用减号*/
#define STACKINCREMENT 10
#define ERROR -1 /*添加ERROR定义*/
#define OVERFLOW -2 /*添加OVERFLOW定义*/
#define ok 1 /*添加ok定义*/
#define true 1 /*添加true定义,下文中ture全改为true*/
#define false 0 /*添加false定义*/

typedef struct
{
int ord;
int p;
int q;
}SELETYPE;
SELETYPE e;
typedef struct
{
SELETYPE*base;
SELETYPE*top;
int stacksize;
}sqstack;
int a[10][10]; /*你在print()函数中使用了a[][],必须定义为全局变量*/

int Initstack(sqstack*s)
{
s->base=(SELETYPE*)malloc(STACK_INIT_SIZE*sizeof(SELETYPE));
if(!s->base)
exit(OVERFLOW);
s->top=s->base;
s->stacksize=STACK_INIT_SIZE; /*修改,全改为STACK_INIT_SIZE*/
return ok;
}

int push(sqstack*s,SELETYPE f)
{
if(s->top-s->base>=s->stacksize)
{s->base=(SELETYPE*)realloc(s->base,(s->stacksize+STACKINCREMENT)*sizeof(SELETYPE));
if(!s->base)
exit(OVERFLOW);
s->top=s->base+s->stacksize;
s->stacksize+=STACKINCREMENT;
}
*s->top++=f;
return ok;
}

int pop(sqstack*s,SELETYPE f)
{
if(s->top==s->base)
return ERROR;
f=*--s->top; /* s.top 改为s->top */
return ok;
}

int stackempty(sqstack*s)
{
if(s->top==s->base)
return true;
else
return false;
}

void print()
{
int i,j;
for(i=0;i<10;i++)
{
printf("\n"); //%%printf()函数第一个参数必须为字符串
for(j=0;j<10;j++)
printf("%3d",a[i][j]);
}
}
int main()
{
int i,j,r1,r2,c1,c2,curstep=1;
sqstack*p;
printf("please input the enter:");
scanf("%d%d",&r1,&c1);
printf("please input the exit:");
scanf("%d%d",&r2,&c2);
for(i=0;i<10;i++)
{
printf("\n"); //%%printf()函数第一个参数必须为字符串
for(j=0;j<10;j++)
scanf("%d",&a[i][j]); /* 输入 a[i][j] 改为 &(a[i][j])*/
}
do
{
if(a[r1][c1]==1)
{
a[r1][c1]=curstep;
e.ord=curstep;
e.p=r1;
e.q=c1;
push(p,e);
if(r1==r2&&c1==c2)
return true;
c1++;
curstep++;
}
else
{
if(!stackempty(p)) //%%stackempty是函数,不是变量(要参数)
{
pop(p,e);
while(e.ord==4&&!stackempty(p)) /* dr 改为 e.ord, s 改为 p */
{
a[r1][c1]=-1;
pop(p,e);
}
if(e.ord<4) /* e.rd 改为 e.ord */
{
e.ord++; /* e.rd 改为 e.ord */
push(p,e);
switch(e.ord) /* e.rd 改为 e.ord */
{ /* switch 后加上花括号 */
case 2:
r1--;
break; /* case 后要加上 break; */
case 3:
c1--;
break; /* case 后要加上 break; */
case 4:
r1++;
break; /* case 后要加上 break; */
} /* switch 后加上花括号 */
}
}
}
}while(!stackempty(p)); /* s 改为 p */
print();
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
477986595
2011-06-29 · TA获得超过296个赞
知道小有建树答主
回答量:315
采纳率:0%
帮助的人:163万
展开全部
C
37 10 20 26
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式