列2-1:假设利用两个线性表LA和LB分布表示两个集合A和B(即线性表中的数据元素即为集合中的元素),现要求一个新的集合A=AUB。这就要求对线性表作如下操作,扩大线性表LA,将存在于线性表LB中而不存在于线性表LA中的数据元素插入到线性表LA中去。只要从线性表LB中依次取得每个数据的元素,并依值在线性表LA中进行查访,若存在,则插入之。上述操作过程可用下列算法描述之

void Union(List &La, List Lb) {  // 将所有在线性表Lb中但不在La中的数据元素插入到La中int La_len,Lb_len,i;ElemType e;La_len = ListLength(La);          // 求线性表的长度  Lb_len = ListLength(Lb);for (i=1; i<=Lb_len; i++) {GetElem(Lb, i, e);              // 取Lb中第i个数据元素赋给eif (!LocateElem(La, e, equal))  // La中不存在和e相同的数据元素ListInsert(La, ++La_len, e);  // 插入}
} // union

书中给我了伪代码,我们现在来分析下:

1.第一行我们可以知道这个函数叫联合,包含来个参数,一个是线性表La,一个是表Lb,且La是一个引用,这表名La是将会被修改的

2.第三行我们可以知道定义了两个int型变量用于存La和Lb的长度

3.第四行定义了一个ElemType(我猜测这是element和type的组合表示这是一个元素类型,具体是什么类型取决于List容器里面的类型),从下面的代码可知这个变量是为提取Lb中某个数与La中的数进行比较,

4.第五行,第六行可知他调用了一个叫ListLength的函数这函数要传入List。返回List的长度

5.第七行是进行一个循环,这个循环是Lb的长度,从for循环第一个参数可以知道,这个List是从下标1开始,而不是从0开始。

6.第八行是GetElem函数,意思是获取元素,从参数来看,我们知道他获取的是Lb的第i个元素,第三个参数填写的是e,这里我们要思考下如果e是普通类型的参数,那么他根本就无法回调给e(此函数无返回值,只有靠第三个参数回调数据),所以这个ElemType肯定是被typedf为*ElemType。还有一种可能,就是GetElem的第三个参数是一个引用。还是不懂的同学看下面的代码

#include <stdio.h>typedef struct List
{int Num = 1;
}*list;int main()
{list a;List b;b.Num = 10;a = &b;return 0;
}

运行结果:

7.第九行是LocateElem函数,这个用e和La中的每一个元素对比,第三个参数是equal,这个equal是提醒大家这里是比较是否相等,La中没有数和e相等时,if条件成立

8.第十行插入e进La,并且La_Len增加1。

例2-2:已知线性表LA和LB中的元素按值非递减有序排列,现要求将LA和LB归并为一个新的线性表LC,且LC中的数据元素仍按值非递减有序排列。例如,社

LA=(3,5,8,11)

LB=(2,6,8,9,11,15,20)

LC=(2,3,5,6,8,8,9,11,11,15,20)

从上述问题要求可知,LC中的数据元素或是LA中的数据元素,或是LB中的数据元素,则只要先设LC为空表,然后将LA或LB中的元素逐个插入LC中即可。为使LC中元素按值非递减有序排列,可设两个指针i和j分别指向LA和LB中某个元素,若设i当前所指的元素为a,j当前所指的元素为b,则当前应插入到LC中的元素为c为

c=a当a<=b时,或者c=b当a>b时

显然,指针i和j的初始值均为1,在所指元素插入LC之后,在LA或LB中顺序后移。代码如下:

void MergeList(List La, List Lb, List &Lc) {  // 已知线性表La和Lb中的元素按值非递减排列。// 归并La和Lb得到新的线性表Lc,Lc的元素也按值非递减排列。int La_len, Lb_len;ElemType ai, bj;    int i=1, j=1, k=0;InitList(Lc);La_len = ListLength(La);    Lb_len = ListLength(Lb);while ((i <= La_len) && (j <= Lb_len)) {  // La和Lb均非空GetElem(La, i, ai);GetElem(Lb, j, bj);if (ai <= bj) {ListInsert(Lc, ++k, ai);++i;} else { ListInsert(Lc, ++k, bj);++j;}}while (i <= La_len) {GetElem(La, i++, ai);  ListInsert(Lc, ++k, ai);}while (j <= Lb_len) {GetElem(Lb, j++, bj);  ListInsert(Lc, ++k, bj);}
} // MergeList

书中给我了伪代码,我们现在来分析下:

1.函数MergList,意思是混合链,我们可以知道有三个参数La,Lb和&Lc,Lc是要被修改的,所以设为引用

2.InitList是初始化了List,从这里我们可看出,InitList里面那个参数一个是引用

3.第一个while当一个List从头遍历到尾后就结束(剩下的直接加进去后面那两个while就是这个功能)

