参考代码:
#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 人评分
K-进制数 (C++代码)浏览:938 |
简单的a+b (C语言代码)浏览:685 |
C语言训练-斐波纳契数列 (C语言代码)浏览:1270 |
C语言程序设计教程(第三版)课后习题8.5 (C语言代码)浏览:562 |
用筛法求之N内的素数。 (C语言代码)浏览:890 |
C语言程序设计教程(第三版)课后习题9.4 (C语言代码)浏览:724 |
C语言程序设计教程(第三版)课后习题11.8 (C语言代码)浏览:756 |
C二级辅导-进制转换 (C语言代码)浏览:750 |
妹子杀手的故事 (C语言代码)浏览:1152 |
图形输出 (C语言代码)浏览:1019 |