#include<stdio.h>
#include<stdlib.h>

#define LIST_MAX 10
#define LIST_ADD 2

typedef struct
{
    int *elem;
    int length;
    int listsize;
}SqList;

int InitList(SqList *L)
{
    L->elem=(int *)malloc(LIST_MAX*sizeof(int));
    if(!L->elem)
        exit(-1);
    L->length=0;
    L->listsize=LIST_MAX;
    return 0;
}
int DestoryList(SqList *L)
{
    free(L->elem);
    L->elem=NULL;
    L->length=0;
    L->listsize=0;
    return 0;
}
int InsertElem(SqList *L,int i,int e)
{
    int *newbase,*p,*q;
    if(i<1||i>L->length+1)
        exit(-1);
    if(L->length>=L->listsize)
    {
        newbase=(int*)realloc(L->elem,(L->length+LIST_ADD)*sizeof(int));
        if(!newbase)
        {
            printf("分配空间失败!\n");
            exit(-1);
        }
        L->elem=newbase;
        L->listsize+=LIST_ADD;
    }
    p=L->elem+i-1;
    q=L->elem+L->length-1;
    for(;q>=p;q--)
        *(q+1)=*q;
    *p=e;
    ++L->length;
    return 0;
}    
int LocateElem(SqList L,int e,int (*visit)(int v1,int v2))
{
    int *p,i=1;
    p=L.elem;
    while(p<L.elem+L.length&&!visit(*p,e))
    {
        ++i;
        ++p;//需要考虑的是当在链表L中找不到满足条件的元素时,p会指向链表结尾的下一个元素的地址
    }
    if(i<=L.length)
        return i;
    else
        return 0;
}

int Equal(int v1,int v2)
{
    if(v1==v2)
        return 1;
    else
        return 0;
}                
int GetElem(SqList L,int i,int *e)
{
    if(i<1||i>L.length)
        exit(-1);
    *e=*(L.elem+i-1);
    return 1;
}
int Union(SqList *La,SqList Lb,int (*visit)(int v1,int v2))      //主要用到的合并函数
{
    int i=1;
    int e;
    for(;i<=Lb.length;i++)
    {
        GetElem(Lb,i,&e);
        if(!LocateElem(*La,e,visit))
        {
            InsertElem(La,La->length+1,e);
        }
    }
    return 0;
}
int main()
{
    int i,e0;
    SqList La,Lb;
    
    InitList(&La);

for(i=1;i<=6;i++)
        InsertElem(&La,i,i);

for(i=1;i<=6;i++)    
    {
        GetElem(La,i,&e0);
        printf("%d ",e0);
    }
    printf("\n");

InitList(&Lb);
    
    for(i=1;i<=6;i++)
        InsertElem(&Lb,i,2*i);

for(i=1;i<=6;i++)    
    {
        GetElem(Lb,i,&e0);
        printf("%d ",e0);
    }
    printf("\n");
    
    Union(&La,Lb,Equal);
    
    for(i=1;i<=La.length;i++)    
    {
        GetElem(La,i,&e0);
        printf("%d ",e0);
    }
    printf("\n");
    
    DestoryList(&La);
    DestoryList(&Lb);
    
    return 0;
}

