C语言链表问题 为什么数据老是存不到链表里去呢
#include<stdio.h>#include<stdlib.h>structlian{intdata;structlian*next;};voidcreat(str...
#include <stdio.h>
#include <stdlib.h>
struct lian
{
int data;
struct lian *next;
};
void creat(struct lian *S,int t)
{
struct lian *P1,*Q;
P1=(struct lian*)malloc(sizeof(struct lian));
P1->data=t;
P1->next=NULL;
Q=S->next; // 跳过头结点
if(Q==NULL)
Q=P1;
else {
while (Q->next!=NULL) // 如果后面还有节点,继续
Q=Q->next;
Q->next=P1;
}
}
void look(struct lian *S)
{struct lian *Q=S->next; // 跳过头节点
while(Q!=NULL)
{
printf("%d\n",Q->data);
Q=Q->next;
}
}
void addcreat(struct lian *S)
{ int a=0,num,data;
struct lian *Q=S;
printf("请输入需要添加的数据个数\n");
do{
scanf("%d",&num);
if(num<=0)
printf("\n您输入的数据有误,请重新输入");
}while(num<=0);
for(;a<num;a++)
{ printf("请输入第%d个数据",a+1);
scanf("%d",&data);
creat(Q,data);
}
}
int main()
{ int num;
struct lian *head=NULL;
head=(struct lian*)malloc(sizeof(struct lian));
head->next=NULL; // 头结点没有数据,后面处理要跳过它
printf("《主菜单》");
printf("\n用键盘输入不同的数字进行功能选择");
printf("\n1 向链表中添加新的数据");
printf("\n2 删除链表中的数据");
printf("\n3 遍历整个链表并打印出来\n");
scanf("%d",&num);
switch(num)
{
case 1: addcreat(head);look(head);break;
case 2:
case 3:
default:;
}
} 展开
#include <stdlib.h>
struct lian
{
int data;
struct lian *next;
};
void creat(struct lian *S,int t)
{
struct lian *P1,*Q;
P1=(struct lian*)malloc(sizeof(struct lian));
P1->data=t;
P1->next=NULL;
Q=S->next; // 跳过头结点
if(Q==NULL)
Q=P1;
else {
while (Q->next!=NULL) // 如果后面还有节点,继续
Q=Q->next;
Q->next=P1;
}
}
void look(struct lian *S)
{struct lian *Q=S->next; // 跳过头节点
while(Q!=NULL)
{
printf("%d\n",Q->data);
Q=Q->next;
}
}
void addcreat(struct lian *S)
{ int a=0,num,data;
struct lian *Q=S;
printf("请输入需要添加的数据个数\n");
do{
scanf("%d",&num);
if(num<=0)
printf("\n您输入的数据有误,请重新输入");
}while(num<=0);
for(;a<num;a++)
{ printf("请输入第%d个数据",a+1);
scanf("%d",&data);
creat(Q,data);
}
}
int main()
{ int num;
struct lian *head=NULL;
head=(struct lian*)malloc(sizeof(struct lian));
head->next=NULL; // 头结点没有数据,后面处理要跳过它
printf("《主菜单》");
printf("\n用键盘输入不同的数字进行功能选择");
printf("\n1 向链表中添加新的数据");
printf("\n2 删除链表中的数据");
printf("\n3 遍历整个链表并打印出来\n");
scanf("%d",&num);
switch(num)
{
case 1: addcreat(head);look(head);break;
case 2:
case 3:
default:;
}
} 展开
1个回答
2016-10-31
展开全部
#include <stdio.h>
#include <stdlib.h>
struct lian
{
int data;
struct lian *next;
};
void creat(struct lian *S,int t)
{
struct lian *P1,*Q;
P1=(struct lian*)malloc(sizeof(struct lian));
P1->data=t;
P1->next=NULL;
Q=S->next; // 跳过头结点
if(Q==NULL)
S->next=P1;
else {
while (Q->next!=NULL) // 如果后面还有节点,继续
Q=Q->next;
Q->next=P1;
}
}
void look(struct lian *S)
{struct lian *Q=S->next; // 跳过头节点
while(Q!=NULL)
{
printf("%d\n",Q->data);
Q=Q->next;
}
}
void addcreat(struct lian *S)
{
int a=0,num,data;
struct lian *Q=S;
printf("请输入需要添加的数据个数\n");
do{
scanf("%d",&num);
if(num<=0)
printf("\n您输入的数据有误,请重新输入");
}while(num<=0);
for(;a<num;a++)
{
printf("请输入第%d个数据",a+1);
scanf("%d",&data);
creat(Q,data);
}
}
int main()
{
int num;
struct lian *head=NULL;
head=(struct lian*)malloc(sizeof(struct lian));
head->next=NULL; // 头结点没有数据,后面处理要跳过它
do{
printf("《主菜单》");
printf("\n用键盘输入不同的数字进行功能选择");
printf("\n1 向链表中添加新的数据");
printf("\n2 删除链表中的数据");
printf("\n3 遍历整个链表并打印出来");
printf("\n4 退出\n");
scanf("%d",&num);
switch(num)
{
case 1: addcreat(head);look(head);break;
case 2:
case 3: look(head);break;
default:;
}
}while(num!=4);
}
关键是creat里面有点小问题。
void creat(struct lian *S,int t)
{
struct lian *P1,*Q;
P1=(struct lian*)malloc(sizeof(struct lian));
P1->data=t;
P1->next=NULL;
Q=S->next;
if(Q==NULL)
S->next=P1; // 就是这里
else {
while (Q->next!=NULL)
Q=Q->next;
Q->next=P1;
}
}
其实完全可以用下面这个,不用那么复杂
void creat(struct lian *S,int t)
{
struct lian *P1,*Q;
P1=(struct lian*)malloc(sizeof(struct lian));
P1->data=t;
P1->next=NULL;
Q=S;
while (Q->next!=NULL) Q=Q->next;
Q->next=P1;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询