已知A,B和C为三个递增有序的线性表,现要求对A表作如下操作:删去那些既在B表中出现又在C表中出现的元素。试对顺序表编写实现上述操作的算法.(注意:题中没有特别指明同一表中的元素值各不相同)。

C code:

#include<stdio.h>
#include<stdlib.h>
#define LIST_INIT_SIZE 10
#define LIST_INCREMENT 2
#define ERROR 0
#define OK 1
#define OVERFLOW -1
#define TRUE 1
typedef int Status;

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

void InitList(SqList &L)
{
     L.elem=(int*)malloc(LIST_INIT_SIZE*sizeof(int));
     if(!L.elem)
       exit(OVERFLOW);
     L.length=0;
     L.listsize=LIST_INIT_SIZE;
}

Status ListInsert(SqList &L,int i,int e)
{
     int *newbase,*q,*p;
     if(i<1||i>L.length+1)
       return ERROR;
     if(L.length==L.listsize)
     {
          newbase=(int*)realloc(L.elem,(L.listsize+LIST_INCREMENT)*sizeof(int));
          if(!newbase)
            exit(OVERFLOW);
          L.elem=newbase;
          L.listsize+=LIST_INCREMENT;
         
        }
        q=L.elem+i-1;
        for(p=L.elem+L.length-1; p>=q; --p)
          *(p+1)=*p;
        *q=e;
        ++L.length;
        return OK;
}

void CreateList(SqList &L,int len)
{
     int i,t;
     printf("Please input elems: ");
     for(i=1; i<=len; i++)
     { 
       scanf("%d",&t);
          ListInsert(L,i,t); 
        }
}

void ListTraverse(SqList L,void(*vist)(int&))
{
     int *p=L.elem;
     int i;
     for(i=1; i<=L.length; i++)
     {
          vist(*p++);
        }
        printf("\n");
}

void print1(int &c)
{
     printf("%d ",c);
}

int cmp(const void *a,const void *b)
{
     return *(int*)a - *(int*)b;
}

void ListSort(SqList &L)
{
  qsort(L.elem,L.length,sizeof(int),cmp);    
    
}

void ListCross(SqList La,SqList Lb,SqList &Lc)
{
     int i=0,j=0,k=1;
     while(i<La.length && j<Lb.length)
     {
          if(La.elem[i]<Lb.elem[j])
      i++;
    else
    {
         if(La.elem[i]>Lb.elem[j])
           j++;
         else
         {
              ListInsert(Lc,k,La.elem[i]);
              i++;
              k++;
            }
       }         
        }
}

void ListMinus(SqList La,SqList Lb,SqList &Lc)
{
     int i=0,j=0,k=1;
     while(i<La.length && j<Lb.length)
     {
          if(La.elem[i]<Lb.elem[j])
          {
            ListInsert(Lc,k,La.elem[i]);
            i++;
            k++;
          }
          else
          {
               if(La.elem[i]>Lb.elem[j])
               {
                    j++;
                  }
                  else
                  {
                       i++;
                       j++;
                     }
             }  
        }
    
}

int main()
{
     SqList La,Lb,temp,Lc,Ld;
     InitList(La);
     InitList(Lb);
     InitList(Lc);
     InitList(Ld);
     InitList(temp);
     
     int La_len,Lb_len,Lc_len;
     printf("input length of La: ");
     scanf("%d",&La_len);
     printf("input length of Lb: ");
     scanf("%d",&Lb_len);
     printf("input length of Lc: ");
     scanf("%d",&Lc_len);
     
     CreateList(La,La_len);
     CreateList(Lb,Lb_len); 
     CreateList(Lc,Lc_len); 
     
     printf("List a: ");
     ListTraverse(La,print1);
     printf("List b: ");
     ListTraverse(Lb,print1);
     printf("List c: ");
     ListTraverse(Lc,print1);
     
     printf("After sorting List a: ");
     ListSort(La);
     ListTraverse(La,print1);
     printf("After sorting List b: ");
     ListSort(Lb);
     ListTraverse(Lb,print1);
     printf("After sorting List c: ");
     ListSort(Lc);
     ListTraverse(Lc,print1);
     
     ListCross(Lb,Lc,temp);
     ListSort(temp);
     printf("temp List: ");
     ListTraverse(temp,print1);
     
  ListMinus(La,temp,Ld);
  ListSort(Ld);
     printf("List d: ");
     ListTraverse(Ld,print1);
     return 0;

}

转载于:https://www.cnblogs.com/iwuyudong/archive/2011/05/03/2234051.html

