麻烦帮忙修改一下带头结点的单链表电话本
#include "stdio.h"#include "string.h"
#include "stdlib.h"
#define maxsize 100
typedef int datatype;
typedef struct {
char name[20];
long int number;
}telephone_list;
typedef struct link_node{
telephone_list info;
struct link_node *next;
}node;
node *init()//创建带头链表
{
node *head;
head=(node*)malloc(sizeof(node));
head->next=NULL;
return head;
}
void display(node *head)//依次打印各个节点内容
{
node *p;
p=head->next;
if(!p) printf("\n电话本是空的!") ;
else
{
printf("\n电话本的列表:\n");
while(p)
{
printf("name:%s\t",p->info.name);
printf("telephone:%ld\n",p->info.number);
p=p->next;
}
}
}
node *find(node *head,int i)//按节点查找内容
{
int j=0;
node *p=head;
if (i<0)
{printf("\n节点不存在");return NULL;}
else if(i==0) return p;
while(p&&i!=j)
{p=p->next;j++;}
{printf("name:%s\t",(p->info).name);
printf("telephone:%ld\n",(p->info).number);}
return p;
}
void name_find(node *head,char name[20])//按名字进行查找
{
int t;
node *p=head;
while(t!=0)
t=strcmp(name,p->info.name);
if (t==0)
{printf("name:%s\t",(p->info).name);
printf("telephone:%ld\n",(p->info).number);}
else p=p->next;
}
void number_find(node *head,long int x)//按内容进行查找
{
node *p=head;
while(x!=p->info.number)
{p=p->next;}
{printf("name:%s\t",(p->info).name);
printf("telephone:%ld\n",(p->info).number);}
}
node *insert(node *head,telephone_list x,int i)//按节点插入值
{
node *p,*q;
q=find(head,i);
if(!q)
{
printf("插入点不存在");return NULL;
}
p=(node*)malloc(sizeof(node));
p->info=x;
p->next=q->next;
q->next=p;
return head;
}
node *insert1(node *head,telephone_list x,char name[20])//在指定节点值后插入一个新节点
{
int t;
node *p=head,*q=head;
while(t!=0)
{
t=strcmp(name,p->info.name);
if (t==0)
{
p=(node*)malloc(sizeof(node));
p->info=x;
p->next=q->next;
q->next=p;
strcpy(p->info.name,x.name);
p->info.number=x.number;
}
else p=p->next;
}
return head;
}
node *change(node *head,telephone_list x,char name[20])//指定值节点的数值修改
{
int t;
node *p=head;
while(t!=0)
{
t=strcmp(name,p->info.name);
if (t==0)
{
p->info=x;
strcpy(p->info.name,x.name);
p->info.number=x.number;
}
else p=p->next;
}
return head;
}
node *dele(node *head,telephone_list x)//删除制定内容节点
{
node *pre=head,*q;
q=head->next;
while(q&&q->info.name!=x.name)
{pre=q;q=q->next;}
pre->next=q->next;
free(q);
return head;
}
void main()
{struct link_node head;
init();//建立头结点
telephone_list ljr;//建立一个叫ljr的电话本
int i=1;
while(i<=10)
{
sprintf(ljr.name,"english_name%d",i);
ljr.number = 123456789+i;
insert(&head,ljr,i);
i++;
}
display(&head);
find(&head,3);
char a[20]="english_name5";
name_find(&head,a);
number_find(&head,1234567890);
insert1(&head,ljr,a);
change(&head,ljr,a);
dele(&head,ljr);
}
麻烦各位帮忙看一下,语法方面已经编译通过,经过自己的一步一步检验,程序在一开始运行到用insert插入原始数据的时候就出错,请问逻辑上出了什么问题吗?自己看了很久很久都搞不清楚,谢谢了!!