链表 删除与用户输入相同年龄的学生

  1 //链表保存学生的基本信息 删除用户输入年龄和链表结点相同de
  2 
  3 //2017.3.7
  4 
  5 #include <stdio.h>
  6 #include <stdlib.h>
  7 #include <string.h>
  8 #define _CRT_SECURE_NO_WARNINGS
  9 typedef struct student su;
 10 struct student
 11 {
 12     int age;
 13     char name[100];
 14     int number;
 15     int sex;
 16     struct student *next;
 17 };
 18 
 19 //初始化链表
 20 su* init()
 21 {
 22     su *p = (su*)malloc(sizeof(su));//分配空间
 23     if (NULL == p)
 24     {
 25         printf("分配失败
");
 26     }
 27     else
 28     {
 29         p->next = NULL;
 30     }
 31     return p;//返回创建的头节点
 32 }
 33 
 34 //学生信息插入链表
 35 su* insert(su *head, int num, int age,  int sex,char *name)
 36 {
 37     su *p = head;//指向头
 38     if (NULL == p)
 39     {
 40         return NULL;
 41     }
 42     while (p->next != NULL)
 43     {
 44         p = p->next;
 45     }
 46     su *pp = (su*)malloc(sizeof(su));
 47     if (NULL == pp)
 48     {
 49         return NULL;
 50     }else
 51     {
 52         pp->number = num;
 53         strcpy_s(p->name, name);
 54         pp->age = age;
 55         pp->sex = sex;
 56 
 57         p->next = pp;
 58         pp->next = NULL;
 59     }
 60 }
 61 
 62 void print(su *head)//传来头节点
 63 {
 64     su *p = head->next;
 65         while (p != NULL)
 66         {
 67             printf("%5d", p->age);
 68             p = p->next;
 69         }
 70         printf("
");
 71     
 72 }
 73 void DeleteNode(su* pre, su *cur)
 74 {
 75     pre->next = cur->next;   // 删除cur节点,pre是cur的前置节点
 76     free(cur);
 77 }
 78 int main()
 79 {
 80     int num;
 81     scanf_s("%d", &num);   // 输入
 82     su * c = init();  // 初始化链表,并插入一堆数据
 83     insert(c, 1, 12, 1, "mike");
 84     insert(c, 2, 13, 0, "jake");
 85     insert(c, 3, 14, 1, "tom");
 86     insert(c, 3, 14, 0, "xsan");
 87     insert(c, 4, 15, 1, "lisi");
 88     print(c);
 89     printf("--------------------------------
");
 90     su * index = c->next;
 91     su * flower = c;
 92     while (index != NULL)  // 遍历所有节点
 93     {
 94         if (index->age == num)  // 如果节点的年纪是指定需要删除的年纪
 95         {
 96             DeleteNode(flower, index);  // 删除该节点
 97             index = flower->next;        // 继续遍历
 98         }
 99         else
100         {
101             index = index->next;   // 只是继续遍历
102             flower = flower->next;
103         }
104     
105     
106     }
107     print(c);  // 输出新的链表
108     system("pause");
109 }

原文地址:https://www.cnblogs.com/lanjianhappy/p/6533414.html