动态链表简单分解

#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;//将新的尾节点的下一个节点指向空

}

}

你可能感兴趣的:(编程)