2.1线性表的类型定义相关推荐

  1. 线性表【01】线性表的类型定义

    线性表简介 线性结构是一个数据元素的有序(次序)集合. 线性结构的基本特征为: 1. 集合中必存在唯一的一个"第一元素": 2.集合中必存在唯一的一个 "最后元素&quo ...

  2. 线性表抽象数据类型定义与顺序表操作

    作业3-线性表抽象数据类型定义与顺序表操作 1-1 对于顺序存储的长度为N的线性表, 访问结点和增加结点的时间复杂度 分别对应为O(1)和O(N).(T) [解析]增加结点,不同位置复杂度不同,但平均 ...

  3. 线性表篇 什么是线性表

    基本概念 目录 基本概念 一.基本概念 二.线性表的基本特征 三.线性表的类型定义 ​​​​​​​ ​​​​​​​ 一.基本概念 数据结构是相互之间存在一种或者多种特定关系的数据元素的集合. 在实际解 ...

  4. 数据结构 严蔚敏 第二章 线性表

    数据结构 严蔚敏 第二章 线性表 线性表:由n个(n>=0)数据特征相同的元素构成的有限序列. 线性表的类型定义表示和实现 顺序表 存储单元地址连续 随机存取 若每个元素占用 m 个存储单元,以 ...

  5. 期末复习之数据结构 第2章 线性表

    目录 一.课本知识点 1.线性结构 2.线性表 3.线性表的顺序表示 4.顺序表的基本操作 5.线性表的链式表示 6.链表的基本操作 总结 二.练习题 一.课本知识点 1.线性结构 定义:若结构是非空 ...

  6. 数据结构绪论、线性表——从零起步的数据结构学习日志1【极客BOY-米奇】

    文章目录 前言(转载请说明作者:极客BOY) 什么是数据结构? 一些名词简称 数据结构的体系 线性结构 线性结构的基本特征 线性表 线性表是一种最简单的线性结构 线性表的类型定义 抽象数据类型线性表( ...

  7. 学会线性表,一篇就够了

    线性表是最常用最典型的线性结构. 简易目录: 线性表: 逻辑特征 线性表的类型定义 存储结构 顺序存储表示 元素存储位置的计算 顺序表的基本操作实现 顺序表各算法时间复杂度的计算 C++中的参数传递 ...

  8. c语言实现线性表的算法,数据结构算法代码实现——线性表的定义(一)

    线性表的定义 线性表:是最常用且最简单的一种数据结构,它是一种线性数据结构,是由类型相同的n个(n≥0)数据元素组成的有序序列. 线性表的特点:有且只有一个被称作"第一个"的数据元 ...

  9. 线性表的定义和基本运算之线性结构

    一.线性表的逻辑定义和性质 线性表是最简单和最常用的一种数据结构,他是由n个数据元素(结点)a1,a2,a3,a4........an组成的有限序列.其中,数据元素个数那位表的长度.当n为0时称为空表 ...

最新文章

  1. 基于Sentinel的Redis3.2高可用方案
  2. Redis-cluster架构
  3. c++构造函数成员初始化中赋值和初始化列表两种方式的区别
  4. Python实训day14pm【Python网络爬虫综合大作业-参考解析】
  5. 2016年华为网络技术精英大赛复赛试题
  6. python写名片管理系统_Python实现名片管理系统
  7. 爱奇艺如何开启两指双击触发奇观功能
  8. 管理感悟:你的能力是有限的
  9. radius服务器mac_连如何抵御MAC攻击都不知道 过年还如何抵御三姑六婆的魔法攻击...
  10. error while trying to retrieving text
  11. 教你利用clustalw和blat解决接头问题问题
  12. ガラムバレル / 泰坦
  13. 谭浩强C++ 第十章
  14. V-SLAM重读(3):SVO代码阅读和调试修改
  15. COLLATE LOCALIZED ASC
  16. BZOJ 1616: [Usaco2008 Mar]Cow Travelling游荡的奶牛【DP】
  17. 【 Linux学习】解决Ubuntu系统发送邮件失败,报错:send-mail: fatal: open /etc/postfix/main.cf: No such file or directory
  18. 【第8天】SQL进阶-更新记录(SQL 小虚竹)
  19. POP3 SMTP邮件服务器搭建详细图解教程1
  20. [活动预告]倒数1天!开源世界高峰论坛将于北京举行,偶数科技将进行主题演讲和产品展示

热门文章

  1. 作为前阿里人,来扒一扒数据中台的皇帝外衣
  2. 不懂代码,如何做出实时刷新的数据大屏?
  3. 在我还是14岁的时候那会学C++
  4. DatagridView 常用功能代码
  5. C程序设计基础之多维数组的指针变量
  6. 在 CTreeCtrl 中枚举系统中的所有窗口!(II)
  7. 曝光:一位来自微软公司的粉丝 写给我的信
  8. 苹果小圆点怎么弄出来_原来苹果手机轻点2下屏幕就能截图,以前还不知道,太方便了...
  9. 限时免费!Cell旗下 Heliyon 多学科特刊征稿
  10. 关于MacBook Pro 15 usb连接iPhone反复重连的解决办法