线性表--算法设计题2.29相关推荐

  1. 线性表--算法设计题2.23

     设线性表A=(a1,a2--,am),B=(b1,b2--,bn),试写一个按下列规则合并A,B为线性表C的算法,即使得 C=(a1,b1,--am,bm,--bn) 当m<=n时: C=(a ...

  2. 线性表--算法设计题2.25

    假设以两个元素依值递增有序排列的线性表A和B分别表示两个集合(即同一表中的元素值各不相同),现要求另辟空间构成一个线性表C,其元素为A和B中元素的交集,且表C中的元素有依值递增有序排列.试对顺序表编写 ...

  3. 线性表应用之线性表算法设计六大经典案例

    目录: 1.顺序有序表的合并         重复式合并         不重复式合并 2.链式有序表的合并         重复式合并         不重复式合并 3.链式有序表的反序合并 4.两 ...

  4. 算法设计题3.16-栈和队列-第3章-《数据结构习题集》-严蔚敏吴伟民版

    习题集完整源码部分 第3章  栈和队列                                                                                 ...

  5. 算法设计题3.27-栈和队列-第3章-《数据结构习题集》-严蔚敏吴伟民版

    习题集完整源码部分 第3章  栈和队列                                                                                 ...

  6. c语言数据结构算法设计题,数据结构题集(C语言版)算法设计题答案[].doc

    数据结构题集(C语言版)算法设计题答案[].doc 第一章 绪论 1.16 void print_descending(int x,int y,int z)// 按从大到小顺序输出三个数 { scan ...

  7. 线性表算法题库_数据结构与算法(线性表)练习题

    .word 资料 . 三.写一个算法合并两个已排序的线性表. (用两种方法:数组表示的线性表(顺序表)和 指针表示的线性表(链表) ) 要求: 1 .定义线性表节点的结构,并定义节点的型和位置的型. ...

  8. pta数据结构-线性表(判断题和选择题)

    数据结构 判断题 选择题 ##这是博主小白做过的一些pta题,分 判断题和 选择题 判断题 1-1 对于顺序存储的长度为N的线性表,访问结点和增加结点的时间复杂度分别对应为O(1)和O(N). 答案: ...

  9. 数据结构算法设计题 (超详细)

    整理日期:2022-12-08 目录 一.线性表 二.栈和队列 三.数组和广义表 四.树和二叉树 五.图 六.查找算法 七.排序算法 一.线性表 (1)将两个递增的有序链表合并为一个递增的有序链表.要 ...

最新文章

  1. 用C语言扩展PHP功能
  2. php redis set集合操作,php对redis的set(集合)操作
  3. win10下gnuplot的安装和使用
  4. 【深度学习】深入浅出CRF as RNN(以RNN形式做CRF后处理)
  5. 重磅推荐《南瓜书》:周志华《机器学习》的代码实现
  6. python顺序结构实验设计_实验二 顺序结构程序设计(验证性实验)
  7. fckeditor 漏洞php,fckeditor上传漏洞利用总结
  8. python 新闻摘要_每日新闻摘要:Microsoft内部禁止应用程序,这样就可以了
  9. python中类的构成_Python中类型关系和继承关系实例详解
  10. Spark系列-SparkSQL实战
  11. Atitit 文件上传功能的实现 图片 视频 目录 1. 上传原理 1 1.1. http post编码 multipart / form-data 1 1.2. 临时文件模式 最简单 2 1.3
  12. 【收藏推荐】Markdown常用LaTeX数学符号公式
  13. Mysql8.x主从基础同步
  14. PPT怎么修改母版背景
  15. 【计蒜客 A1594 --- 封印之门】floyd
  16. html职业性格测试,MBTI职业性格测试专业版
  17. PS制作 LOGO图片
  18. 达梦数据库忘记SYSDBA密码的问题探讨
  19. Django入门 | 官方文档带你快速入门
  20. 【项目设计】基于OneNet平台的心率监测系统 -嵌入式 -物联网

热门文章

  1. html流式布局插件,Jquery瀑布流网格布局插件
  2. windows副本不是正版怎么办_盗版系统总是崩溃?别着急,让我来告诉你正版系统怎么下载...
  3. PCM复用设备和PDH设备的区别介绍
  4. 【渝粤教育】国家开放大学2019年春季 1062文学英语赏析 参考试题
  5. 【渝粤教育】国家开放大学2018年秋季 0707-21T办公室实务 参考试题
  6. 【渝粤题库】陕西师范大学201381 国际经济法作业
  7. 【渝粤题库】广东开放大学 商务交际听说 形成性考核
  8. 【渝粤题库】国家开放大学2021春1080工程数学(本)题目
  9. 删除linux 软raid0,配置Linux软RAID0
  10. spss非线性回归分析步骤_SPSS与简单线性回归分析