首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

数据结构静态查找关键字 为什么输入表元素会出错。求高手,该如何处理

2012-05-31 
数据结构静态查找关键字 为什么输入表元素会出错。。。求高手# includestdio.h# define elemtype inttypede

数据结构静态查找关键字 为什么输入表元素会出错。。。求高手
# include<stdio.h>
# define elemtype int 
 
typedef struct 
{
elemtype *elem;
  int length;
}table;


void main()

int i,j;table a;int key;
printf("请输入有序表长度:");
scanf("%d",&a.length);
printf("请输入有序表的元素:\n");
for(i=1;i<=a.length;i++)
scanf("%d",&a.elem[i]);
printf("请输入关键字:");
scanf("%d ",&key);
a.elem[0]=key;
for(j=a.length;(a.elem[j]!=a.elem[0])&&j>0;j--)
{
}

if(j==0)
printf("查找不成功!");
else 
printf("是第%d个元素",j);
}

[解决办法]
for(i=1;i<=a.length;i++)
scanf("%d",&a.elem[i]);//你的elem[i]在哪呢?没有分配内存的指针就直接使用会crash
[解决办法]
a.elem[i]压根就没有空间、数据怎么存储?从这个看来,你数组和指针没有分清楚、4楼的答案很好,但是申请空间后没有释放,会造成内存泄漏,所以配合4楼的程序代码为:
# include<stdio.h>
#include <malloc.h>
# define elemtype int

typedef struct
{
elemtype *elem;
int length;
}table;


void main()
{
int i,j;
table a;
int key;

printf("请输入有序表长度:");
scanf("%d",&a.length);

a.elem=(int*)malloc((a.length+1)*sizeof(int));//分配空间

printf("请输入有序表的元素:\n");
for(i=1;i<=a.length;i++)
{
scanf("%d",&a.elem[i]); //为了便于你理解,这里可以为:scanf("%d",a.elem+i);
}

printf("请输入关键字:");
scanf("%d",&key);//被你坑死了,这个地方你在%d后面打了个空格,我以为是我程序改得有问题,一直找到现在...
a.elem[0]=key;

printf("开始查找:\n");
for(j=a.length;j>0;j--)
{
if(a.elem[j]==a.elem[0])
break;
}
 free(a.elem); //释放资源
a.elem=NULL; //指针置空,以防野指针。
if(j==0)
printf("查找不成功!");
else
printf("是第%d个元素",j);
}

热点排行