参考代码:
#include <stdio.h> #include <stdlib.h> //热知识:stdlib库里面包含malloc函数 typedef struct Linklist //初始化链表结构 { int id; //学号 int score; //成绩 struct Linklist *next; //下一个节点的地址 } Linklist; int main() { void create_a(Linklist * head_a, int n); //函数声明,下同 void create_b(Linklist * head_b, int m); void function1(Linklist * head_a, Linklist * head_b, int n, int m); int n, m, i; Linklist *head_a, *head_b; head_a = (Linklist *)malloc(sizeof(Linklist)); //创建A链表表头 if (head_a == NULL) //此为创建链表失败后出现的提示,可删除,下同 printf("A头节点创建失败"); head_b = (Linklist *)malloc(sizeof(Linklist)); //创建B链表表头 if (head_b == NULL) printf("B头节点创建失败"); scanf("%d %d", &n, &m); //读取所给的n,m值 create_a(head_a, n); //创建链表A create_b(head_b, m); //创建链表B function1(head_a, head_b, n, m); //执行筛选、删除重复节点任务 return 0; } void create_a(Linklist *head_a, int n) { int i; Linklist *p_a = head_a; //将p_a的地址初始化为A链表表头的地址 scanf("%d %d", &p_a->id, &p_a->score); // A链表表头的数据单独赋值 for (i = 0; i < n - 1; ++i) //使用尾插法创建单向链表A { p_a->next = (Linklist *)malloc(sizeof(Linklist)); p_a = p_a->next; p_a->next = NULL; if (p_a == NULL) printf("节点创建失败"); scanf("%d %d", &p_a->id, &p_a->score); } } void create_b(Linklist *head_b, int m) { int i; Linklist *p_b = head_b; //将p_b的地址初始化为B链表表头的地址 scanf("%d %d", &p_b->id, &p_b->score); // B链表表头表头的数据单独赋值 for (i = 0; i < m - 1; ++i) //使用尾插法创建单向链表B { p_b->next = (Linklist *)malloc(sizeof(Linklist)); p_b = p_b->next; p_b->next = NULL; if (p_b == NULL) printf("节点创建失败"); scanf("%d %d", &p_b->id, &p_b->score); } } void function1(Linklist *head_a, Linklist *head_b, int n, int m) { int i, j, sum = n; // sum为A中还剩的节点数 Linklist *p_a, *p_b; for (i = 0, p_a = head_a; i < n; ++i) //从A链表表头开始遍历所有节点 { for (j = 0, p_b = head_b; j < m; ++j) //从B链表表头开始遍历所有节点 { if (p_a->id == p_b->id) //注意:此为特殊解法,不为通解,当学号可能为0时,需要换种解法 { //当A、B链表节点中的ID值相同时 p_a->id = 0; //将A节点的ID赋值为0 --sum; // A节点剩余节点数-1 } p_b = p_b->next; //若不相同则进入B链表的下一个节点 } p_a = p_a->next; //当B链表的节点全部遍历完后,进入A链表的下一个节点 } printf("%d\n", sum); //输出A链表的剩余节点数 for (i = 0, p_a = head_a; i < n; ++i) { if (p_a->id) //通过判断节点的ID值是否为0来决定是否输出 printf("%d %d\n", p_a->id, p_a->score); //为0则输出 p_a = p_a->next; //不为0则进入下一个节点 } }
0.0分
0 人评分
C语言程序设计教程(第三版)课后习题1.6 (C++代码)浏览:889 |
三角形 (C++代码)记忆化搜索浏览:1220 |
C语言程序设计教程(第三版)课后习题6.1 (C语言代码)浏览:697 |
C语言考试练习题_一元二次方程 (C语言代码)浏览:575 |
Hello, world! (C++代码)浏览:1744 |
C二级辅导-计负均正 (C语言代码)浏览:480 |
拆分位数 (C语言代码)浏览:514 |
C语言程序设计教程(第三版)课后习题8.3 (C语言代码)浏览:455 |
小O的乘积 (C语言代码)浏览:1009 |
简单的a+b (C语言代码)浏览:462 |