zoukankan      html  css  js  c++  java
  • 链表 删除与用户输入相同年龄的学生

      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 }

  • 相关阅读:
    NOI2005瑰丽华尔兹
    BZOJ4919[Lydsy1706月赛]大根堆
    BZOJ1097[POI2007]ATR-Tourist Attractions
    Luogu2973 [USACO10HOL]Driving Out the Piggies G
    Luogu5505 JSOI2011分特产
    Luogu1450 HAOI2008硬币购物
    NOI2001 炮兵阵地
    汕头市队赛 SRM 09 A 撕书
    洛谷P1196 银河英雄传说
    洛谷P3144 [USACO16OPEN]关闭农场Closing the Farm
  • 原文地址:https://www.cnblogs.com/lanjianhappy/p/6533414.html
Copyright © 2011-2022 走看看