C语言程序使用链表结构出现段错误

#includetypedefstructelement*Hash;structelement{intx;inthash;intposition;Hashnext;};v... #include
typedef struct element *Hash;
struct element
{
int x;
int hash;
int position;
Hash next;
};
void Insert(int hash,int position,int x,Hash P)
{
Hash tmp;
if(tmp==NULL){
printf("Out of Space!");
}
else{
tmp->x=x;
tmp->hash=hash;
tmp->position=position;
tmp->next=P->next;
P->next=tmp;
}
}
Hash FindPosition(int hash,int position,int x,Hash L)
{
int i,count; Hash P;
count=position-hash;
P=L;
if(count>0){
while(count>=0){
if(P->positionposition>=hash){
P=P->next;
count--;
}
else if(x>P->x){
P=P->next;
}
if(P->next==NULL) break;
}
}
else if(count==0)
{
while(x>P->x) P=P->next;
}
else
{
count+=11;
while(count>0){
if(P->positionposition>position){
P=P->next;
count--;
}
else if(x>P->x)
{
P=P->next;
}
if(P->next==NULL) break;
}
}
return P;}
void Printresult(Hash L)
{
while(L!=NULL){
printf("%d",L->x);
L=L->next;
}
}
int main(void){
int N,i,x,hash;
Hash P,L,tmp;
scanf("%d",&N);
scanf("%d",&x);
L=malloc(sizeof(struct element));
if(L==NULL){ printf("Out of Space!"); }
else{
L->x=x;
L->hash=x%N;
L->position=0;
L->next=NULL;
}
for(i=1;i<N;i++){
scanf("%d",x);
if(x<0) hash="x%N;"
p="L-">next;
L->next=NULL;
while(P!=NULL){
tmp=P->next;
free(P);
P=tmp;
}
free(L);
}
展开
 我来答
爱默踢
推荐于2016-08-09 · TA获得超过265个赞
知道小有建树答主
回答量:350
采纳率:0%
帮助的人:173万
展开全部
/* 头文件的包含应写清楚 */
#include<stdio.h>
#include <malloc.h>

/* 原来的定义方式虽然可以,但是比较奇怪 */
typedef struct element
{
int x;
int hash;
int position;
struct element* next;
}S_HASH;
typedef S_HASH* Hash;

void Insert(int hash,int position,int x,Hash P)
{
Hash tmp = NULL; /* 未初始化,会导致接下来的if语句判断无效 */
if(tmp == NULL)
{
printf("Out of Space!");
}
else
{
tmp->x=x;
tmp->hash=hash;
tmp->position=position;
tmp->next=P->next;
P->next=tmp;
}
}

Hash FindPosition(int hash,int position,int x,Hash L)
{
int count;
Hash P;

count=position-hash;
P=L;
if(count>0)
{
while(count>=0)
{
if(P->position>=hash)
{
P=P->next;
count--;
}
else if(x>P->x)
{
P=P->next;
}
if(P->next==NULL) 
break;
}
}
else if(count==0)
{
while(x>P->x)
P=P->next;
}
else
{
count+=11;
while(count>0)
{
if(P->position>position)
{
P=P->next;
count--;
}
else if(x>P->x)
{
P=P->next;
}
if(P->next==NULL)
break;
}
}
return P;
}

void Printresult(Hash L)
{
while(L!=NULL)
{
printf("%d",L->x);
L=L->next;
}
}

int main(void)
{
int N,i,x,hash;
Hash P,L,tmp;
scanf("%d",&N);
scanf("%d",&x);
L = (Hash)malloc(sizeof(struct element));/* malloc时需指明数据类型 */
if(L==NULL)
{
printf("Out of Space!");
}
else
{
L->x=x;
L->hash=x%N;
L->position=0;
L->next=NULL;
}
for(i=1;i<N;i++)
{
scanf("%d",x);
if(x<0) 
hash=x%N; /* 不清楚为什么会加上"" */
P=L->next; /* 不清楚为什么会加上"" */
L->next=NULL;
while(P!=NULL)
{
tmp=P->next;
free(P);
P=tmp;
}
free(L);
}
} /* 缺少一个} */

只改了编译错误,逻辑上有无错误没看

更多追问追答
追问
好像把程序拷过来的时候有点问题……你提供的代码还是有段错误诶……
追答
把error贴出来撒
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式