用顺序表实现求两个集合的并集

#include<iostream.h>

#include<malloc.h>

#include<limits.h>

#include<string.h>

#include<stdlib.h>

#include<ctype.h>

#include<stdlib.h>

#include<process.h>

#define OK 1

#define INIT_LiST_SIZE 100//顺序表的初始长度

#define LIST_ADD 10//顺序表每次增加的长度

#define ERROR 0

#define OVERFLOW 3

typedef int Elemtype;

typedef struct

{

Elemtype *elem;//顺序表的基地址

int length;//顺序表的当前长度

int listsize;//顺序表分配的长度

}SqList;

void InitList(Sqlist &La)//初始化顺序表

{

La.elem=(Elemtype *)malloc(INIT_LIST_SIZE*sizeof(int));//开辟100个一连串的地址,并强制转化为Elemtype类型

La.length=0;//顺序表的当前长度为0

La.listsize=100;//目前顺序表的总长度

}

Elemtype ListInsert(Sqlist &La,int i,int e)//在顺序表的第i个元素前一个位置插入元素e

{

if(i<1||i>La.length+1)return ERROR;//表示插入位置不合理

if(La.listsize>=La.length)

{

Elemtype *newbase=(Elemtype *)realloc(La.elem,(INIT_LIST_SIZE+LIST_ADD)*sizeof(int));//给当前顺序表增加长度

La.elem=newbase;//将新开辟的一片连续地址的首地址赋给基地址

}

int *q=La.elem[i-1];

for(int *p=La.elem[lLa.length-1];p>=q;p--)

{

*(p+1)=*(p);//j将顺序表的最后一个元素到*q这个元素一次向后移一个位置

}

*q=e;//插入元素

La.length++;//顺序表的长度加1

return OK;

}

SqList Union(SqList La,SqList Lb,SqList &Lc)//求两个集合的相同元素并插入到Lc中

{

int La_len=La.length;

int Lb_len=Lb.length;

int i=1;

for(int *p=La.elem;p<=La.elem[La_len-1];p++)

for(int *q=Lb.elem;q<=Lb.elem[Lb_len-1];q++)//此处类似于冒泡排序法

{

if(*p==*q)

{

ListInsert(Lc,i;*p);

i++;

break;//此处的break可以减少不必要的查找,减少计算机的工作量

}

}

return Lc;

}

void Print(SqlList La)//输出函数

{

for(int *p=La.elem;p<=La.elem[La.length-1];p++)cout<<*p<<endl;

}

void main()

{

int a[3]={1,2,3};

int b[4]={1,2,3,4};

SqList La,Lb,Lc;

InitList(La);

InitList(Lb);

InitList(Lc);

for(int i=1;i<=3;i++)ListInsert(La,i,a[i-1]);//将数组a的元素插入到La中

for(int j=1;j<=4;j++)ListInsert(Lb,j,b[j-1]);//将数组b中的元素插入到Lb中

Print(Union(La,Lb,Lc));

原文地址:https://www.cnblogs.com/xuzhiyi/p/9671442.html

时间: 2024-10-18 19:36:54

用顺序表实现求两个集合的并集的相关文章

DS之顺序表实现输入数据逆置

实现输入数据逆置和顺序表实现排序是两个极其相似的过程,因此使用的顺序表的基本操作也是一样的:0基本操作前的准备,1初始化顺序表,6向顺序表插入数据元素. 要想实现输入数据元素的逆置还需要一个逆置函数,逆置函数在C++,C#语言中早已接触过,因此不陌生,记得在做大量的C++的程序代码补充的大题就写过不下数十遍,挺简单的掌握技巧,就是你输入数据的个数的一半,前后进行交换,因此逆置函数的代码为: <span style="font-size:18px;">//逆置函数 void

java求两个集合的差集

public static void main(String[] args) {Set set = new HashSet();Set set1 = new HashSet();set.add("sanny");set.add("mary");set.add("bill");set.add("tom");set.add("tony");set.add("mark");set.add(&q

用顺序表实现一个循环队列

队列是一种先进先出的线性表,简称FIFO.允许插入的一端为队尾,允许出列的一端为队头. 比如一个队列q=(p1,p2,p3,p4...pn),p1就是那个队头,pn就是队尾.出列时总是从p1开始 向后,入列时总是从pn后面插入.就像敲键盘,依次敲qwr,屏幕上显示的就是qwr,先敲的先显 示. 以下代码是用顺序表实现一个循环队列 1 /** 2 * @filename queue.c 3 * @author haohaibo 4 * @data 2017/4/12 5 * @brief 用顺序表

求两个集合的交集和并集C#

我是用hashset<T>来实现的 具体如代码所示 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace JiaoJi { class Program { static void Main(string[] args) { int [] arrA=new int[8]{1,2,3,4,5,6,7,8}; int [] arrB=new int[5]{4,5,

DS之顺序表实现乱序输入顺序输出

顺序表的实例有很多,在学其他的编程语言时,肯定都学过要求输入一串乱序的数字,要求进行排序,实现升序或降序输出.今天就来用顺序表实现乱序输入,顺序输出(升序). 实现上述的功能需要用到的顺序表的基本操作有0基本操作前的准备,1初始化顺序表,6向顺序表插入数据元素. 自己只需写一个排序的函数,排序函数的代码为: <span style="font-size:18px;">//排序函数 void paixu(SqList &L) { for(int i=0;i<L.

利用sort和uniq求两个文件的并集,交集和差集

利用sort和uniq求两个文件的并集,交集和差集 并集:cat file1.txt file2.txt | sort | uniq > file.txt 交集:cat file1.txt file2.txt | sort | uniq -d >file.txt 差集:求file1.txt相对于file2.txt的差集,可先求出两者的交集file3.txt,然后在file1.txt中除去file3.txt即可. cat file1.txt file2.txt | sort | uniq -d

Java里面如何求两个集合的交集

在Python里,或许我们没有这个烦恼,因为python里已经为我们提供了intersection这样的方法. 但是在Java里,就需要我们动一番脑筋了.这里浓重推荐下apache的CollectionUtils工具类. 方法签名如下所示: org.apache.commons.collections.intersection(final Collection a, final Collection b) 那么这个方法是怎么实现的呢?这里以list为例 public class TestInte

Hoj1412 求两个集合的和{A} + {B}——java实现最优解的辛酸路

写在前面 寒假闲来无事,突发奇想,想A俩题玩玩,许久没A过题了,想想那手指暴力敲击键盘的感觉就是一阵酸爽啊. 做的前几个题还挺顺溜,大概半个小时一个题吧,A了三四个,谁知道到第五个卡这了. 一个看上去很简单的题楞是卡了我俩小时,不过结果还算不错. 打破了个记录,竟然一不小心成为了这个题的最优解....... 详细描述点击此处参见原题 大致就是: 给你两个集合,要求{A} + {B}. 注:同一个集合中不会有两个相同的元素. 辛酸分析路 (1)用Java自带的工具 因为本身是玩Java的,首先想到

利用数组创建的顺序表实现各种功能

主函数main.c #include "func.h" #define MAXSIZE 100 INT32 main( void ) { INT32 temp[MAXSIZE] = {NULL}, f = 0, OSM = 1; OSM = create_SL (temp); do { OSM = OSM_Printf("\n\t========================================\n"); OSM = OSM_Printf("