A=AUB的更多相关文章

  1. 求新的集合 A=AUB(顺序表)

    #include<stdio.h> typedef int A; const int LIST_INIT_SIZE=100; const int LISTINCREMENT=10; typ ...

  2. 分享一个html+js+ashx+easyui+ado.net权限管理系统

    EasyUI.权限管理 这是个都快被搞烂了的组合,但是easyui的确好用,权限管理在项目中的确实用.一直以来博客园里也不少朋友分享过,但是感觉好的要不没源码,要不就是过度设计写的太复杂看不懂,也懒得 ...

  3. Oracle学习笔记九 数据库对象

    Oracle 数据库对象又称模式对象,数据库对象是逻辑结构的集合,最基本的数据库对象是表. 其他数据库对象包括:  

  4. shell脚本批量收集linux服务器的硬件信息快速实现

    安装ansible批量管理系统.(没有的话,ssh远程命令循环也可以) 在常用的数据库里面新建一张表,用你要收集的信息作为列名,提供可以用shell插入.

  5. logback logback.xml常用配置详解 <filter>

    <filter>: 过滤器,执行一个过滤器会有返回个枚举值,即DENY,NEUTRAL,ACCEPT其中之一.返回DENY,日志将立即被抛弃不再经过其他过滤器:返回NEUTRAL,有序列表 ...

  6. 深入解析SQL Server并行执行原理及实践(上)

    在成熟领先的企业级数据库系统中,并行查询可以说是一大利器,在某些场景下他可以显著的提升查询的相应时间,提升用户体验.如SQL Server, Oracle等, Mysql目前还未实现,而Postgre ...

  7. C++基础——模拟事务 (1)COMMAND模式

    =================================版权声明================================= 版权声明:原创文章 禁止转载  请通过右侧公告中的“联系邮 ...

  8. logback配置详解3<filter>

    logback 常用配置详解(三) <filter> <filter>: 过滤器,执行一个过滤器会有返回个枚举值,即DENY,NEUTRAL,ACCEPT其中之一.返回DENY ...

  9. 【转】logback logback.xml常用配置详解(三) <filter>

    原创文章,转载请指明出处:http://aub.iteye.com/blog/1110008, 尊重他人即尊重自己 详细整理了logback常用配置, 不是官网手册的翻译版,而是使用总结,旨在更快更透 ...

随机推荐

  1. 完全卸载oracle11g步骤

    完全卸载oracle11g步骤:1. 开始->设置->控制面板->管理工具->服务 停止所有Oracle服务.2. 开始->程序->Oracle - OraHome ...

  2. C++基础——函数指针 函数指针数组

    ==================================声明================================== 本文版权归作者所有. 本文原创,转载必须在正文中显要地注明 ...

  3. Asp.Net MVC+BootStrap+EF6.0实现简单的用户角色权限管理4

    首先先加个区域,名为Admin using System.Web.Mvc; namespace AuthorDesign.Web.Areas.Admin { public class AdminAre ...

  4. Json解析工具Jackson(简单应用)

    原文http://blog.csdn.net/nomousewch/article/details/8955796 概述 Jackson库(http://jackson.codehaus.org),是 ...

  5. ipv4理论知识2-分类编址、ip分类、网络标识、主机标识、地址类、地址块

    分类编址 ipv4的体系结构中有分类编址和无分类编址(后续会介绍到),在分类编址时,ipv4地址分为A.B.C.D.E这5类.每类占用的IP比例和个数如下图: ipv4分类识别 计算机以二进制方式存储 ...

  6. find

    语法:find [路径] [参数] [action] -name filename,查找名为filename的文件 -iname filename,查找名为filename的文件,但是不区分大小写 - ...

  7. Spring框架总结

    Spring(由Rod Johnson创建的一个开源框架) Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson创建.简单来说,Spr ...

  8. Object.assign方法复制或合并对象

    Object.assign() 方法可以把任意多个的源对象自身的可枚举属性拷贝给目标对象,然后返回目标对象 var obj = { a: 1 }; var copy = Object.assign({ ...

  9. C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 基于数据库资源的多语言实现

    以前的开发平台里,是用xml语言包实现了多语言功能,现在新的平台里进行了调整,把多语言包资源放在数据库表里实现了. 我们系统预留了多语言的配置全局变量.可以通过配置这个参数达到切换多语言的目的 我们在 ...

  10. 在WebAPI使用Session

    最近在改写WebApp时要将以前用泛型处理例程写的Captcha 改成使用WebApi 来实作机制,在实作的过程中发现使用IRequiresSessionState session也无法使用(cont ...