头文件已经省略,运行总是主函数的循环出问题,不知道哪里的原因,请求指点。
struct Node
{
int h;
char name[10];
int score;
struct Node *next;
};
typedef struct Node NODE;
//链表结构体创建部分
NODE *Creat_Link(nmb)
{
int i=0;
NODE *heat,*tall,*pwne;
heat=(NODE *)malloc(sizeof(NODE));
if(heat==NULL)
{
printf("地址分配错误\n");
return(NULL);
}
heat->next=NULL;
tall=heat;
for(i=0;i<nmb;i++)
{
pwne=(NODE *)malloc(sizeof(NODE));
if(pwne==NULL)
{
printf("地址分配错误\n");
return(NULL);
}
scanf("%d%s%d",&(pwne->h),(pwne->name),&(pwne->score));
pwne->next=NULL;
tall->next=pwne;
tall=pwne;
}
return heat;
}
//链表创建部分
void Print_Link(NODE* heat)
{
NODE* p=heat;
printf("输出结果为:\n");
printf("学号 姓名 分数\n");
while(p->next!=NULL)
{
p=p->next;
printf(" %d ",p->h);
printf(" %s ",p->name);
printf(" %d\n",p->score);
}
}
//链表打印部分
NODE ChaR(NODE heat,int h)
{
int i=0;
NODE* p=heat;
NODE tall;
NODE q;
NODE NeN=(NODE)malloc(sizeof(NODE));
NeN->next=NULL;
printf("插入元素为:\n");
scanf("%d%d",&(NeN->h),(NeN->name),&(NeN->score));
for(i=0;i<h;i++)
{
p=p->next;
}
q->next=p->next;
tall=p;
tall->next=NeN;
tall=NeN;
NeN->next=q->next;
}
//链表插入部分
void Dele_Link(NODE* heat,int a)
{
int i=0;
NODE* p=heat;
NODE* q;
NODE* w;
for(i = 1;i < a-1;i++)
{
p=p->next;
}
q=p;
p=p->next;
w=p->next;
q->next=w;
}
int main()
{
NODE* heat;
int nub;
int a=1;
int h;
printf("输入链表数为:\n");
scanf("%d",&nub);
printf("请输入链表元素,包括学号和分数\n");
heat = Creat_Link(nub);
Print_Link(heat);
while(a)
{
printf("是否插入元素或者删除某个元素,添加元素填'1',删除元素填'2',都不则填入'0'.\n");
scanf("%d",&a);
if(a==1)
{
printf("插入元素在哪一位的后边:\n");
scanf("%d",&h);
ChaR(heat,h);
}
else if(a==2)
{
printf("请输入要删除的结点:\n");
scanf("%d",&h);
Dele_Link(heat,h);
}
Print_Link(heat);
else
break;
}
return 0;
}