C语言中 创建链表同时 判断是否重复输入

就是创建一个单链表输入数据例如学生的学号误输时输入重复提醒错误要求重新输入这个能实现吗?谢谢大家我已经解决了定义一个数组记录数据输入后查询一下即可... 就是创建一个单链表 输入数据 例如
学生的学号 误输时 输入重复 提醒错误 要求重新输入
这个能实现吗?
谢谢大家 我已经解决了 定义一个数组记录 数据 输入后查询一下即可
展开
 我来答
ytu_math
2010-07-23 · TA获得超过1558个赞
知道小有建树答主
回答量:784
采纳率:100%
帮助的人:805万
展开全部
可以,只要在录入学号,检索链表元素中的数据与录入的是否相同即可。

一下根据情况做一个简单的示例。

构造链表元素:

struct stu
{
char id[20];
char name[20];
char sex;
struct stu *next;
};

typedef struct stu Student ;
#define FALSE -1
#define TRUE 1

构造链表:
Student *head=NULL; //头指针

int InputStu()
{

Student *tmp,*stu1;
Student *tail;
int sign=0;
int sign2=0; //
tmp=(Student *)malloc(sizeof(Student));
if (tmp==NULL)
{
return FALSE; // 申请元素错误
}
tmp->next=NULL;

while(sign==0)
{
// 输入学号,为了简便,其他内容不输入了
if(sign2==0)
{
printf("\n请输入学生的学号:");
}
else
{
printf("\录入学号重复,重新录入:");
}

scanf("%s",tmp->id);

stu1=head;
tail=head;
sign2=0;
while(stu1)
{
if (strcmp(stu1->id,tmp->id))
{
stu1=NULL; //输入的学号已存在,设置stu1=NULL;终止循环,重新输入
sign2=1;
}
else
{
tail=stu1;
stu1=stu1->next;
}
}

if(sign2==0) //没有匹配的学号,将tmp插入到链表的结尾
{
//tail 指针指向的是链表的最后一个元素
if (tail==NULL) //空链,还没有录入内容
{
head=tmp; //本次录入的数据为第一个元素
}
else
{
tail->next=tmp;
}
sign=1;
}
}
return TRUE; //录入元素成功
}

main()
{
int i=0;
while (i<10)
{
InputStu(); //连续录入10个人
i++;
}
}
商珧玉俊名
2020-11-14 · TA获得超过1055个赞
知道小有建树答主
回答量:1868
采纳率:100%
帮助的人:8.9万
展开全部
可以,只要在录入学号,检索链表元素中的数据与录入的是否相同即可。
一下根据情况做一个简单的示例。
构造链表元素:
struct
stu
{
char
id[20];
char
name[20];
char
sex;
struct
stu
*next;
};
typedef
struct
stu
Student
;
#define
FALSE
-1
#define
TRUE
1
构造链表:
Student
*head=NULL;
//头指针
int
InputStu()
{
Student
*tmp,*stu1;
Student
*tail;
int
sign=0;
int
sign2=0;
//
tmp=(Student
*)malloc(sizeof(Student));
if
(tmp==NULL)
{
return
FALSE;
//
申请元素错误
}
tmp->next=NULL;
while(sign==0)
{
//
输入学号,为了简便,其他内容不输入了
if(sign2==0)
{
printf("\n请输入学生的学号:");
}
else
{
printf("\录入学号重复,重新录入:");
}
scanf("%s",tmp->id);
stu1=head;
tail=head;
sign2=0;
while(stu1)
{
if
(strcmp(stu1->id,tmp->id))
{
stu1=NULL;
//输入的学号已存在,设置stu1=NULL;终止循环,重新输入
sign2=1;
}
else
{
tail=stu1;
stu1=stu1->next;
}
}
if(sign2==0)
//没有匹配的学号,将tmp插入到链表的结尾
{
//tail
指针指向的是链表的最后一个元素
if
(tail==NULL)
//空链,还没有录入内容
{
head=tmp;
//本次录入的数据为第一个元素
}
else
{
tail->next=tmp;
}
sign=1;
}
}
return
TRUE;
//录入元素成功
}
main()
{
int
i=0;
while
(i<10)
{
InputStu();
//连续录入10个人
i++;
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jyjiao2007
2010-07-23 · 超过12用户采纳过TA的回答
知道答主
回答量:47
采纳率:0%
帮助的人:32.2万
展开全部
可以。
方法:添加一个新节点前,先比较所有已插入的节点是否与该节点的值相同;
如果相同则提示 输入重复 ;否则 插入该节点。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
_此名没人用
2010-07-23 · TA获得超过652个赞
知道小有建树答主
回答量:318
采纳率:50%
帮助的人:121万
展开全部
输入的时候,查询表,进行判断!、
有则,提示错误,
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式