迅雷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

相关文章

MyBatis-plus处理存储json数据过程

《MyBatis-plus处理存储json数据过程》文章介绍MyBatis-Plus3.4.21处理对象与集合的差异:对象可用内置Handler配合autoResultMap,集合需自定义处理器继承F... 目录1、如果是对象2、如果需要转换的是List集合总结对象和集合分两种情况处理,目前我用的MP的版本

JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法

《JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法》:本文主要介绍JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法,每种方法结合实例代码给大家介绍的非常... 目录引言:为什么"相等"判断如此重要?方法1:使用some()+includes()(适合小数组)方法2

Python异步编程之await与asyncio基本用法详解

《Python异步编程之await与asyncio基本用法详解》在Python中,await和asyncio是异步编程的核心工具,用于高效处理I/O密集型任务(如网络请求、文件读写、数据库操作等),接... 目录一、核心概念二、使用场景三、基本用法1. 定义协程2. 运行协程3. 并发执行多个任务四、关键

使用SpringBoot+InfluxDB实现高效数据存储与查询

《使用SpringBoot+InfluxDB实现高效数据存储与查询》InfluxDB是一个开源的时间序列数据库,特别适合处理带有时间戳的监控数据、指标数据等,下面详细介绍如何在SpringBoot项目... 目录1、项目介绍2、 InfluxDB 介绍3、Spring Boot 配置 InfluxDB4、I

AOP编程的基本概念与idea编辑器的配合体验过程

《AOP编程的基本概念与idea编辑器的配合体验过程》文章简要介绍了AOP基础概念,包括Before/Around通知、PointCut切入点、Advice通知体、JoinPoint连接点等,说明它们... 目录BeforeAroundAdvise — 通知PointCut — 切入点Acpect — 切面

Java集合中的链表与结构详解

《Java集合中的链表与结构详解》链表是一种物理存储结构上非连续的存储结构,数据元素的逻辑顺序的通过链表中的引用链接次序实现,文章对比ArrayList与LinkedList的结构差异,详细讲解了链表... 目录一、链表概念与结构二、当向单链表的实现2.1 准备工作2.2 初始化链表2.3 打印数据、链表长

C#异步编程ConfigureAwait的使用小结

《C#异步编程ConfigureAwait的使用小结》本文介绍了异步编程在GUI和服务器端应用的优势,详细的介绍了async和await的关键作用,通过实例解析了在UI线程正确使用await.Conf... 异步编程是并发的一种形式,它有两大好处:对于面向终端用户的GUI程序,提高了响应能力对于服务器端应

C# async await 异步编程实现机制详解

《C#asyncawait异步编程实现机制详解》async/await是C#5.0引入的语法糖,它基于**状态机(StateMachine)**模式实现,将异步方法转换为编译器生成的状态机类,本... 目录一、async/await 异步编程实现机制1.1 核心概念1.2 编译器转换过程1.3 关键组件解析

Spring Boot配置和使用两个数据源的实现步骤

《SpringBoot配置和使用两个数据源的实现步骤》本文详解SpringBoot配置双数据源方法,包含配置文件设置、Bean创建、事务管理器配置及@Qualifier注解使用,强调主数据源标记、代... 目录Spring Boot配置和使用两个数据源技术背景实现步骤1. 配置数据源信息2. 创建数据源Be

SpringBoot3.X 整合 MinIO 存储原生方案

《SpringBoot3.X整合MinIO存储原生方案》本文详细介绍了SpringBoot3.X整合MinIO的原生方案,从环境搭建到核心功能实现,涵盖了文件上传、下载、删除等常用操作,并补充了... 目录SpringBoot3.X整合MinIO存储原生方案:从环境搭建到实战开发一、前言:为什么选择MinI