关于数据结构的问题,望解答,谢谢!
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 展开
A.2 B.3 C.4 D.5 展开
展开全部
//注意:以//%%开头的为本次修改的内容
//现在只是修改了编译错误。如果有问题,再帮你看看。
#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();
}
//现在只是修改了编译错误。如果有问题,再帮你看看。
#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();
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
C
37 10 20 26
37 10 20 26
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询