#include
#include
#include
#include
#pragma warning(disable:4996)
struct num
{
int id;//员工ID
char name[10];//员工姓名
int age;//员工年龄
struct num *next;//指向下一个节点地址
};
struct num *head = NULL;//指向第一个节点地址
int k = 0;//记录总录数
void show(void);//显示
void add(void);//添加
int main(void)
{
add();
show();
system("pause");
return 0;
}
void show(void)
{
if (head == 0)
{
printf("无员工信息!\n");
}
while (head != 0)
{
printf("%d\t%s\t%d\n",head->id,head->name,head->age);
head = head->next;
}
}
void add(void)
{
struct num *p_new = NULL;//指向新添加的节点
struct num *p = NULL;//指向head,用来做遍历
struct num *p_old = NULL;//指向尾节点
int num;//接收用户输入的ID
if (head != NULL)//如果存在节点
{
p = head;//将p指向第一个节点
while (p != NULL)//循环遍历出尾节点
p = p->next;//每循环一次,将p指向下一个节点
p_old = p;//当找到尾节点后,将p_old指向它
}
while (1)//死循环
{reInput:
printf("请输入员工ID(按0退出):\n");
scanf("%d", &num);
if (num == 0)
{
getchar();
break;
}
p = head;
while (p != NULL)//循环遍历判断输入的用户ID是否存在
{
if (p->id == num)
{
printf("该ID存在!请重新输入!\n");
goto reInput;//如果输入的ID已经存在,跳出重新输入
}
p = p->next;
}
p_new = (struct num *)malloc(sizeof(struct num));//添加一个新的节点
p_new->id = num;
printf("请输入姓名:\n");
scanf("%s", &p_new->name);
printf("请输入年龄:\n");
scanf("%d", &p_new->age);
k++;//记录加1
if (k == 1)//如果记录为1,说明是新节点
{
head = p_new;//指向第一个节点(也就是刚添加的)
}
else//如果不是新节点
{
p_old->next = p_new;//p_old是上一个尾结点,现在添加了一个新的节点,需将p_old->next指向p_new也就是将刚添加的p_new做为尾结点
}
p_old = p_new;//再将p_old重新指向新的尾节点
p_new->next = NULL;//将新的尾节点的下一个节点指向空
}
}