精华内容
下载资源
问答
  • 2017-03-22 11:18:20

    【注解】这里面用到的LocateItem(List L,int e)参数与LocateElem(List L,int e,compare())形式不同,没有用到caompare()函数,也算形式上稍有改变。关于我自定义的LocateItem函数参见基本操作文章里的定义。


    #include<stdlib.h>

    #include<stdio.h>
    #include<malloc.h>
    #include"ADT.H"




    void UnionList(List &La,List Lb){
        int La_len=ListLength(La);
    int Lb_len=ListLength(Lb);
    int e;
    for(int i=1;i<=Lb_len;i++){
    GetElem(Lb,i,e);
    // ListDelete(Lb,i,e);
    if(LocateItem(La,e)==0){//L1中没有找到该数据就执行插入动作
    // printf("%d",LocateItem(La,e));测试位置
    ListInsert(La,++La_len,e);
    }
    }
    // DestroyList(Lb);//销毁第二个线性表
    }


    void main(){//测试函数
    List L1;
    List L2;
    int j=0;
    int k=0;
    int flag;
    int value;
    InitList(L1);
    InitList(L2);
    printf("输入线性表一的初始化长度:");
    scanf("%d",&flag);
    while(flag>0){
    scanf("%d",&value);
    ListInsert(L1,++j,value);
    flag--;
    }
    printf("输入线性表二的初始化长度:");
    scanf("%d",&flag);
    while(flag>0){
    scanf("%d",&value);
    ListInsert(L2,++k,value);
    flag--;
    }
    UnionList(L1,L2);
    printf("合并后的线性表为:\n");
    ListTravers(L1);
    system("pause");
    }
    更多相关内容
  • !... 1.图中这种问题怎么解决? 2.引用头文件,比如#include "helper.h" 这种也会报错 是什么原因呢?...3.调用函数方法没有自动提示,C语言都是需要自己一个代码挨着敲吗? 刚学C,希望有耐心的大佬帮忙解答!
  • #include #include #define MAXSIZE 10 typedef struct { int ...//合并后Lc中的最后一个元素的位置 } void putlist(Seqlist L) { int i; printf("合并链表输出:"); for (i=0; i; i++) printf("%d ",L.elem[i]); }

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

    #define MAXSIZE 10

    typedef struct
    {
        int elem[MAXSIZE];
        int last;
    }Seqlist;

    void mergelist(Seqlist La,Seqlist Lb,Seqlist &Lc);
    void initlist(Seqlist &L);
    void putlist(Seqlist L);

    int main()
    {
        Seqlist La,Lb,Lc;
        int a;//删除元素的位置 
        printf("La元素输入\n"); 
        initlist(La);    
        printf("Lb元素输入\n");
        initlist(Lb);
        
        mergelist(La,Lb,Lc);
        putlist(Lc);
        return 0;
    }

    /*void initlist(Seqlist &L)  中 & 表示引用
    如果传递的结构体变量要改变数值就使用值传递 可以是加&
    也可以是 指针类型 及 Seqlist *L */
    void initlist(Seqlist &L) 
    {
        int n;
        int i;
        printf("输入表中总元素:");
        scanf("%d",&n);
        for (i=0; i<n; i++)
            scanf("%d",&L.elem[i]);
        L.last = i-1; // 用来保存顺序表中最后一个元素的位置 
    }

    void mergelist(Seqlist La,Seqlist Lb,Seqlist &Lc)
    {
        int i=0,j=0;
        int k=0;
        
        while(i<=La.last && j<=Lb.last)//插入 直到其中一个表被扫描完 
        {
            if (La.elem[i]<=Lb.elem[j])
                Lc.elem[k++]=La.elem[i++];
            else
                Lc.elem[k++]=Lb.elem[j++];
        }
        
        while(i<=La.last)//当La有剩余元素,就把他赋给 Lc 
        {
            Lc.elem[k++]=La.elem[i++]; 
        }
        
        while(j<=Lb.last)//当Lb有剩余元素,就把他赋给 Lc
            Lc.elem[k++]=Lb.elem[j++];
            
        Lc.last = La.last+Lb.last+1;//合并后Lc中的最后一个元素的位置 
    }

    void putlist(Seqlist L)
    {
        int i;
        
        printf("合并链表输出:");
        for (i=0; i<=L.last; i++)
            printf("%d ",L.elem[i]); 
    }

    展开全文
  • 一般线性表合并C语言描述)

    千次阅读 多人点赞 2020-10-20 13:20:26
    假设利用两个线性表 LA 和 LB 分别表示两个集合 A 和 B (即线性表中的数据元素为集合中的成员),现要求一个新的集合 A = AUB .假如,设 LA = (7,5,3,11) LB = (2,6,3) 合并后 LA = (7,5,3,11,2,6) 二、算法 (1)...

    一、题目描述

    假设利用两个线性表 LA 和 LB 分别表示两个集合 A 和 B (即线性表中的数据元素为集合中的成员),现要求一个新的集合 A = AUB .假如,设
    LA = (7,5,3,11)
    LB = (2,6,3)
    合并后
    LA = (7,5,3,11,2,6)

    二、算法

    (1)算法思想

    扩大线性表LA,将存在于线性表LB中而不存在于LA中的数据放到线性表LA中。只要从线性表LB中依次取得每个元素,并依次在线性表LA中进行查访,若不存在则将其插入。

    (2)算法描述

    /*合并*/
    void Union(LinkList& LA, LinkList& LB,int n,int m)
    {
    	int e,a;
    	for (int i = 1;i <= n;i++)
    	{
    		e = GetElem(LB, i, e);//取LB中第i个元素赋值给e
    		a = LocateElem(LA, e);//返回0或者1
    		if (a != 1 )//链表里面元素为空了或者没有找到元素
    			ListInsert(LA,m, e);//LA中不存在和e相同的数据元素,插入
    	}
    }
    

    三、完整源码

    #include<stdio.h>
    #define OK 1
    #define ERROR 0
    
    typedef int ElemType;
    typedef int Status;
    
    /*定义链式存储结构*/
    typedef struct LNode
    {
    	ElemType data;
    	struct LNode* next;
    }*LinkList;
    
    /*链表的初始化*/
    Status InitList(LinkList& L)
    {
    	L = new LNode;
    	L->next = NULL;
    	return OK;
    }
    
    /*创建链表*/
    void CreateList(LinkList& L,int n)
    {
    	LinkList p;//生成一个新结点*p
    	L = new LNode;
    	L->next = NULL;
    	for (int i = n;i > 0;--i)
    	{
    		p = new LNode;
    		printf("请输入第%d个元素:", i);
    		scanf_s("%d", &p->data);//输入元素
    		p->next = L->next;//新结点与后继结点接起来
    		L->next = p;//新结点与前驱结点接起来
    	}
    }
    
    /*按序号查找元素*/
    Status GetElem(LinkList L, int i, ElemType& e)
    {
    	LinkList p;
    	int j = 1;
    	p = L->next;//初始化,p指向第一个结点
    	while (p && j < i)
    	{
    		p = p->next;//p向后扫描
    		++j;
    	}
    	if (!p || j > i) return ERROR;//i值不存在
    	e = p->data;//第i个元素的数据域赋值给e
    	return e;
    }
    
    /*查访LA*/
    Status LocateElem(LinkList L, ElemType e)
    {
    	LinkList p;
    	p = L->next;//p指向头结点
    	while ( p && p->data != e )//链表不为空且没有找到要找元素就一直循环
    	{
    		p = p->next;//p往下找
    	}
    	/*跳出循环,要么是链表没元素,要么是找到要找的元素*/
    	if (!p) return ERROR;//如果链表空了,返回0
    	return OK;//返回1说明找到元素了
    }
    
    /*插入到LA*/
    Status ListInsert(LinkList &L,int m,ElemType &e)
    {
    	LinkList p;
    	p = L;
    	int j = 0;
    	while (p && j < m)
    	{
    		p = p->next;
    		++j;
    	}
    	if (!p || j > m) return ERROR;
    	LinkList s;//新建结点
    	s = new LNode;
    	s->data = e;//存入数据域
    	s->next = p->next;//更改指针的位置
    	p->next = s;
    	return OK;
    }
    
    /*合并*/
    void Union(LinkList& LA, LinkList& LB,int n,int m)
    {
    	int e,a;
    	for (int i = 1;i <= n;i++)
    	{
    		e = GetElem(LB, i, e);//取LB中第i个元素赋值给e
    		a = LocateElem(LA, e);//返回0或者1
    		if (a != 1 )//链表里面元素为空了或者没有找到元素
    			ListInsert(LA,m, e);//LA中不存在和e相同的数据元素,插入
    	}
    }
    
    /*输出链表*/
    void PrintList(LinkList L)
    {
    	LinkList p;
    	p = L->next;
    	while (p)
    	{
    		printf("%d,", p->data);
    		p = p->next;
    	}
    }
    
    int main()
    {
    	int m, n,e;
    	LinkList LA, LB;//声明两个链表
    	InitList(LA);//初始化LA
    	InitList(LB);//初始化LB
    
    	printf("请输入LA元素的个数m:");
    	scanf_s("%d", &m);
    	CreateList(LA, m);//创建LA
    	printf("集合LA的元素为:");
    	printf("LA=(");
    	PrintList(LA);//输出集合LA
    	printf(")\n");
    	printf("\n");
    
    	printf("请输入LB元素的个数n:");
    	scanf_s("%d", &n);
    	CreateList(LB, n);//创建LB
    	printf("集合LB的元素为:");
    	printf("LB=(");
    	PrintList(LB);//输出集合LB
    	printf(")\n");
    	printf("\n");
    
    	printf("合并后集合为:");
    	Union(LA,LB,n,m);//合并LA和LB
    	printf("LA=(");
    	PrintList(LA);
    	printf(")\n");
    	return 0;
    }
    

    四、运行结果展示

    在这里插入图片描述

    展开全文
  • c语言去实现线性表合并,删除重复(不重新排序) 老师留了一个作业,有两个集合A和B,设A={7,5,3,11},B={2,6,3},合并后A={7,5,3,11,2,6} 自己没有思路百度了好久,找到的大多都是其他语言的,要不就是直接重新排序...

    用c语言去实现线性表的合并,删除重复(不重新排序)

    老师留了一个作业,有两个集合A和B,设A={7,5,3,11},B={2,6,3},合并后A={7,5,3,11,2,6}
    自己没有思路百度了好久,找到的大多都是其他语言的,要不就是直接重新排序的。硬着头皮写出来了,经历了无数次修改,写成了一个小小代码(自己感觉写的一塌糊涂,幸运的是还能运行)。然后发出来了来给大家提供一点微不足道的思路,也算是记录自己学习的一个过程吧。
    上代码!

    先来段我自己写的一塌糊涂代码

    #include <stdio.h>
    #define MAXSIDE 100 
    void ListOutput(int *a,int *b , int m)
    {
    	int i, j, k, h = 0, g = 0,c[MAXSIDE];
    	for (i = 0; *(a + i) != 0 ; i++)
    		{
    		for( j = 0 ; *( b + j ) != 0 ; j++)
    			if(*(a+i)==*(b+j))//比较A和B找到相等项时,把此项在数组b中的位置存到a中 
    			{
    			g=c[h];
    			h++;
    			break;//跳出循环 
    			}
    		}
        for( k = 0,h = 0 ; *(a + k) != 0 ; k++)
        if(k != c[h])//当B里面的值的序号不等于刚刚提取出来的,在A的实际存储长度后,存储B的值 
    	*( b + m + k) = *( a + k );
    	else h++;
    }
    int Listlength(int *a) //返回A实际存储长度 
    {
    	int m;
    	for( m = 0 ; *(a + m) != 0 ; m++);
    	return m;
    }
    int main()
    {
    	int A[MAXSIDE] = {7,5,3,11},B[MAXSIDE] = {2,6,3} , n , m ;
    	m = Listlength(A) ;
    	ListOutput(B , A , m);
    	for (n = 0; n<6; n++)//循环输出A的值 
    	printf("%d\n", A[n]);
        return 0;
    }
    
    

    附上运行截图
    在这里插入图片描述我感觉我思路挺乱的,功能实现的挺暴力的,如果您有对我的一些建议,非常感谢您可以指出来,让我获得一些您的评价,从中来进行更好地学习。

    下面附上老师的代码(c++)

    老师课后给的标准答案是c++,我跑了一遍,感觉老师的程序兼职太精妙了,c++看不懂的可以查一下简单的运算符,然后看看思路,下面附上!

    #include<iostream>
    using namespace std;
    
    #define MAXSIZE 100
    #define OK 1
    #define ERROR -1
    #define OVERFLOW -2
    
    typedef int Status;  
    
    typedef  struct {
      int  *elem;    
      int  length;                                                              
     }SqList;
     
    Status InitList_Sq(SqList &L){   // 初始化 
        L.elem=new int[MAXSIZE];   
        if(!L.elem) exit(OVERFLOW);       
        L.length=0;					  
        return OK;
    }
    
    int GetLength(SqList L) // 求长度 
    {   
      return (L.length);        
    }
    
    int GetElem(SqList L, int i, int &e)  // 获取元素值 
    {
      if (i<1||i>L.length) return ERROR;   
        e=L.elem[i-1];   
      return OK;
    }
    
    int LocateELem(SqList L,int e)  // 查找 
    {  
      int i;
      for (i=0;i< L.length;i++)
        if (L.elem[i]==e) return i+1;                
      return 0;    
    }
    
    Status ListInsert_Sq(SqList &L,int i ,int e) // 第i个元素前插入 
    {
       int j;
       if(i<1 || i>L.length+1) return ERROR;	      
       if(L.length==MAXSIZE) return ERROR;         
       for( j=L.length-1;j>=i-1;j--) 
           L.elem[j+1]=L.elem[j];    
       L.elem[i-1]= e;                     
       ++L.length;		     	
       return OK;
    }
    
    /* Status ListInsert_Sq(SqList &L, int i , int e){  // 第i个元素后插入 
       int j;
       if(i<0 || i>L.length) return ERROR;	      
       if(L.length==MAXSIZE) return ERROR;         
       for( j=L.length; j>=i+1 ; j--) 
           L.elem[j]=L.elem[j-1];    
       L.elem[i]= e;                     
       ++L.length;		     	
       return OK;
     } */
     
    void ListOutput(SqList L)  // 输出顺序表的元素值 
    {
    	int i;
    	for (i = 0; i < L.length; i++)
    	  cout << L.elem[i] << " ";
    	cout << endl;
    }
    
    void MergeList(SqList &La, SqList Lb) // 求并集 
    {
      int La_len,Lb_len,e;
      La_len=GetLength(La);
      Lb_len=GetLength(Lb); 
      for(int i=1;i<=Lb_len;i++)
      {
        GetElem(Lb,i,e);  
        if(!LocateELem(La,e))   
         { ListInsert_Sq(La,++La_len,e); }  
      }
    }
    
    main()
    {
    	SqList la,lb; // la.elem la.length lb.elem lb.lentgh
    	int a,b,i,e;
    	InitList_Sq(la);
    	InitList_Sq(lb);
    	cout<<"请输入集合A的元素个数:"<<endl;
    	cin>>a;
        cout<<"请输入集合B的元素个数:"<<endl;
    	cin>>b;
    	cout<<"请输入集合A的各元素值:"<<endl; 
    	for(i=1;i<=a;i++)
        { 
    	   cin>>e;
    	   ListInsert_Sq(la,i,e); // 插入在末尾 
        }
        ListOutput(la);
        cout<<"请输入集合B的各元素值:"<<endl; 
    	for(i=1;i<=b;i++)
        { 
    	   cin>>e;
    	   ListInsert_Sq(lb,i,e);
        }
        ListOutput(lb);
        MergeList(la,lb);
        ListOutput(la);
    }
    

    还是运行截图~
    在这里插入图片描述

    总结

    1、希望这些代码可以给大家带来帮助
    2、希望大佬可以对我的代码指点一下
    3、这是我的第一篇博客,希望以后我可以坚持下去

    展开全文
  • 扩大线性表LA,将存在于线性表LB中而不存在于线性表LA中的数据元素插入到线性表LA中去。 时间复杂度:O(ListLength(LA)*ListLength(LB)) viod union(List &La,List Lb){ //将所有在线性表Lb中但不在La中的数据...
  • C语言线性表结构实验

    2010-11-06 10:30:04
    (2)掌握线性表的顺序存储结构的定义及C语言实现。 (3)掌握线性表在顺序存储结构即顺序表中的各种基本操作。 2.问题描述: 假设两线性表LA和LB分别表示两集合A和B,要求新集合A=AB。 3. 数据输入: 由文件...
  • 线性表合并/c语言

    2011-04-15 20:37:35
    该程序功能强大,是用数据结构的单链表实现的,是面向过程的win32控制台程序,输入线性表的数据的时候,不用输入要建立的节点个数,直接以回车结束,数与数间以空格隔开
  • 这个是我的插入函数,然后他每次运行就会卡在那个地方,不知道有什么问题 下面这个是main函数里的部分,就是想要把lb里有的la里没有的插到la后面 下面这个是合并函数 感谢
  • 一、线性表简介: 1、线性表是最基本、最简单、也是最常用的一种数据结构。线性表(linear list)是数据结构的一种,一个线性表是n个具有相同特性的数据元素的有限序列 2、线性表中数据元素之间的关系是一对一的关系...
  • #include #define ok 1#define error 0#define true 1#define false 0第二个文件seqlist.h#define elemtype int#define maxsize 100 /*此处的宏定义常量表示线性表可能达到的最大长度*/typedef struct{elemtype elem...
  • 已知两个非递减线性表la和la,把它们合并线性表lc中,要求lc表也是非递减的,并且不能有重复的元素,求大神帮助
  • 本博文采用C语言,实现线性表的交集与并集,并对内容做了详细的测试,可值得收藏!
  • c语言建立线性表 顺序储存 储存结构 初始化(建立)顺序表 查找操作 一、按值查找,找到返回对应的下标 二、按照下标返回元素 插入操作 一、在线性表尾部添加元素 二、在位置i处插入元素 三、顺序表(有序)插入,...
  • 严蔚敏版的教材,算法2.2,下面是代码实现。。。。#include using namespace std;typedef int element;#define maxsize 100typedef struct{element aa[maxsize];int last;}sqlist;void mergelist(sqlist *la,sqlist ...
  • C语言数据结构--线性表

    千次阅读 2020-05-30 23:32:40
    严蔚敏老师的C语言数据结构一书中,使用的都是伪代码,实际运行总是会出现问题,这里将线性表的伪代码补全,还有完整的程序代码
  • 匿名用户 1级 2017-12-26 回答 #include #include #include #defineOVERFLOW -2 #define OK 1 #define ERROR 0 #defineLIST_INIT_... } } 这个是我最近编写的 顺序表也是线性表的 这里还有链表的程序 用的话再传给你
  • 线性表合并算法

    2021-01-12 00:00:48
    线性表顺序存储实验3 已知两个非递减序列LA和LB,LA: 1,3,9,9,12,13,18,21 LB: 2,4,6,10,15,19,22,23,25 使用线性表合并算法,合并LA和LB为LC,要求仍然为非递减序列,并输出LC. COMMON.H #include<stdio.h> #...
  • 线性表合并

    2011-11-08 11:01:15
    线性表合并.rar 里有数据结构线性表的合并等操作。推荐下载,欢迎大家下载!
  • 一、线性表的概念及运算 (一)线性表的逻辑结构 线性表是n个数据元素的有限序列。表中元素存在线性关系。根据它们之间的关系可以构成一个线性序列,记作 (a1,a2,...an) 线性表中的元素具有相同的数据类型。...
  • 线性表的定义线性表(linear_list)是属于同一个数据对象的数据元素的有限序列。线性表中数据元素的个数称为线性表的长度,长度为0的线性表称为空表。上述定义中的数据元素可以是只有一个数据项的简单数据,也可以由...
  • } /*当两个顺序表合并的时候,最大的问题,可能不是合并本身,而是合并前的排序 ,考虑到 了了们的水平有限,这里就使用了比较简单的插入排序。 */ //这里只有顺序表的合并,有需要的话,我会把链表的合并也写一下。...
  • 线性表合并

    2022-04-21 20:45:12
    C语言 数据结构
  • #include <stdio.h> #include <stdlib.h> #include <stdbool.h> /* 定义全局变量 */ #define MAXSIZE 100 #define OVERFLOW -2 #define OK 1 #define ERROR -1 ... // 线性表的最后一.
  • 二、实现方法 在C语言中,可借助于一维数组类型来描述线性表的顺序存储结构 我们的代码要规范: 1、自己可以不同的项目用 2、其他同事用 3、外包公司给.h .so文件 1、建一个空表 sqlink list_create() { /*malloc*/...
  • } ◆2.23③ 设线性表A=(a1,...,am), B=(b1,...,bn),试写 一个按下列规则合并A、B为线性表C的算法,即使得 C=(a1,b1,...,am,bm,bm+1,...,bn) 当m≤n时; 或者 C=(a1,b1,...,an,bn,an+1,...,am) 当m>n时。 ...
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼这是源代码:#includeint f_len(int l[500]){int i=0 , len;printf("please input numbers: ");do{scanf("%d",&l[i]);i++;}while ( (i<500) &...
  • } //合并有序线性表 Status MergeList(SqList La, SqList Lb, SqList &Lc) { ElemType *p1 = La.pstu; ElemType *p2 = Lb.pstu; ElemType *p3 = Lc.pstu; Lc.Listsize = Lc.Length = La.Length + Lb.Length; ...
  • 有序线性表合并

    2015-04-05 18:30:31
    有序线性表合并,用C语言来描述的,是线性表的基本操作

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,534
精华内容 1,413
关键字:

c语言 线性表合并