迅雷2014校招笔试编程题——求解两个集合差集,集合是以单向链表存储

本文主要是介绍迅雷2014校招笔试编程题——求解两个集合差集,集合是以单向链表存储,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

问题描述:

已知集合A和B的元素分别用不含头结点的单链表存储,函数difference()用于求解集合A与B的差集,并将结果保存在集合A的单链表中。例如,若集合A={5,10,20,15,25,30},集合B={5,15,35,25},完成计算后A={10,20,30}。
链表结点的结构类型定义如下:

  1. struct node    
  2. {    
  3.     int elem;    
  4.     node* next;    
  5. };    
请完成函数void difference(node** LA , node* LB)

分析:这道题是以程序填空的形式出现。考点是:1链表的建立,链表的遍历、删除。2思路逻辑分析;

// DifferenceBetweenTwoSETs.cpp : 定义控制台应用程序的入口点。
/*@mishidemudong@2015-5-26*/
//#include "stdafx.h"
#include<stdlib.h>
#include<iostream>
using namespace std;
struct node
{int elem;node* next;
};void printList(node * Node)
{while (Node != NULL){printf("%d ", Node->elem);Node = Node->next;}
}void DestroyList(node *L)
{node *p, *q;p = q = L;while (p != NULL) {q = q->next;free(p);p = q;}
}void difference(node **LA, node *LB)
{node *pa, *pb, *pre, *q;pre = NULL;pa = *LA;while (pa){pb = LB;while (pb&&pb->elem!=pa->elem){pb = pb->next;}if (pb){if (!pre)*LA = pa->next;elsepre->next = pa->next;q = pa;pa = pa->next;free(q);}else{pre = pa;pa = pa->next;}}
}void CreateList(node* &L, int *Number,int length)
{L = new node;L->elem = Number[0];L->next = NULL;node *p=L;<span style="white-space:pre">	</span>//注意*p=L;
<span style="white-space:pre">					</span>for (int i = 1; i < length; i++){node *newNode = (node *)malloc(sizeof(node));<span style="white-space:pre">	</span>//分配新的结点newNode->elem = Number[i];newNode->next = NULL;<span style="white-space:pre">			</span>p->next = newNode;<span style="white-space:pre">				</span>//尾插法,链接到链表尾部。p = newNode;}
}int _tmain(int argc, _TCHAR* argv[])
{int A[6] = { 5, 10, 20, 15, 25, 30 };int B[4] = { 5, 15, 35, 25 }; node *LA = NULL;node *LB=NULL;CreateList(LA, A,6);CreateList(LB, B, 4);printList(LA);cout << endl;printList(LB);cout << endl;difference(&LA, LB);printList(LA);return 0;
}


这篇关于迅雷2014校招笔试编程题——求解两个集合差集,集合是以单向链表存储的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/968020

相关文章

C# 比较两个list 之间元素差异的常用方法

《C#比较两个list之间元素差异的常用方法》:本文主要介绍C#比较两个list之间元素差异,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. 使用Except方法2. 使用Except的逆操作3. 使用LINQ的Join,GroupJoin

Python实现对阿里云OSS对象存储的操作详解

《Python实现对阿里云OSS对象存储的操作详解》这篇文章主要为大家详细介绍了Python实现对阿里云OSS对象存储的操作相关知识,包括连接,上传,下载,列举等功能,感兴趣的小伙伴可以了解下... 目录一、直接使用代码二、详细使用1. 环境准备2. 初始化配置3. bucket配置创建4. 文件上传到os

关于集合与数组转换实现方法

《关于集合与数组转换实现方法》:本文主要介绍关于集合与数组转换实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、Arrays.asList()1.1、方法作用1.2、内部实现1.3、修改元素的影响1.4、注意事项2、list.toArray()2.1、方

Java中调用数据库存储过程的示例代码

《Java中调用数据库存储过程的示例代码》本文介绍Java通过JDBC调用数据库存储过程的方法,涵盖参数类型、执行步骤及数据库差异,需注意异常处理与资源管理,以优化性能并实现复杂业务逻辑,感兴趣的朋友... 目录一、存储过程概述二、Java调用存储过程的基本javascript步骤三、Java调用存储过程示

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁

MySQL之InnoDB存储引擎中的索引用法及说明

《MySQL之InnoDB存储引擎中的索引用法及说明》:本文主要介绍MySQL之InnoDB存储引擎中的索引用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录1、背景2、准备3、正篇【1】存储用户记录的数据页【2】存储目录项记录的数据页【3】聚簇索引【4】二

MySQL之InnoDB存储页的独立表空间解读

《MySQL之InnoDB存储页的独立表空间解读》:本文主要介绍MySQL之InnoDB存储页的独立表空间,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、独立表空间【1】表空间大小【2】区【3】组【4】段【5】区的类型【6】XDES Entry区结构【

SQLite3 在嵌入式C环境中存储音频/视频文件的最优方案

《SQLite3在嵌入式C环境中存储音频/视频文件的最优方案》本文探讨了SQLite3在嵌入式C环境中存储音视频文件的优化方案,推荐采用文件路径存储结合元数据管理,兼顾效率与资源限制,小文件可使用B... 目录SQLite3 在嵌入式C环境中存储音频/视频文件的专业方案一、存储策略选择1. 直接存储 vs

C++链表的虚拟头节点实现细节及注意事项

《C++链表的虚拟头节点实现细节及注意事项》虚拟头节点是链表操作中极为实用的设计技巧,它通过在链表真实头部前添加一个特殊节点,有效简化边界条件处理,:本文主要介绍C++链表的虚拟头节点实现细节及注... 目录C++链表虚拟头节点(Dummy Head)一、虚拟头节点的本质与核心作用1. 定义2. 核心价值二

MySQL存储过程之循环遍历查询的结果集详解

《MySQL存储过程之循环遍历查询的结果集详解》:本文主要介绍MySQL存储过程之循环遍历查询的结果集,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言1. 表结构2. 存储过程3. 关于存储过程的SQL补充总结前言近来碰到这样一个问题:在生产上导入的数据发现