动态链表简单分解

#include <stdio.h>

#include <windows.h>

#include <stdlib.h>

#include <string.h>

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

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

完美教父

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值