2.1线性表的类型定义
列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线性表的类型定义相关推荐
- 线性表【01】线性表的类型定义
线性表简介 线性结构是一个数据元素的有序(次序)集合. 线性结构的基本特征为: 1. 集合中必存在唯一的一个"第一元素": 2.集合中必存在唯一的一个 "最后元素&quo ...
- 线性表抽象数据类型定义与顺序表操作
作业3-线性表抽象数据类型定义与顺序表操作 1-1 对于顺序存储的长度为N的线性表, 访问结点和增加结点的时间复杂度 分别对应为O(1)和O(N).(T) [解析]增加结点,不同位置复杂度不同,但平均 ...
- 线性表篇 什么是线性表
基本概念 目录 基本概念 一.基本概念 二.线性表的基本特征 三.线性表的类型定义 一.基本概念 数据结构是相互之间存在一种或者多种特定关系的数据元素的集合. 在实际解 ...
- 数据结构 严蔚敏 第二章 线性表
数据结构 严蔚敏 第二章 线性表 线性表:由n个(n>=0)数据特征相同的元素构成的有限序列. 线性表的类型定义表示和实现 顺序表 存储单元地址连续 随机存取 若每个元素占用 m 个存储单元,以 ...
- 期末复习之数据结构 第2章 线性表
目录 一.课本知识点 1.线性结构 2.线性表 3.线性表的顺序表示 4.顺序表的基本操作 5.线性表的链式表示 6.链表的基本操作 总结 二.练习题 一.课本知识点 1.线性结构 定义:若结构是非空 ...
- 数据结构绪论、线性表——从零起步的数据结构学习日志1【极客BOY-米奇】
文章目录 前言(转载请说明作者:极客BOY) 什么是数据结构? 一些名词简称 数据结构的体系 线性结构 线性结构的基本特征 线性表 线性表是一种最简单的线性结构 线性表的类型定义 抽象数据类型线性表( ...
- 学会线性表,一篇就够了
线性表是最常用最典型的线性结构. 简易目录: 线性表: 逻辑特征 线性表的类型定义 存储结构 顺序存储表示 元素存储位置的计算 顺序表的基本操作实现 顺序表各算法时间复杂度的计算 C++中的参数传递 ...
- c语言实现线性表的算法,数据结构算法代码实现——线性表的定义(一)
线性表的定义 线性表:是最常用且最简单的一种数据结构,它是一种线性数据结构,是由类型相同的n个(n≥0)数据元素组成的有序序列. 线性表的特点:有且只有一个被称作"第一个"的数据元 ...
- 线性表的定义和基本运算之线性结构
一.线性表的逻辑定义和性质 线性表是最简单和最常用的一种数据结构,他是由n个数据元素(结点)a1,a2,a3,a4........an组成的有限序列.其中,数据元素个数那位表的长度.当n为0时称为空表 ...
最新文章
- 基于Sentinel的Redis3.2高可用方案
- Redis-cluster架构
- c++构造函数成员初始化中赋值和初始化列表两种方式的区别
- Python实训day14pm【Python网络爬虫综合大作业-参考解析】
- 2016年华为网络技术精英大赛复赛试题
- python写名片管理系统_Python实现名片管理系统
- 爱奇艺如何开启两指双击触发奇观功能
- 管理感悟:你的能力是有限的
- radius服务器mac_连如何抵御MAC攻击都不知道 过年还如何抵御三姑六婆的魔法攻击...
- error while trying to retrieving text
- 教你利用clustalw和blat解决接头问题问题
- ガラムバレル / 泰坦
- 谭浩强C++ 第十章
- V-SLAM重读(3):SVO代码阅读和调试修改
- COLLATE LOCALIZED ASC
- BZOJ 1616: [Usaco2008 Mar]Cow Travelling游荡的奶牛【DP】
- 【 Linux学习】解决Ubuntu系统发送邮件失败,报错:send-mail: fatal: open /etc/postfix/main.cf: No such file or directory
- 【第8天】SQL进阶-更新记录(SQL 小虚竹)
- POP3 SMTP邮件服务器搭建详细图解教程1
- [活动预告]倒数1天!开源世界高峰论坛将于北京举行,偶数科技将进行主题演讲和产品展示
热门文章
- 作为前阿里人,来扒一扒数据中台的皇帝外衣
- 不懂代码,如何做出实时刷新的数据大屏?
- 在我还是14岁的时候那会学C++
- DatagridView 常用功能代码
- C程序设计基础之多维数组的指针变量
- 在 CTreeCtrl 中枚举系统中的所有窗口!(II)
- 曝光:一位来自微软公司的粉丝 写给我的信
- 苹果小圆点怎么弄出来_原来苹果手机轻点2下屏幕就能截图,以前还不知道,太方便了...
- 限时免费!Cell旗下 Heliyon 多学科特刊征稿
- 关于MacBook Pro 15 usb连接iPhone反复重连的解决办法