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 }

  • 相关阅读:
    关于git的文件内容冲突解决
    【C++】 四种强制类型转换(static_cast 与 dynamic_cast 的区别!)
    如何判断一个变量是不是指针
    类型识别
    C++中的异常处理(下)
    C++中的异常处理(中)
    C++中的异常处理(上)
    C语言异常处理
    用Zebra打造Linux下小型路由器
    Linux下PortSentry的配置
  • 原文地址:https://www.cnblogs.com/lanjianhappy/p/6533414.html
Copyright © 2011-2022 走看看