第3章线性表1
线性表的类型定义、顺序表示和实现
i=n 只删 an即可 1≤i≤n -1 将ai+1 ~an前移
23
bool deleteElem(SqList& L,int pos)
typedef int ElemType;
typedef char ElemType;
等;
②同一线性表中的数据元素必须具有相同的特性,属同一类 型;
③a2,关…系, ra是i-1,一a个i, a有i+1序, …偶,对an的)集,合a,i-1即领对先于于非ai,空表的示线了性数表据(元a1,素 之间的相邻关系,称ai-1是ai的直接前驱,ai是ai-1的直接后继 ;
6
2.1.3 操作举例
例:假设利用两个线性表La和Lb分别表示两 个集合A和B,求一个新的集合A=A∪B。
算法:
– ①取得Lb中的1个元素; – ②在La中查找这个元素; – ③若不存在:插入La中;若存在,取Lb中下一个
元素,重复 ①、②、③,直到取完Lb的每个元素 。
7
void unionList(SqList &la,SqList lb)
10
线性表的顺序存储结构示意图
存储地址
loc(a1) loc(a1)+ k
内存空间状态 逻辑地址
a1
1
a2
2
…
…
…
loc(a1)+ (i- 1)k
ai
i
…
…
…
loc(a1)+ (n- 1)k
an
n 空闲
顺序存储结构可以借助于高级程序设计语言中的一维数组来表示。
11
用C++语言描述的顺序表类型如下所示: sqlist.h
第三章 线性表习题
第三章 线性表填空题1.线性表的顺序存储结构通过 来直接反映数据元素之间的逻辑关系,而链式存储结构通过 间接反映数据元素之间的逻辑关系。
2.在线性表的顺序存储结构中,逻辑位置相邻的数据元素在 上也相邻,而链式存储结构中,逻辑位置相邻的数据元素在物理位置上 相邻。
3.线性表的链式存储结构主要包括 、 和 三种形式,其中最基本的形式是 。
4.从结构上来看,循环单链表与非循环单链表的不同在于 。
5.一元多项式f(x)=9x13-4x8+3x-5的线性链表表示是 。
6.栈和队列的逻辑结构都是 结构。
7.栈是一种特殊的线性表,其特殊性是 。
8.队列是一种特殊的线性表,其特殊性是 。
9.栈的插入与删除操作都是在 位置进行的;而队列的插入在 进行,删除操作在 进行。
选择题10.中缀形式的算术表达式A+(B-C/D)*E的后缀形式是 。
11.若线性表采用顺序存储结构,每个元素占用4个存储单元,第一个元素的存储地址为100,则第12个元素的存储地址是 。
A.112B.144C.148D.41212.若频繁地对线性表进行插入和删除操作,该线性表应该采用 存储结构。
A.散列B.顺序C.链式D.索引13.若长度为n的非空线性表采用顺序储存结构,删除表中第i个数据元素是,需要移动表中 个数据元素。
A.n+iB.n-iC.n-i+1D.n-i-114.若长度为n的线性表采用顺序储存结构,在表的第i个位置插入一个数据元素,需要移动表中 个数据元素。
A.n+iB.n-iC.n-i+1D.n-i-115.若长度为n的线性表采用顺序储存结构,在表的第i个位置插入一个数据元素的算法的使劲复杂性是 。
A.O(n)B. O(n2)C. O(nlog2n)D. O(log2n)16.线性链表中各结点的地址 。
A.必须连续B.一定不连续C.部分地址必须连续D.可能连续也可能不连续17.在一个具有n个结点的线性链表中查找一个结点,若查找成功,需要平均比较( )个结点。
线性表的逻辑结构及其基本操作.
1<=i<=n
a1 a2 … ai … an
3.Байду номын сангаас顺序表的类定义
template<class Type>class Array { private: Type *elements; //数组元素 int ArraySize; //数组元素的个数 int MaxSize; //数组元素的最大个数 BOOL GetArray(); BOOL GetArray(Type *pa); };
4. 线性表的运算
(1) 置空表:建立一个空表; (2) 存 (3) 插 (4) 删 (6) 查 (7) 合 取:访问线性表的某个元素,使用或改变其值; 入:在第i个位置插入一个同类型的结点; 除:删除第i个结点; 找:在线性表中查找满足某种条件的结点; 并:将两个线性表合并成一个线性表;
(5) 求表长:求出线性表中结点的个数;
顺序存储结构的特点为: 1)表中逻辑上相邻的结点,存储在相邻的物理
位置上;2)可以随机存取表中的元素;3)存储密度 大,存储空间利用率高。
2. 线性表的地址计算:
设线性表的基地址为LOC(a1), ai的存储地址为: LOC(ai) = LOC(a1)+(i-1)*k
1 2 i n a1 a2 … ai … an Loc(a1) Loc(a1)+k Loc(a1)+(i-1)*k
(8) 分
(9) 排
拆:将一个线性表分拆成多个线性表;
序:按某数据项的值递增或递减的顺序重新排列;
(10)显示,建立,读写盘等.
1
2 3 4
线性表的逻辑结构及其基本操作
线性表的顺序存储结构 线性表的链式存储结构 静态链表 应用实例
第三章 特殊线性表
(6)撤消动态申请空间Destroy(*head)
void Destroy(LSNode *head) { LSNode *p, *p1;
p = head;
while(p != NULL)
{ p1 = p;
p = p->next;
free(p1); }
}
3.2 堆栈应用
1、括号匹配问题
例:假设一个算术表达式中包含圆括号、方括号和花括号三种类型的括号, 编写一个判别表达式中括号是否正确配对的函数,并设计一个测试主函数。 算法思想: 算术表达式中右括号和左括号匹配的次序正好符合后到的括号要最先 被匹配的“后进先出”堆栈操作特点,因此可以借助一个堆栈来进行判断。 括号匹配共有四种情况: (1)左右括号配对次序不正确;(2)右括号多于左括号; (3)左括号多于右括号; (4)左右括号匹配正确。 具体方法:顺序扫描算术表达式(表现为一个字符串),当遇到三种类型 的左括号时让该括号进栈;当扫描到某一种类型的右括号时,比较当前栈 顶括号是否与之匹配,若匹配则退栈继续进行判断;若当前栈顶括号与当 前扫描的括号不相同,则左右括号配对次序不正确;若字符串当前为某种 类型左括号而堆栈已空,则右括号多于左括号;字符串循环扫描结束时, 若堆栈非空(即堆栈中尚有某种类型左括号),则说明左括号多于右括号; 否则,左右括号匹配正确。
中缀表达式变换为后缀表达式的算法步骤可以总结 为: (1)设置一个堆栈,初始时将栈顶元素置为“#”。 (2)顺序读入中缀表达式,当读到的单词为操作数时 就将其输出,并接着读下一个单词。 (3)令x1为当前栈顶运算符的变量,x2为当前扫描读 到运算符的变量,当顺序从中缀表达式中读入的单词为 运算符时就赋予x2,然后比较x1的优先级与x2的优先级, 若x1的优先级高于x2的优先级,将x1退栈并作为后缀表 达式的一个单词输出,然后接着比较新的栈顶运算符x1 的优先级与x2的优先级。
数据结构c 版第二版课后习题答案
数据结构c 版第二版课后习题答案数据结构是计算机科学中的重要概念,它研究如何组织和存储数据,以便能够高效地进行操作和检索。
C语言是一种广泛应用于软件开发的编程语言,而数据结构C版第二版是一本经典的教材,它介绍了C语言中常用的数据结构和算法。
在学习这本教材时,课后习题是检验自己理解和掌握程度的重要方式。
下面我将为大家提供一些课后习题的答案,希望对大家的学习有所帮助。
1. 第一章:引论习题1:数据结构是什么?它的作用是什么?答案:数据结构是一种组织和存储数据的方式,它可以帮助我们更高效地进行数据操作和检索。
它的作用是提供一种合理的数据组织方式,使得我们可以快速地找到和处理需要的数据。
习题2:请举例说明数据结构的应用场景。
答案:数据结构可以应用于各个领域,比如在图像处理中,我们可以使用二维数组来表示图像的像素点;在网络通信中,我们可以使用链表来存储和管理网络节点之间的连接关系;在数据库中,我们可以使用树结构来组织数据的层次关系等等。
2. 第二章:算法分析习题1:什么是时间复杂度和空间复杂度?它们分别表示什么?答案:时间复杂度是衡量算法执行时间的度量,它表示随着输入规模的增加,算法执行时间的增长趋势。
空间复杂度是衡量算法所需内存空间的度量,它表示随着输入规模的增加,算法所需内存空间的增长趋势。
习题2:请解释最坏情况时间复杂度和平均情况时间复杂度的区别。
答案:最坏情况时间复杂度是指在最不利的情况下,算法执行的时间复杂度。
平均情况时间复杂度是指在所有可能输入情况下,算法执行的平均时间复杂度。
最坏情况时间复杂度是对算法性能的保证,而平均情况时间复杂度更能反映算法的平均性能。
3. 第三章:线性表习题1:请实现一个线性表的顺序存储结构。
答案:可以使用数组来实现线性表的顺序存储结构。
定义一个固定大小的数组,然后使用一个变量来记录线性表中元素的个数,通过数组下标来访问和操作元素。
习题2:请实现一个线性表的链式存储结构。
线性表PPT课件
第21页/共40页
• 2.3.2 典型操作的算法实现 • (1)在链表的头部插入结点建立单链表
• LinkList Creat_LinkList1( )
• { LinkList L=NULL;/*空表L为表头*/
• Lnode *s;
• int x;
/*设数据元素的类型为int*/
• scanf("%d",&x);
•
/*在单链表L的第i个位置上插入值为x的元素*/
• { Lnode * p,*s;
• p=Get_LinkList(L,i-1); /*查找第i-1个结点*/
• if (p==NULL)
•
{ printf("参数i错");return 0; } /*第i-1个不存在不能插入*/
• else {
•
s=malloc(sizeof(LNode)); /*申请、填装结点*/
•
其中:L为线性表名称,习惯用大写书写;
•
ai为组成该线性表的数据元素,习惯用小写书写;
•
线性表中数据元素的个数被称为线性表的长度,当n=0时,线性
表为空,又称为空线性表。
第2页/共40页
•
举例
• int。
La=(34,89,765,12,90,-34,22) 数据元素类型为
•
Ls=(Hello,World, China, Welcome) 数据元素类型
2所示的形式存储:
第16页/共40页
存 储 地 址
100 ... 120 首 元 素 位 置 ... 144 ... 160 ...
内 容 直 接 后 继 存 储 地 址
b
120
...
...
数据结构(C++版)第3章 特殊线性表
特殊线性表——栈
3.1.3 栈的链接存储结构及实现
链栈:栈的链接存储结构 first
a1
a2
ai
an ∧
将哪一端作为栈顶? 将链头作为栈顶,方便操作。 链栈需要加头结点吗? 链栈不需要附设头结点。
特殊线性表——栈
栈的链接存储结构及实现
链栈:栈的链接存储结构 first top an
栈顶
a1
a2 a1 ∧
Pop( );
an
an-1
a1 ∧
特殊线性表——栈
顺序栈和链栈的比较
时间性能:相同,都是常数时间O(1)。
空间性能: 顺序栈:有元素个数的限制和空间浪费的问题。 链栈:没有栈满的问题,只有当内存没有可用空间时才会 出现栈满,但是每个元素都需要一个指针域,从而产生了 结构性开销。 结论:当栈的使用过程中元素个数变化较大时,用链栈是适 宜的,反之,应该采用顺序栈。
两栈共享空间
两栈共享空间
0 1 2 ……
S-1
a 1 a2 … ai
栈1底
bj … … b2 b 1
top2
栈2底
top1
栈1的底固定在下标为0的一端; 栈2的底固定在下标为StackSize-1的一端。 top1和top2分别为栈1和栈2的栈顶指针; Stack_Size为整个数组空间的大小(图中用S表示);
an
an-1
p
a1 ∧ top++可以吗?
特殊线性表——栈
链栈的实现——链栈的析构(链栈的销毁)
template <class T> LinkStack<T>::~LinkStack( ) {
Node<T> *p;
SJJG线性表
顺序表插入算法分析
• 上述算法for循环语句的执行次数为n-i+1 • 若i=1,需移动全部n个结点(最坏:O(n)) • 若i=n+1(在表尾插入),无需用移动结点,直 接插入即可(最好O(1)) • 移动结点的平均次数
14
顺序表插入算法分析
• 按等概率考虑:可能的插入位置为i=1, 2, ……, n, n+1共n+1个,则Pi=1/(n+1)。所以
8
顺序表的定义
• 用一组连续的存储单元(地址连续)依次存放线 性表各数据元素 A a1 a2 a3 a4 a5 a6 a7 • 结构定义 0 1 2 3 4 5 6
#define maxlen 100 Typedef struct seqlist { elementtype data[maxlen]; int last; }; – seqlist L, *L1; – st=-1; L1->last=-1; (* L1).last=-1;
23
示例
• 在已经递增有序的顺序表L中插入元素X • 问题思路
– 搜索插入位置 – 移动元素 – 插入元素
• 从前往后搜索 • 从后往前搜索
24
算法
//递增有序表元素插入算法描述-1 void insert(seqlist *L, elementtype x) { int i= L->last; if (i >= maxlen-1) then error(―overflow‖) else{ while ( i >= 0 && L->data[i] > x) L->data[i+1] = L->data[i--] ; L->data[i+1] = x; L->last ++; } }
线性表知识点总结
线性表知识点总结一、概述线性表是数据结构中的一种基本结构,它是一种线性的、有序的、可重复的数据结构。
线性表的存储结构有两种:顺序存储和链式存储。
二、顺序存储顺序存储的方式是把线性表的元素按照顺序存储在一个一维数组中,它的优点是随机访问时间复杂度为O(1),缺点是插入和删除操作时间复杂度为O(n)。
1. 初始化线性表的初始化需要先定义一个结构体,包含数据元素和线性表的长度两个成员。
```c#define MaxSize 100typedef struct{ElemType data[MaxSize];int length;}SqList;```2. 插入线性表的插入操作需要先判断是否有足够的空间进行插入操作,然后将插入位置后面的元素后移,最后将待插入的元素插入到插入位置。
```cStatus ListInsert(SqList &L, int i, ElemType e){int j;if(i<1 || i>L.length+1){return ERROR;}if(L.length>=MaxSize){return ERROR;}for(j=L.length;j>=i;j--){L.data[j]=L.data[j-1];}L.data[i-1]=e;L.length++;return OK;}```3. 删除线性表的删除操作需要先判断要删除的位置是否合法,然后将删除位置后面的元素前移,最后将最后一个元素赋值为空。
```cStatus ListDelete(SqList &L, int i, ElemType &e){int j;if(i<1 || i>L.length){return ERROR;}e=L.data[i-1];for(j=i;j<L.length;j++){L.data[j-1]=L.data[j];}L.length--;return OK;}```4. 查找线性表的按值查找操作需要遍历整个数组进行查找,时间复杂度为O(n),按位查找可以通过数组下标直接访问。
《数据结构》填空作业题(答案)
《数据结构》填空作业题答案第1章绪论(已校对无误)1.数据结构包括数据的逻辑结构、数据的存储结构和数据的运算三方面的内容。
2.程序包括两个内容:数据结构和算法。
3. 数据结构的形式定义为:数据结构是一个二元组:Data Structure =(D,S)。
4. 数据的逻辑结构在计算机存储器内的表示,称为数据的存储结构。
5. 数据的逻辑结构可以分类为线性结构和非线性结构两大类。
6. 在图状结构中,每个结点的前驱结点数和后继结点数可以有多个。
7. 在树形结构中,数据元素之间存在一对多的关系。
8. 数据的物理结构,指数据元素在计算机中的标识(映象),也即存储结构。
9. 数据的逻辑结构包括线性结构、树形结构和图形结构3种类型,树型结构和有向图结构合称为非线性结构。
10. 顺序存储结构是把逻辑上相邻的结点存储在物理上连续的存储单元里,结点之间的逻辑关系由存储单元位置的邻接关系来体现。
11. 链式存储结构是把逻辑上相邻的结点存储在物理上任意的存储单元里,节点之间的逻辑关系由附加的指针域来体现。
12. 数据的存储结构可用4种基本的存储方法表示,它们分别是顺序存储、链式存储、索引存储和散列存储。
13. 线性结构反映结点间的逻辑关系是一对一的,非线性结构反映结点间的逻辑关系是一对多或多对多。
14. 数据结构在物理上可分为顺序存储结构和链式存储结构。
15. 我们把每种数据结构均视为抽象类型,它不但定义了数据的表示方式,还给出了处理数据的实现方法。
16. 数据元素可由若干个数据项组成。
17. 算法分析的两个主要方面是时间复杂度和空间复杂度。
18. 一个算法的时间复杂度是用该算法所消耗的时间的多少来度量的,一个算法的空间复杂度是用该算法在运行过程中所占用的存储空间的大小来度量的。
19. 算法具有如下特点:有穷性、确定性、可行性、输入、输出。
20. 对于某一类特定的问题,算法给出了解决问题的一系列操作,每一操作都有它的确切的定义,并在有穷时间内计算出结果。
《数据结构》填空作业题(答案)
《数据结构》填空作业题答案第1章绪论(已校对无误)1.数据结构包括数据的逻辑结构、数据的存储结构和数据的运算三方面的内容。
2.程序包括两个内容:数据结构和算法。
3. 数据结构的形式定义为:数据结构是一个二元组: Data Structure =(D,S)。
4. 数据的逻辑结构在计算机存储器内的表示,称为数据的存储结构。
5. 数据的逻辑结构可以分类为线性结构和非线性结构两大类。
6. 在图状结构中,每个结点的前驱结点数和后继结点数可以有多个。
7. 在树形结构中,数据元素之间存在一对多的关系。
8. 数据的物理结构,指数据元素在计算机中的标识(映象),也即存储结构。
9. 数据的逻辑结构包括线性结构、树形结构和图形结构 3种类型,树型结构和有向图结构合称为非线性结构。
10. 顺序存储结构是把逻辑上相邻的结点存储在物理上连续的存储单元里,结点之间的逻辑关系由存储单元位置的邻接关系来体现。
11. 链式存储结构是把逻辑上相邻的结点存储在物理上任意的存储单元里,节点之间的逻辑关系由附加的指针域来体现。
12. 数据的存储结构可用4种基本的存储方法表示,它们分别是顺序存储、链式存储、索引存储和散列存储。
13. 线性结构反映结点间的逻辑关系是一对一的,非线性结构反映结点间的逻辑关系是一对多或多对多。
14. 数据结构在物理上可分为顺序存储结构和链式存储结构。
15. 我们把每种数据结构均视为抽象类型,它不但定义了数据的表示方式,还给出了处理数据的实现方法。
16. 数据元素可由若干个数据项组成。
17. 算法分析的两个主要方面是时间复杂度和空间复杂度。
18. 一个算法的时间复杂度是用该算法所消耗的时间的多少来度量的,一个算法的空间复杂度是用该算法在运行过程中所占用的存储空间的大小来度量的。
19. 算法具有如下特点:有穷性、确定性、可行性、输入、输出。
20. 对于某一类特定的问题,算法给出了解决问题的一系列操作,每一操作都有它的确切的定义,并在有穷时间内计算出结果。
线性代数 第三章
第三章 向量组与矩阵的秩§1 n 维向量在平面几何中,坐标平面上每个点的位置可以用它的坐标来描述,点的坐标是一个有序数对(,)x y .一个n 元方程1122n n a x a x a x b +++=可以用一个1n -元有序数组12(,,,,)n a a a b来表示.1n ⨯矩阵和1n ⨯矩阵也可以看作有序数组.一个企业一年中从1月到12月每月的产值也可用一个有序数组1212(,,,)a a a 来表示.有序数组的应用非常广泛,有必要对它们进行深入的讨论.定义 1 n 个数组成的有序数组12(,,,)n a a a (3.1)或12n a a a ⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦(3.2)称为一个n 维向量,简称向量.一般,我们用小写的粗黑体字母,如,α,β,γ等来表示向量,(3.1)式称为一个行向量,(3.2)式称为一个列向量.数12,,,n a a a 称为这个向量的分量.i a 称为这个向量的第i 个分量或坐标.分量都是实数的向量称为实向量;分量是复数的向量称为复向量.实际上,n 维行向量可以看成1n ⨯矩阵,n 维列向量也常看成1n ⨯矩阵.下面我们只讨论实向量.设k 和l 为两个任意的常数.α,β和γ为三个任意的n 维向量,其中12(,,,)n a a a =α, 12(,,,)n b b b =β.定义 2 如果α和β对应的分量都相等,即,1,2,,i i a b i n ==就称这两个向量相等,记为α=β.定义 3 向量(a 1+b 1,a 2+b 2,…,a n +b n )称为α与β的和,记为α+β.称向量(ka 1,ka 2,…,ka n )为α与k 的数量乘积,简称数乘,记为k α.定义 4 分量全为零的向量(0, 0, …, 0)称为零向量,记为0.α与-1的数乘(-1)α=(-a 1,-a 2,…,-a n )称为α的负向量,记为-α.向量的减法定义为α-β=α+(-β).向量的加法与数乘具有下列性质: (1) α+β=β+α;(交换律) (2) (α+β)+γ=α+(β+γ);(结合律) (3) α+0=α;(4) α+(-α)=0; (5) k (α+β)=k α+k β; (6) (k +l )α=k α+l α; (7) k (l α)=(kl )α; (8) 1α=α; (9) 0α=0; (10) k 0=0.在数学中,满足(1)-(8)的运算称为线性运算.我们还可以证明:(11) 如果k ≠0且α≠0, 那么k α≠0.显然n 维行向量的相等和加法、减法及数乘运算的定义,与把它们看作1×n 矩阵时的相等和加法、减法及数乘运算的定义是一致的.对应地,我们也可以定义列向量的加法、减法和数乘运算,这些运算与把它们看成矩阵时的加法、减法和数乘运算也是一致的,并且同样具有性质(1)-(11).§2线性相关与线性无关通常把维数相同的一组向量简称为一个向量组,n 维行量组α1,α2,…,αs 可以排列 成一个s ×n 分块矩阵12s ⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎣⎦a a A a ,其中αi 为由A 的第i 行形成的子块,α1,α2,…,αs 称为A的行向量组.n 维列向量组β1,β2,…,βs 可以排成一个n ×s 矩阵B=(β1,β2,…,βs ),其中βj 为B的第j 列形成的子块,β1,β2,…,βs 称为B 的列向量组.很多情况下,对矩阵的讨论都归结于对它们的行向量组或列向量组的讨论.定义 5 向量组α1,α2,…,αs 称为线性相关的,如果有不全为零的数k 1,k 2,…,k s , 使1si ii k =∑a=k 1α1+k 2α2+…+k s αs =0. (3.3)反之,如果只有在k 1= k 2 = … =k s =0时(3.3)才成立,就称α1,α2,…,αs 线性无关. 换言之,当α1,α2,…,αs 是行向量组时,它们线性相关就是指有非零的1×s 矩阵 (k 1,k 2,…,k s )使1212(,,,)s s k k k ⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎣⎦0a a a .当α1,α2,…,αs 为列向量组时,它们线性相关就是指有非零的s ×1矩阵(k 1,k 2,…,k s )′使1212(,,,)s s k k k ⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎣⎦0a a a .显然单个零向量构成的向量组是成性的相关的. 例1 判断向量组12(1,0,,0),(0,1,,0),(0,0,,1)n =⎧⎪=⎪⎨⎪⎪=⎩εεε 的线性相关性.解 对任意的常数k 1,k 2,…,k n 都有k 1ε1+k 2ε2+…+k n εn =(k 1,k 2,…,k n ).所以k 1ε1+k 2ε2+…+k n εn =0当且仅当k 1=k 2=…=k n =0.因此ε1,ε2,…,εn 线性无关.ε1,ε2,…,εn 称为基本单位向量. 例2 判断向量组α1=(1,1,1), α2=(0,2,5), α3=(1,3,6)的线性相关性.解 对任意的常数k 1,k 2, k 3都有k 1α1+k 2α2+ k 3α3=(k 1+k 3,k 1+2k 2+3k 3,k 1+5k 2+6k 3).所以k 1α1+k 2α2+ k 3α3=0当且仅当131231230,230,560.k k k k k k k k +=⎧⎪++=⎨⎪++=⎩ 由于k 1=1,k 2=1,k 3=-1满足上述的方程组,因此1α1+1α2+(-1)α3=α1+α2-α3=0.所以α1,α2,α3线性相关.例3 设向量组α1,α2,α3线性无关,β1=α1+α2,β2=α2+α3,β3=α3+α1, 试证向量组β1,β2,β3也线性无关.证 对任意的常数都有k 1β1+k 2β2+k 3β3=(k 1+k 3)α1+(k 1+k 2)α2+(k 2+k 3)α3 .设有k 1,k 2,k 3使k 1β1+k 2β2+k 3β3=0.由α1,α2,α3线性无关, 故有1312230,0,0.k k k k k k +=⎧⎪+=⎨⎪+=⎩ 由于满足此方程组的k 1,k 2,k 3的取值只有k 1=k 2=k 3=0,所以β1,β2,β3线性无关.定义 6 向量α称为向量组β1,β2,…,βt 的一个线性组合,或者说α可由向量组β1,β2,…,βt 线性表出(示),如果有常数k 1,k 2,…,k t 使α=k 1β1+k 2β2+…+k t βt . 此时,也记1ti ii k ==∑a β.例4 设α1=(1,1,1,1),α2=(1,1,-1,-1),α3=(1,-1,1,-1),α4=(1,-1,-1,1), β=(1,2,1,1).试问β能否由α1,α2,α3,α4线性表出?若能,写出具体表达式.解 令β=k 1α1+k 2α2+k 3α3+k 4α4于是得线性方程组12341234123412341211k k k k k k k k k k k k k k k k +++=⎧⎪+--=⎪⎨-+-=⎪⎪--+=⎩ 因为1111111116011111111D ⎡⎤⎢⎥--⎢⎥==-≠⎢⎥--⎢⎥--⎣⎦, 由克莱姆法则求出1234511,,444k k k k ====-所以12345111,4444=+--βαααα即β能由α1,α2,α3,α4线性表出.例5 设α=(2,-3,0),β=(0,-1,2),γ=(0,-7,-4),试问γ能否由α,β线性表出? 解 设 γ=k 1α+k 2β 于是得方程组1122203724k k k k =⎧⎪--=-⎨⎪=-⎩由第一个方程得k 1=0,代入第二个方程得k 2=7,但k 2不满足第三个方程,故方程组无解.所以γ不能由α,β线性表出.定理 1 向量组α1,α2,…,αs (s ≥2) 线性相关的充要条件是其中至少有一个向量能由其他向量线性表出.证 设α1,α2,…,αs 中有一个向量能由其他向量线性表出,不妨设α1=k 2α2+k 3α3+…+k s αs ,那么-α1+k 2α2+…+k s αs =0,所以α1,α2,…,αs 线性相关.反过来,如果α1,α2,…,αs 线性相关,就有不全为零的数k 1,k 2,…,k s , 使k 1α1+k 2α2+…+k s αs =0.不妨设k 1≠0, 那么32123111.ss k k k k k k =----αααα 即α1能由α2,α3,…,αs 线性表出.例如,向量组α1=(2,-1,3,1),α2=(4,-2,5,4),α3=(2,-1,4,-1) 是线性相关的,因为α3=3α1-α2.显然,向量组α1,α2线性相关就表示α1=k α2或者α2=k α1(这两个式子不一定能同时成立).此时,两向量的分量成正比例.在三维的情形,这就表示向量α1与α2共线.三个向量α1,α2,α3线性相关的几何意义就是它们共面.定理 2 设向量组β1,β2,…,βt 线性无关,而向量组β1,β2,…,βt ,α线性相关,则α能由向量组β1,β2,…,βt 线性表出,且表示式是惟一的.证 由于β1,β2,…,βt ,α线性相关,就有不全为零的数k 1,k 2,…,k t ,k 使k 1β1+k 2β2+…+k t βt +k α=0.由β1,β2,…,βt 线性无关可以知道k ≠0. 因此1212tt k k kk kk=----αβββ, 即α可由β1,β2,…,βt 线性表出.设α=l 1β1+l 2β2+…+l t βt =h 1β1+h 2β2+…+h t βt为两个表示式.由α-α=(l 1β1+β2+…+l t βt )-(h 1β1+h 2β2+…+h t βt )=(l 1-h 1)β1+(l 2-h 2)β2+…+(l t -h t )βt =0和β1,β2,…,βt 线性无关可以得到l 1=h 1, l 2=h 2, …, l t =h t .因此表示式是惟一的.定义 7 如果向量组α1,α2,…,αs 中每个向量都可由β1,β2,…,βt 线性表出,就称向量组α1,α2,…,αs 可由β1,β2,…,βt 线性表出,如果两个向量组互相可以线性表出,就称它们等价.显然,每一个向量组都可以经它自身线性表出.同时,如果向量组α1,α2,…,αt 可以经向量组β1,β2,…,βs 线性表出,向量组β1,β2,…,βs 可以经向量组12,,,p γγγ线性表出,那么向量组α1,α2,…,αt 可以经向量组12,,,p γγγ线性表出.事实上,如果1,1,2,,,si ij j j k i t ===∑αβ1,1,2,,,pj jmm m lj s ===∑βγ那么111111pppsss i ij jm m ij jm m ij jm m j m j m m j k l k l k l ======⎡⎤===⎢⎥⎣⎦∑∑∑∑∑∑αγγγ.这就是说,向量组α1,α2,…,αt 中每一个向量都可以经向量组12,,,p γγγ线性表出.因而,向量组α1,α2,…,αs 可以经向量组12,,,p γγγ线性表出.由上述结论,得到向量组的等价具有下述性质:(1) 反身性:向量组α1,α2,…,αs 与它自己等价.(2) 对称性:如果向量组α1,α2,…,αs 与β1,β2,…,βt 等价,那么β1,β2,…,βt 也与α1,α2,…,αs 等价.(3) 传递性:如果向量组α1,α2,…,αs 与β1,β2,…,βt 等价,而向量组β1,β2,…,βt 又与12,,,p γγγ等价,那么α1,α2,…,αs 与12,,,p γγγ等价.§ 3线性相关性的判别定理利用定义判断向量组的线性相关性往往比较复杂,我们有时可以直接利用向量组的特点来判断它的线性相关性,通常称一个向量组中的一部分向量组为原向量组的部分组.定理 3 有一个部分组线性相关的向量组线性相关. 证 设向量组α1,α2,…,αs 有一个部分组线性相关.不妨设这个部分组为α1,α2,…,αr .则有不全为零的数k 1,k 2,…,k r 使1110,s r si ii iji i j r k k ===+=+=∑∑∑0ααα因此α1,α2,…,αs 也线性相关.推论 含有零向量的向量组必线性相关. 定理 4 设p 1,p 2,…,p n 为1, 2, …,n 的一个排列,α1,α2,…,αs 和β1,β2,…,βs 为两向量组,其中1212n ip i ip i i i in ip ⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦ααααα=,βαα, 即β1,β2,…,βs 是对α1,α2,…,αs 各分量的顺序进行重排后得到的向量组,则这两个向量组有相同的线性相关性.证 对任意的常数k 1,k 2,…,k s 注意到列向量111221*********1122s s ss s i i i n n s sn k k k k k k k k k k =+++⎡⎤⎢⎥+++⎢⎥=⎢⎥⎢⎥+++⎣⎦∑αααααααααα和1112221122112211122n n n p p s sp sp p s sp i i i p p s sp k k k k k k k k k k =+++⎡⎤⎢⎥+++⎢⎥=⎢⎥⎢⎥+++⎢⎥⎣⎦∑ααααααβααα 只是各分量的排列顺序不同,因此k 1β1+k 2β2+…+k s βs =0当且仅当k 1α1+k 2α2+…+k s αs =0.所以α1,α2,…,αs 和β1,β2,…,βs 有相同的线性相关性.定理4 是对列向量叙述的.对行向量也有相同的结论.类似这样的情形,今后不再说明.定理 5 在r 维向量组α1,α2,…,αs 的各向量添上n -r 个分量变成n 维向量组β1,β2,…,βt .(1)如果β1,β2,…,βs t 线性相关,那么α1,α2,…,αs 也线性相关. (2) 如果α1,α2,…,αs 线性无关,那么β1,β2,…,βs 也线性无关. 证 我们对列向量来证明定理,设(α1,α2,…,αs )=A1,(β1,β2,…,βs )=12⎡⎤⎢⎥⎣⎦A A ,如果β1,β2,…,βs 线性相关,就有一个非零的s ×1矩阵X使(β1,β2,…,βs )X=12⎡⎤⎢⎥⎣⎦A A X=12⎡⎤⎢⎥⎣⎦X X A A =0. 从而(α1,α2,…,αs )X =A1X=0.因此α1,α2,…,αs 也线性相关,即(1)成立.利用(1),用反证法容易证明(2)也成立.引理 1 如果n 阶方阵A 的行列式等于零,那么A 的行(列)向量组线性相关.证 因|A |=0,由上章内容,用初等行变换把A 化成上三角矩阵D ,主对角线上至少有一个元素为零,即11121222000n n nn d d d dd d ⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎣⎦D中至少有一个d ij =0.如果d nn =0,那么D 最后一行元素全为零,可见A 中有一行可由其余行线性表出,因此,A 的行向量组线性相关.如果d nn ≠0,设D 的主对角线上元素d 11,d 22,…,d nn 中从后起第一个等于零的数为d jj .易见,对D 再施行几次初等行变换后,可得到第j 行全为零的矩阵.同样得出A 中有一行可由其余行线性表出.因此,A 的行向量组线性相关.当|A|=0时,|A′|=0,A 的列向量组可看成A ′的行向量组,得A 的列向量组也线性相关.定理 6 n 维向量组α1,α2,…,αn 线性无关的充要条件是矩阵11112122122212n n n n n nn a a a a a a a a a ⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥==⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦A ααα 的行列式不为零(A 可逆).此时,矩阵A 的n 个列向量也线性无关.证 如果|A|≠0,(k 1,k 2,…,k n )A =0,两边同时右乘A-1得(k 1,k 2,…,k n )=0,所以α1,α2,…,αn 线性无关.反过来,如果α1,α2,…,αn 线性无关.反设|A|=0,由引理1,A 的行向量组α1,α2,…,αn 线性相关,矛盾.由上面证明可以看出,当|A|≠0时,|A′|≠0,可见A 的n 个列向量也线性无关.例6 试证明n 维列向量组α1,α2,…,αn 线性无关的充分必要条件是行列式1112121222120n n nn nn '''⎡⎤⎢⎥'''⎢⎥=≠⎢⎥⎢⎥'''⎣⎦D αααααααααααααααααα证 令矩阵A ={α1,α2,…,αn }则向量组α1,α2,…,αn 线性无关⇔行列式|A |≠0.由于[]1111212212221212n n n nnn nn ''''⎡⎤⎡⎤⎢⎥⎢⎥''''⎢⎥⎢⎥'==⎢⎥⎢⎥⎢⎥⎢⎥''''⎣⎦⎣⎦A ααααααααααααααA αααααααααα在上式两端取行列式,得|A |2=|A ′||A |=D故|A |≠0⇔D ≠0,所以α1,α2,…,αn 线性无关⇔D ≠0.定理 7 n +1个n 维向量α1,α2,…,αn +1必线性相关.证 对每个αs 添加等于零的第n +1个分量,得到n +1维向量β1,β2,…,βn +1.易见,由β1,β2,…,βn +1构成的方阵的行列式等于零,因而β1,β2,…,βn +1线性相关,由αi 与βi 的关系,易知α1,α2,…,αn +1也线性相关.推论 当m >n 时,m 个n 维向量线性相关. 讨论下列矩阵的行向量组的线性相关性:123132221;021.343201-⎡⎤⎡⎤⎢⎥⎢⎥==-⎢⎥⎢⎥⎢⎥⎢⎥-⎣⎦⎣⎦B C由于|B|=2≠0,因此B的行(列)向量组线性无关; 由于|C|=0,所以C 的行(列)向量组线性相关.定理 8 如果向量组α1,α2,…,αs 可由β1,β2,…,βt 线性表出且s >t ,那么α1,α2,…,αs 线性相关.证 我们不妨假定讨论的是列向量,如果α1,α2,…,αs 可由β1,β2,…,βt 线 性表出,那么()()121212i i i n n i it p p p ⎡⎤⎢⎥⎢⎥==⎢⎥⎢⎥⎣⎦αββββββγ.令A=(γ1,γ2,…,γs ),有(α1,α2,…,αs )=(β1,β2,…,βt )A,这里γ1,γ2,…,γs 为由s 个向量组成的t 维向量组.注意到s >t ,根据推论,它们必线性相关.因此有非零s ×1矩阵(k 1,k 2,…,k s )′使112212(,,,)s s s k k k k k k ⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥==⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦0A γγγ.从而()11221212(,,,)s s s s k k k k k k ⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥==⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦0αααβββA .即有α1,α2,…,αs 线性相关.推论 1 如果向量组α1,α2,…,αs ,可由向量组β1,β2,…,βt 线性表出,且α1,α2,…,αs 线性无关,那么s ≤t .推论 2 两个线性无关的等价的向量组必含有相同个数的向量.§ 4向量组的秩与矩阵的秩定义 8 一向量组的一个部分组称为一个极大线性无关组,如果这个部分组本身是线性无关的,并且从这向量组中向这部分组任意添一个向量(如果还有的话),所得的部分组都线性相关.例7 在向量组α1=(2,-1,3,1),α2=(4,-2,5,4),α3=(2,-1,4,-1)中,α1,α2为它的一个极大线性无关组.首先,由α1与α2的分量不成比例,所以α1,α2线性无关,再添入α3以后,由α3=3α1-α2可知所得部分组线性相关,不难验证α2,α3也为一个极大线性无关组.我们容易证明定义8与下列定义8′等价.定义 8′ 一向量组的一个部分组称为一个极大线性无关组,如果这个部分组本身是线性无关的,并且这向量组中任意向量都可由这部分组线性表出.向量组的极大线性无关组具有以下性质:性质 1 一向量组的极大线性无关组与向量组本身等价. 性质 2 一向量组的任意两个极大线性无关组都等价.性质 3 一向量组的极大线性无关组都含有相同个数的向量.性质3表明向量组的极大线性无关组所含向量的个数与极大线性无关组的选择无关,它反映了向量组本身的特征.定义 9 向量组的极大线性无关组所含向量的个数称为这个向量组的秩. 例如,例7中向量组α1,α2,α3的秩为2. 线性无关向量组本身就是它的极大线性无关组,所以我们有:一向量组线性无关的充要条件为它的秩与它所含向量的个数相同.我们知道每个向量组都与它的极大线性无关组等价,由等价的传递性可知任意两个等价的向量组的极大线性无关组也等价,根据定理8的推论1就有等价的向量组必有相同的秩.如果向量组α1,α2,…,αs 能由向量组β1,β2,…,βt 线性表出,那么α1,α2,…,αs的极大线性无关组可由β1,β2,…,βt 的极大线性无关组线性表出.因此α1,α2,…,αs 的秩不超过β1,β2,…,βt 的秩.定理 9 向量组的任意线性无关的部分组都可扩充为一个极大线性无关组.证 设,i i i 12καα,,α是向量组α1,α2,…,αs 中的一个线性无关的部分组,如果α1,α2,…,αs 中每个向量都可由这个部分组线性表出,那么这个部分组就是一个极大线性无关组,如果还有某向量αik +1不能被这个部分组线性表出,那么由121121i i k i l l l κ+++++ααα=0就有l k +1=0.再由原部分组线性无关就可得l 1=l 2=…=l k =l k +1=0.这样,我们就得到了一个含k +1个向量的线性无关的部分组121,i i i κ+αα,,α.重复这个过程,最后必可得到α1,α2,…,αs 的一个线性无关的部分组使向量组中每个向量都可由这个部分组线性表出,这个部分组就是一个极大线性无关组.推论 秩为r 的向量组中任意含r 个向量的线性无关的部分组都是极大线性无关组. 例8 求向量组α1=(1,-1,0,3),α2=(0,1,-1,2),α3=(1,0,-1,5),α4=(0,0,0,2)的一个极大线性无关组及秩.解 α1是α1,α2,α3,α4的一个线性无关的部分组,显然α2不能由α1线性表示,所以α1可以扩充为一个线性无关的部分组α1,α2,容易证明α3=α1+α2,但α4不能由α1,α2线性表出,所以α1,α2又可扩充为一个线性无关的部分组α1,α2,α4,从而α1,α2,α3,α4的秩为3,α1,α2,α4是它的一个极大线性无关组. 定义 10 矩阵的行秩是指它的行向量组的秩,矩阵的列秩是指它的列向量组的秩.为了证明一个矩阵的行秩等于列秩,我们引入矩阵的子式的概念.定义 11 在一个s ×n 矩阵A 中任意选定k 行和k 列,位于这些选定的行和列的交点上的k 2个元素按原来的次序所组成的k ×k 级矩阵的行列式,称为A 的一个k 级子式.在定义中,当然有k ≤m in (s ,n )(s ,n 中较小的一个). 例9 在矩阵11361012400005301102⎡⎤⎢⎥-⎢⎥=⎢⎥⎢⎥⎣⎦A 中,选第1,第3行和第3,第4列,它们交点上的元素所组成的二级行列式361505⎡⎤=⎢⎥⎣⎦就是一个2级子式,易见,A 共有2级子式的个数为2245C C 60=.引理 2 设r ≤n .n 维向量组α1,α2,…,αr 线性无关的充要条件是:矩阵111212122212n n r r rn r a a a a a a a a a 12⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥==⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦ααA α 中存在一个不为零的r 级子式.证 充分性 当A 中存在一个不为零的r 级子式时,由定理6,定理5易知,A 的r 个行向量α1,α2,…,αr 线性无关.必要性 对向量的个数r 用数学归纳法证明.当r =1时,因α1线性无关,故α1≠0,A 中有一个不为零的1级子式. 假设当r =k 时,结论成立.当r =k +1≤n 时,因α1,α2,…,αk +1线性无关,其部分组也线性无关.由归纳假设,矩阵111212122212n n k k k kn a a a a a a a a a 12⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥==⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦ααB α 中存在不为零的k 级子式,不妨设1112121222120k k k k kk a a a aa a a a a ⎡⎤⎢⎥⎢⎥≠⎢⎥⎢⎥⎣⎦, 令γi =(a i 1,a i 2,…,a ik ),k 12⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎣⎦γγγC 是一个k 阶可逆矩阵,i =1,2,…,k+1.显然,γi 是由αi 的前k 个分量构成,设()11,,,k κc c c -2+1=γC ,易见()1,,,k c c c 2是一组确定的数,且()()111,,,,,,κk k k c c c c c c 2+122⎡⎤⎢⎥⎢⎥==⎢⎥⎢⎥⎣⎦γγγγC ,即()11,,,κk k c c c +122-=0γγγγ.(3.4) 令()()111,,,κk k n c c c b b b +1222=-+++=βαααα,即有b j =a k +1,j -(c 1a 1j +c 2a 2j +…+c k a kj ), j =1,2,…,n .由于γ1,γ2,…,γk ,γk +1分别由α1,α2,…,αk ,αk +1的前k 个分量构成,根据(3.4)式,β的前k 个分量应为零,即b 1=b 2=…=b k =0.又因为α1,α2,…,αk ,αk +1线性无关,所以β≠0. 因此,必有某b j ≠0(k <j ≤n ).于是有k +1级子式11121111121121222221222212121,11,21,1,0000k j kj k j k j j k k kk kj k k kk kj k k k kk j j a a a a a a a a a a a a a a a a b a a a a a a a a a a a a b ++++⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥==≠⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦C . 由定理6及引理2,可以看出,如果A 有一个k 级子式不为零,那么这个k 级子式所在的行向量组线性无关,所在的列向量组也线性无关.定理 10 矩阵的行秩等于列秩.证 设矩阵A 的行秩为r 1,A 的列秩为r 2,那么,A 中有r 1个行向量线性无关,由引理2,A 中有一个r 1级子式D 不为零,那么A 中子式D 所在的r 1个列向量也线性无关;因而,r 1≤r 2.这说明,任意矩阵的列秩大于或等于行秩,由此,A ′的列秩(A 的行秩r 1)≥A ′的行秩(A 的列秩r 2),即有r 1≥r 2.因此r 1=r 2.下面统称矩阵的行秩和列秩为矩阵的秩.矩阵A 的秩一般记为R (A).规定零矩阵的秩为0,由引理2,可得定理 11 矩阵A 的秩为r 的充要条件是它有一个不为零的r 阶子式,而所有r +1阶子式全为零,这时,这个非零的r 级子式所在的行和列就分别为A 的行向量组和列向量组的极大线性无关组.例10 已知矩阵111111111111αa a a ⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎣⎦A 的秩为3,求a 的值. 解 R (A )=3,即A 中非零子式的最高阶数为3,故有1111111111111(3)111111111111αa a a a a a a ⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥==+⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦A 11110100(3)00100001a a a a ⎡⎤⎢⎥-⎢⎥=+⎢⎥-⎢⎥-⎣⎦=(a +3)(a -1)2=0 由此得a =-3或a =1.当a =1时,显然有R (A )=1;而当a =-3时,A 的左上角的3阶子式为311131160113-⎡⎤⎢⎥-=-≠⎢⎥⎢⎥-⎣⎦即A 中存在非零的3阶子式,且不存在更高阶的非零子式,故当且仅当a =-3时,R (A )=3.§5 矩阵的初等变换由上节介绍的方法求阶数较高的矩阵的秩的计算量很大,本节来介绍一种简单有效的求矩阵的秩的方法,即利用矩阵的初等变换求出矩阵的等价标准型,矩阵的秩就等于它的等价标准型的秩.下面我们回顾一下矩阵的初等行变换.定义 12 下面的三种变换称为矩阵的初等行变换:(1) 对换矩阵两行的位置(对换第i 行和第j 行的位置记为r (i ,j )).(2)矩阵的某行所有元素同乘以一个非零常数(第i 行乘以k 记为r (i (k ))).(3) 把矩阵一行所有元素的k 倍加到另一行对应的元素上去[第i 行的k 倍加到第j 行上去记为r (j +i (k ))].显然,矩阵的初等行变换都是可逆的,且其逆变换也是同类的初等行变换.r (i ,j )的逆变换仍为r (i ,j );r (i (k ))的逆变换为r (i (1/k ));r (j +i (k ))的逆变换为r (j +i (-k )).定理 12 如果矩阵A经过有限次初等行变换变为B ,则A 的行向量组与B 的行向量组等价,而A 的任意k 个列向量与B中对应的k 个列向量有相同的线性关系.证 当A 经过一次初等行变换变为B 时,B 的行向量组显然可由A 的行向量组线性表出,对A 的任意k 个列向量α1,α2,…,αk ,设它们所对应的B 的列向量依次为12k'''a ,a ,,a ,如果α1,α2,…,αk 线性相关,就有不全为零的常数12,,,k l l l 使1122k k l l l +++a a a =0.由12k'''a ,a ,,a 各分量与α1,α2,…,αk 各分量的关系容易得出 1122k kl l l '''+++a a a =0, 因此12k'''a ,a ,,a 也线性相关.由初等行变换的逆变换也是初等行变换可以知道A的行向量组也可由B的行向量组线性表出,并且由12k'''a ,a ,,a 线性相关也可以导出α1,α2,…,αk 线性相关,此时命题成立.当A要经若干个初等变换变为B时,用数学归纳法容易证明命题也成立.例11 求下列向量组α1=(1,-2,2,3), α2=(-2,4,-1,3), α3=(-1,2,0,3), α4=(0,6,2,3),α5=(2,-6,3,4) 的一个极大线性无关组与秩.解 作12102242662102333334--⎡⎤⎢⎥--⎢⎥=⎢⎥-⎢⎥⎣⎦A , 对A作初等行变换得(21(2))(31(2))(2,3)(41(3))(3,4)121212102000620322103021096320933200062r r r r r ++-+-----⎡⎤⎡⎤⎢⎥⎢⎥--⎢⎥⎢⎥−−−−→−−−→⎢⎥⎢⎥--⎢⎥⎢⎥--⎣⎦⎣⎦A (32(3))12102032210003100062r +---⎡⎤⎢⎥-⎢⎥−−−−→⎢⎥-⎢⎥-⎣⎦(43(2))12102032210003100000r +--⎡⎤⎢⎥-⎢⎥−−−−→⎢⎥-⎢⎥⎣⎦. (3.5) 上面最后一个矩阵(3.5)满足:从每一行的第一个元素到第一个非零元素下面全为零,这些零的排列像一个阶梯,每个阶梯都只有一行,它称为一个行阶梯矩阵.易见,行阶梯矩阵(3.5)中有一个3级子式不为零,而所有4级子式全为零,故矩阵(3.5)的秩为3,它的第1、2、4列线性无关,所以R (A)=3,且R (α1,α2,α3,α4,α5)=3,α1,α2,α4为该向量组的一个极大线性无关组.对(3.5)继续进行初等行变换还可化为更简单的形式:1(2())31(3())312102221013331000130000r r ---⎡⎤⎢⎥⎢⎥-⎢⎥−−−−→⎢⎥-⎢⎥⎢⎥⎢⎥⎣⎦矩阵(3.5) (12(2))2(23())311610039210103910001300000r r ++-⎡⎤⎢⎥⎢⎥⎢⎥-⎢⎥−−−−→⎢⎥⎢⎥-⎢⎥⎢⎥⎣⎦.(3.6) (3.6)仍是一个行阶梯形矩阵,但它的每一非零行的第一个非零元素为1,且这些元素所在的列的其他元素都为0,这个矩阵称为矩阵A的行最简形.例12 求向量组α1=(1,4,1,0,2),α2=(2,5,-1,-3,2),α3=(0,2,2,-1,0), α4=(-1,2,5,6,2)的一个极大无关组,并把不属于极大无关组的向量用该极大无关组线性表出.解 把向量组按列排成矩阵A ,利用初等行变换把A 化为行最简形矩阵B .1201120145220326112503260316031622020204⎡⎤⎡⎤⎢⎥⎢⎥-⎢⎥⎢⎥⎢⎥⎢⎥=→→-⎢⎥⎢⎥--⎢⎥⎢⎥⎢⎥⎢⎥-⎣⎦⎣⎦A1201100301020102001000100000000000000000-⎡⎤⎡⎤⎢⎥⎢⎥--⎢⎥⎢⎥⎢⎥⎢⎥→=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦B 易见B 的第1,2,3列线性无关,由于A 的列向量组与B 的对应的列向量组有相同的线性组合关系,故与其对应的矩阵A 的第1,2,3列线性无关,即α1,α2,α3是该向量组成的一个极大无关组.由矩阵B 易得α4=3α1-2α2.求向量组的极大无关组时,不管所给的是行向量组还是列向量组,都要按列排成矩阵再进行初等行变换.对应于矩阵的初等行变换,我们还可以定义矩阵的初等列变换.对矩阵的初等列变换c (i ,j ),c (i (k ))和c (j +i (k ))也有类似于矩阵的初等行变换的结论.所以,我们同样可以通过求矩阵的列阶梯形矩阵和列最简形来求矩阵的秩以及行向量组的极大线性无关组.矩阵的初等行变换和初等列变换统称为初等变换.事实上,我们在求矩阵的秩时,经常对矩阵既进行初等行变换也进行初等列变换,使计算过程得到简化.定义 13 如果矩阵A 经有限次初等变换化成B ,就称矩阵A 与B 等价. 我们容易证明,矩阵的等价关系具有下列性质: (1) 反身性: A 与A 等价.(2) 对称性: 如果A 与B 等价,那么B 与A 等价.(3) 传递性: 如果A 与B 等价,B 与C 等价,那么A 与C 等价. 定理 13 如果矩阵A 与B 等价,那么R (A )=R (B). 对矩阵(3.6)再进行初等列变换可得1(31())316(51())92(32())31(52())(3,4)91(54())31000010000010000100000010001000000000000r r r r c r +-+-+-++⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥−−−−→−−−→⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦矩阵(3.6). (3.7)矩阵(3.7)的左上角为一个单位矩阵E 3,它的阶数就是A 的秩,其他各分块矩阵都是零矩阵, 矩阵(3.7)就称为A 的等价标准型.事实上,我们有如下定理定理 14 每个矩阵都有等价标准型,矩阵A 与B 等价,当且仅当它们有相同的等价标准型.推论 两个同型矩阵等价的充分必要条件是它们的秩相等.当A 为n 阶可逆方阵时,R (A)=n ,所以A 的等价标准型为n 阶单位矩阵.由于可逆方阵的秩等于阶数,所以可逆方阵又称为满秩方阵,而奇异方阵就称为降秩方阵.§ 6初等矩阵与求矩阵的逆这一节我们来建立矩阵的初等变换与矩阵乘法的联系,并在此基础上给出用初等变换求逆矩阵的方法.定义 14由单位矩阵E经过一次初等变换得到的矩阵称为初等矩阵.显然,初等矩阵都是方阵.互换E 的第i 行与第j 行(或者互换E的第i 列和第j 列)的位置,得11011(,)11011i i j j ⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦第行第行E ; 用常数k 乘E 的第i 行(或第i 列)得11(())11i k i k ⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦第行E ; 把E的第j 行的k 倍加到第i 行(或把第i 列的k 倍加到第j 列)得11(())11i k i j k j ⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥+=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦第行第行E . 这三类矩阵就是全部的初等矩阵,显然111()(),(())(())i j i j i k i k--==,,E E E E ,1(())(())i j k i j k -+=+-E E .定理15 对一个s ×n 矩阵A 作一初等行变换就相当于在A 的左边乘上相应的s ×s 初等矩阵;对A 作一初等列变换就相当于在A 的右边乘上相应的n ×n 初等矩阵.证 我们只看行变换的情形,列变换的情形可同样证明.令B=(b ij )s ×s 为任意一个s ×s 矩阵,A1,A2,…,As 为A 的行向量组,由矩阵的分块乘法,得111122121122221122s s s s s s ss s b b b b b b b b b ⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎣⎦A +A ++A A +A ++A BA A +A ++A ,令B=E (i ,j ),得1()j i s i j ⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦,A A E A A A ,这相当于把A 的i 行与j 行互换;令B=E (i (k )),得1(())i s i k k ⎡⎤⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎣⎦A E A A A ,这相当于用k 乘A 的第i 行;令B=E (i +j (k )),得1(())i j j s k i j k ⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥+=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦A A +A E A A A ,这相当于把A 的第j 行的k 倍加到第i 行.推论1 矩阵A 与B 等价的充分必要条件是:有初等方阵P1,P2,…,Ps ,Q1,…,Qt使A=P1P2…Ps BQ1Q2…Qt.推论2 n×n矩阵A 可逆的充分必要条件是:它能表成一些初等矩阵的乘积. 推论3 两个s×n矩阵A 、B 等价的充分必要条件是:存在可逆的s×s矩阵P 与可逆的n ×n 矩阵Q 使A=PBQ.推论4 可逆矩阵总可以经过一系列初等行变换化成单位矩阵.证 如果A 是可逆方阵,由推论2知道它可以写成一些初等矩阵的乘积:A=Q1Q2…Qm.因此11121m---=Q Q Q A E .由于初等矩阵的逆矩阵仍为初等矩阵,而A 左乘初等矩阵就相当于对A 施行初等行变换,所以A 可以经初等行变换化为单位矩阵.值得注意的是,如果有初等矩阵P1,…,Pm使Pm…P1A=E,那么A-1=Pm…P1=Pm…P1E,这说明,如果用一系列初等行变换可把可逆矩阵A 化为单位矩阵,那么同样地用这一系列初等行变换去化单位矩阵,就得到A -1.如果我们把A ,E 这两个矩阵凑在一起作成一个n ×2n 矩阵.(A┊E),按矩阵的分块乘法可得Pm…P1(A┊E)=(Pm…P1A┊Pm…P1E )=(E ┊A-1).这就给我们提供了一个具体的求可逆矩阵A 的逆矩阵的方法:作n×2n 矩阵(A ┊E ),用初等行变换把它的左边一半化成E ,这时,右边的一半就是A -1.例13 设012114210⎡⎤⎢⎥=⎢⎥⎢⎥-⎣⎦A ,求A-1.解 对(A┊E)作初等行变换012100()114010210001⎡⎤⎢⎥=⎢⎥⎢⎥-⎣⎦A E(1,2)114010012100210001r ⎡⎤⎢⎥−−−→⎢⎥⎢⎥-⎣⎦ (31(2))114010012100038021r +-⎡⎤⎢⎥−−−−→⎢⎥⎢⎥---⎣⎦ (32(3))114010012100002321r +⎡⎤⎢⎥−−−−→⎢⎥⎢⎥--⎣⎦(23(1))(13(2))(12(1))100211010421002321r r r +++--⎡⎤⎢⎥−−−−→-⎢⎥⎢⎥--⎣⎦1(3())210021101042131001122r -⎡⎤⎢⎥-⎢⎥−−−−→-⎢⎥⎢⎥--⎢⎥⎣⎦.于是121142131122-⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥--⎢⎥⎣⎦A .当然,同样可以证明,可逆矩阵也能用初等列变换化成单位矩阵,这就给出了用初等列变换求逆矩阵的方法.§7 向量空间定义15 设V 为n 维向量组成的集合.如果V 非空,且对于向量加法及数乘运算封闭,即对任意的α,β∈V 和常数k 都有α+β∈V,kα∈V,就称集合V 为一个向量空间.例14 n 维向量的全体R n构成一个向量空间.特别地,三维向量可以用有向线段来表示,所以R 3也可以看作以坐标原点为起点的有向线段的全体.例15 n 维零向量所形成的集合{0}构成一个向量空间.例16 集合V ={(0,x2,x3,…,xn)}|x2,x3,…,xn∈R }构成一个向量空间.例17 集合V ={(x1,x2,…,xn)|x1+x2+…+xn=1}不构成向量空间. 例18 设α1,α2,…,αm为一个n 维向量组,它们的线性组合V={k1α1+k2α2+…+k m αm |k 1,k 2,…,k m ∈R }构成一个向量空间.这个向量空间称为由α1,α2,…,αm所生成的向量空间,记为L (α1,α2,…,αm).例19 证明由等价的向量组生成的向量空间必相等.证 设α1,α2,…,αm和β1,β2,…,βs 是两个等价的向量组.任意的α∈L(α1,α2,…,αm)都可经α1,α2,…,αm线性表出.由向量组α1,α2,…,αm又可经β1,β2,…,βs 线性表出可以知道α也能经β1,β2,…,βs 线性表出,即有α∈L(β1,β2,…,βs ).由α的任意性得L (α1,α2,…,αm)⊆L (β1,β2,…,βs ).同理可证L (β1,β2,…,βs )⊆L ().于是L (α1,α2,…,αm)=L (β1,β2,…,βs ).定义16 如果V 1和V2都是向量空间且V 1⊆V2,就称V1是V2的子空间.任何由n 维向量所组成的向量空间都是R n的子空间.R n和{0}称为R n的平凡子空间,其他子空间称为R n的非平凡子空间.定义17 设V 为一个向量空间.如果V 中的向量组α1,α2,…,αr 满足(1)α1,α2,…,αr 线性无关;(2) V 中任意向量都可经α1,α2,…,αr 线性表出,那么,向量组α1,α2,…,αr 就称为V 的一个基,r 称为V 的维数,并称V 为一个r 维向量空间.如果向量空间V 没有基,就说V 的维数为0,0维向量空间只含一个零向量.如果把向量空间V 看作向量组,那么V 的基就是它的极大线性无关组,V 的维数就是它的秩.当V 由n 维向量组成时,它的维数不会超过n .例20 设 ()123221212122-⎡⎤⎢⎥=-⎢⎥⎢⎥-⎣⎦A a ,a ,a , ()12140342⎡⎤⎢⎥==⎢⎥⎢⎥-⎣⎦B ,ββ, 验证α1,α2,α3是R 3的一个基并将β1,β2用这个基线性表出.解 由|A|≠0可以知道α1,α2,α3线性无关,因此α1,α2,α3是R 3的一个基.设β1=x11α1+x21α2+x31α3,β2=x12α1+x22α2+x32α3,即(β1,β2)=(α1,α2,α3)111221223132x x x x x x ⎡⎤⎢⎥⎢⎥⎢⎥⎣⎦, 那么 ()1112112122123132x x x x x x --⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦A ,=AB ββ.如果P 1,P2,…,Pl为初等矩阵,使P1P2…PlA=E,则 A-1=P1P2…Pl且11122122123132l x x x x x x ⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦P P P B .因此只需对矩阵(A┊B)作初等行变换,当把A 变为E 时,B 就变成了A-1B.(A┊B)=221142*********-⎡⎤⎢⎥-⎢⎥⎢⎥--⎣⎦(1,3)122422*********r --⎡⎤⎢⎥−−−→-⎢⎥⎢⎥-⎣⎦(21(2))(31(2))122420368706378r r ++--⎡⎤⎢⎥−−−−→-⎢⎥⎢⎥-⎣⎦(1(1))(32(2))122420368700996r r -+----⎡⎤⎢⎥−−−−→-⎢⎥⎢⎥--⎣⎦1(3())9(23(6))(13(2))21202303023200113r r r -+-+⎡⎤--⎢⎥⎢⎥−−−−→-⎢⎥⎢⎥-⎢⎥⎣⎦1(2())3(12(2))2410033201013200113r r +⎡⎤⎢⎥⎢⎥⎢⎥−−−−→-⎢⎥⎢⎥⎢⎥-⎢⎥⎣⎦所以 112321232242,3333--++=a a a =a a a ββ. 习 题 三1. 设α1=(1,1,0),α2=(0,1,1),α3=(3,4,0).求α1-α2及3α1+2α2-α3.2. 设3(α1-α)+2(α2+α)=5(α3+α),其中α1=(2,5,1,3),α2=(10,1,5,10),α3=(4,1,-1,1).求α.3. 判断下列命题是否正确:(1) 若向量组α1,α2,…,αm线性相关,那么其中每个向量可经其他向量线性表示.(2) 如果向量β1,β2,…,βs 可经向量组α1,α2,…,αm线性表示且α1,α2,…,αm 线性相关,那么β1,β2,…,βs 也线性相关.(3) 如果向量β可经向量组α1,α2,…,αm线性表示且表示式是惟一的,那么α1,α2,…,αm线性无关.(4) 如果当且仅当λ1=λ2=…=λm=0时才有λ1α1+λ2α2+…+λm αm +λ1β1+λ2β2+…+λmβm=0,那么α1,α2,…,αm线性无关且β1,β2,…,βm 也线性无关.(5) α1,α2,…,αm线性相关,β1,β2,…,βm 也线性相关,就有不全为0的数λ1, λ2,…,λm使λ1α1+λ2α2+…+λm αm =λ1β1+λ2β2+…+λmβm.(6) 如果R (A )=r,则A 的r-1阶子式全为0.(7) 如果R (A )=r,则A 的r阶子式不为0.(8) 如果由矩阵A 划去一行得到B ,则R (A )>R (B ).(9) 如果P 为一个可逆s×s方阵,Q 为一个可逆n×n方阵,A 为一个s×n阵,那么R (A )=R (PAQ).4. 判别下列向量组的线性相关性.(1)α1=(2,5), α2=(-1,3);(2) α1=(1,2), α2=(2,3), α3=(4,3);(3) α1=(1,1,3,1),α2=(4,1,-3,2),α3=(1,0,-1,2);(4) α1=(1,1,2,2,1),α2=(0,2,1,5,-1),α3=(2,0,3,-1,3),α4=(1,1,0,4,-1).5. β1=α1+α2,β2=α2+α3,β3=α3+α4,β4=α4+α1,证明向量组β1,β2,β3,β4线性相关.6. 设向量组α1,α2,…,αr 线性无关,证明向量组β1,β2,…,βr 也线性无关,这里βi=α1+α2+…+αi.7. 作一个以(1,0,1,0)和(1,-1,0,0)为行向量的秩为4的方阵.8. αi=(αi1,αi2,…,αin),i =1,2,…,n.证明:如果|aij|≠0,那么α1,α2,…,αn 线性无关.。
数据结构与算法第3章课后答案
第 3 章特殊线性表——栈、队列和串(2005-07-14) -第 3 章特殊线性表——栈、队列和串课后习题讲解1. 填空⑴设有一个空栈,栈顶指针为1000H,现有输入序列为1、2、3、4、5,经过push,push,pop,push,pop,push,push后,输出序列是(),栈顶指针为()。
【解答】23,1003H⑵栈通常采用的两种存储结构是();其判定栈空的条件分别是(),判定栈满的条件分别是()。
【解答】顺序存储结构和链接存储结构(或顺序栈和链栈),栈顶指针top= -1和top=NULL,栈顶指针top等于数组的长度和内存无可用空间⑶()可作为实现递归函数调用的一种数据结构。
【解答】栈【分析】递归函数的调用和返回正好符合后进先出性。
⑷表达式a*(b+c)-d的后缀表达式是()。
【解答】abc+*d-【分析】将中缀表达式变为后缀表达式有一个技巧:将操作数依次写下来,再将算符插在它的两个操作数的后面。
⑸栈和队列是两种特殊的线性表,栈的操作特性是(),队列的操作特性是(),栈和队列的主要区别在于()。
【解答】后进先出,先进先出,对插入和删除操作限定的位置不同⑹循环队列的引入是为了克服()。
【解答】假溢出⑺数组Q[n]用来表示一个循环队列,front为队头元素的前一个位置,rear为队尾元素的位置,计算队列中元素个数的公式为()。
page: 2The Home of jetmambo - 第 3 章特殊线性表——栈、队列和串【解答】(rear-front+n)% n【分析】也可以是(rear-front)% n,但rear-front的结果可能是负整数,而对一个负整数求模,其结果在不同的编译器环境下可能会有所不同。
⑻用循环链表表示的队列长度为n,若只设头指针,则出队和入队的时间复杂度分别是()和()。
【解答】O(1),O(n)【分析】在带头指针的循环链表中,出队即是删除开始结点,这只需修改相应指针;入队即是在终端结点的后面插入一个结点,这需要从头指针开始查找终端结点的地址。
数据结构课后习题答案
大学课程《数据结构》课后习题答案第 1 章绪论课后习题讲解1. 填空⑴()是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。
【解答】数据元素⑵()是数据的最小单位,()是讨论数据结构时涉及的最小数据单位。
【解答】数据项,数据元素【分析】数据结构指的是数据元素以及数据元素之间的关系。
⑶从逻辑关系上讲,数据结构主要分为()、()、()和()。
【解答】集合,线性结构,树结构,图结构⑷数据的存储结构主要有()和()两种基本方法,不论哪种存储结构,都要存储两方面的内容:()和()。
【解答】顺序存储结构,链接存储结构,数据元素,数据元素之间的关系⑸算法具有五个特性,分别是()、()、()、()、()。
【解答】有零个或多个输入,有一个或多个输出,有穷性,确定性,可行性⑹算法的描述方法通常有()、()、()和()四种,其中,()被称为算法语言。
【解答】自然语言,程序设计语言,流程图,伪代码,伪代码⑺在一般情况下,一个算法的时间复杂度是()的函数。
【解答】问题规模⑻设待处理问题的规模为n,若一个算法的时间复杂度为一个常数,则表示成数量级的形式为(),若为n*log25n,则表示成数量级的形式为()。
【解答】Ο(1),Ο(nlog2n)【分析】用大O记号表示算法的时间复杂度,需要将低次幂去掉,将最高次幂的系数去掉。
2. 选择题⑴顺序存储结构中数据元素之间的逻辑关系是由()表示的,链接存储结构中的数据元素之间的逻辑关系是由()表示的。
A 线性结构B 非线性结构C 存储位置D 指针【解答】C,D【分析】顺序存储结构就是用一维数组存储数据结构中的数据元素,其逻辑关系由存储位置(即元素在数组中的下标)表示;链接存储结构中一个数据元素对应链表中的一个结点,元素之间的逻辑关系由结点中的指针表示。
⑵假设有如下遗产继承规则:丈夫和妻子可以相互继承遗产;子女可以继承父亲或母亲的遗产;子女间不能相互继承。
则表示该遗产继承关系的最合适的数据结构应该是()。
3线性表
线性表
线性结构特点: 线性结构特点 头 尾 线性 O O O O O 1 2 3 4 5
唯一头元素 唯一尾元素 除头元素外,均有一个直接前驱 除头元素外, 除尾元素外,均有一个直接后继 除尾元素外,
4/48
线性表的定义
1. 线性表的语言定义 线性表是n个数据元素的有限序列。 线性表是 个数据元素的有限序列。 个数据元素的有限序列
pa = La->next ; pb = Lb->next ;//分别指向第一个结点 分别指向第一个结点 Lc = pc = La ; while ( pa && pb ) { if ( pa->data <= pb->data ) { pc->next = pa ;pc = pa ;pa = pa->next ;} else { pc->next = pb ;pc = pb ;pb = pb->next ;} } pc->next = pa ? pa : pb ;//处理剩余部分 处理剩余部分 free (Lb) ; }
11/48
假设p 假设 i是在第 i 个元素之前插入一个新元素的概率 则长度为 n 的线性表中插入一个元素所需移动元 期望值为 素次数的期望值 素次数的期望值为: Eis = ∑ pi (n – i + 1)
i=1 n+1
1 设在任何位置插入元素等概率 等概率, 设在任何位置插入元素等概率, pi = n+1 1 Eis = ∑ (n – i + 1) = n n+1 i=1 2
15/48
假设q 假设 i是删除第 i 个元素的概率 则长度为 n 的线性表中删除一个元素所需移动元 素次数的期望值为 素次数的期望值为: Edl = ∑ qi (n – i) 期望值
数据结构线性表ppt课件
2. 创建两个多项式对象,并初始化它们的系数和指 数。
多项式相加问题
01 3. 遍历两个多项式对象的线性表,将相同指数的 系数相加。
02 4. 创建新的线性表存储结果多项式的系数和指数 。
03
5. 返回结果多项式对象。
约瑟夫环问题
问题描述
n个人围成一圈,从第一个人开始报 数,每次数到m的人出列,然后从下 一个人开始继续报数,直到所有人都 出列为止。求每次出列的人的序号。
03
线性表基本操作
插入操作
在指定位置插入一 个元素。
查找操作
查找指定元素的位 置。
初始化操作
建立一个空的线性 表。
删除操作
删除指定位置的元 素。
遍历操作
访问线性表中的每 个元素。
02
顺序存储结构及其实现
顺序存储结构原理
顺序存储定义
用一段地址连续的存储单元依次 存储线性表的数据元素。
存储方式
逻辑上相邻的元素,其物理存储 位置也相邻。
...,an组成的有序序列。
性质
集合中必存在唯一的一个“第一元素 ”。
集合中必存在唯一的一个“最后元素 ”。
除最后元素之外,均有唯一的后继。
除第一元素之外,均有唯一的前驱。
线性表与数组关系
01
数组是线性表的一种表现和实现形式。
02
线性表是逻辑结构,而数组是存储结构。
任何一种逻辑结构都可以用多种存储结构表示。
顺序表基本操作实现
初始化操作
创建一个空表,分配存储空间。
插入操作
在指定位置插入一个元素,需移动插入位置后的所有元素。
删除操作
删除指定位置的元素,需移动删除位置后的所有元素。
数据结构课后习题及解析第三章
第三章习题1.按图3.1(b)所示铁道(两侧铁道均为单向行驶道)进行车厢调度,回答:⑴如进站的车厢序列为123,则可能得到的出站车厢序列是什么?⑵如进站的车厢序列为123456,能否得到435612和135426的出站序列,并说明原因。
(即写出以“S”表示进栈、以“X”表示出栈的栈操作序列)。
2.设队列中有A、B、C、D、E这5个元素,其中队首元素为A。
如果对这个队列重复执行下列4步操作:(1)输出队首元素;(2)把队首元素值插入到队尾;(3)删除队首元素;(4)再次删除队首元素。
直到队列成为空队列为止,得到输出序列:(1)A、C、E、C、C (2) A、C、E(3) A、C、E、C、C、C (4) A、C、E、C3.给出栈的两种存储结构形式名称,在这两种栈的存储结构中如何判别栈空与栈满?4.按照四则运算加、减、乘、除和幂运算(↑)优先关系的惯例,画出对下列算术表达式求值时操作数栈和运算符栈的变化过程:A-B*C/D+E↑F5.试写一个算法,判断依次读入的一个以@为结束符的字母序列,是否为形如‘序列1& 序列2’模式的字符序列。
其中序列1和序列2中都不含字符’&’,且序列2是序列1的逆序列。
例如,‘a+b&b+a’是属该模式的字符序列,而‘1+3&3-1’则不是。
6.假设表达式由单字母变量和双目四则运算算符构成。
试写一个算法,将一个通常书写形式且书写正确的表达式转换为逆波兰式。
7.假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾元素结点(注意不设头指针),试编写相应的队列初始化、入队列和出队列的算法。
8.要求循环队列不损失一个空间全部都能得到利用, 设置一个标志域tag , 以tag为0或1来区分头尾指针相同时的队列状态的空与满,请编写与此结构相应的入队与出队算法。
9.简述以下算法的功能(其中栈和队列的元素类型均为int):(1)void proc_1(Stack S){ int i, n, A[255];n=0;while(!EmptyStack(S)){n++; Pop(&S, &A[n]);} for(i=1; i<=n; i++)Push(&S, A[i]);}(2)void proc_2(Stack S, int e) { Stack T; int d;InitStack(&T);while(!EmptyStack(S)){ Pop(&S, &d);if (d!=e) Push( &T, d);}while(!EmptyStack(T)){ Pop(&T, &d);Push( &S, d);}}(3)void proc_3(Queue *Q){ Stack S; int d;InitStack(&S);while(!EmptyQueue(*Q)){DeleteQueue(Q, &d);Push( &S, d);}while(!EmptyStack(S)){ Pop(&S, &d);EnterQueue(Q,d)}}实习题1.回文判断。
数据结构课件线性表
目录
CONTENTS
• 线性表的基本概念 • 线性表的实现方式 • 线性表的基本操作 • 线性表操作的效率分析 • 线性表的应用案例
01 线性表的基本概念
线性表的定义
线性表:线性表是一种具有线性 关系的抽象数据类型,其元素之
间存在一对一的顺序关系。
线性表由n个元素组成,每个元 素都有一个唯一的标识符,称为
04 线性表操作的效率分析
顺序存储结构的效率分析
访问元素
顺序存储结构中,访问任意一个元素 的时间复杂度为O(1),因为可以通过 索引直接访问。
插入和删除操作
顺序存储结构中,插入和删除操作的时 间复杂度为O(n),因为需要移动元素来 保持线性表的连续性。
链式存储结构的效率分析
访问元素
链式存储结构中,访问任意一个元素的时间复杂度为O(n),因为需要从头节点 开始遍历链表直到找到目标节点。
VS
详细描述
二维数组是一种二维的数据结构,可以看 作是线性表的扩展。在二维数组中,每个 元素的位置由其行列索引确定,这使得二 维数组在表示矩阵等数学运算中非常方便 。同时,二维数组也可以通过行优先或列 优先的方式进行线性化处理,转化为线性 表的形式进行操作。
哈希表的设计与实现
总结词
哈希表是一种特殊的线性表,通过哈希函数将键映射到数组的索引上,实现快速的查找 操作。
线性表的分类
静态线性表
静态线性表是使用数组实现的线 性表,其大小在创建时确定,且 不可改变。
动态线性表
动态线性表是使用链表或动态数 组实现的线性表,其大小可以动 态地增加或减少储结构是指将线性表中 的元素按照一定的顺序存储在 一片连续的存储空间中。
顺序存储结构的特点是访问速 度快,可以通过索引直接访问 任意元素。
数据结构 线性表精选.ppt
如果一个数据元素序列满足: (1)除第一个和最后一个数据元素外,每个数据元素只有 一个前驱数据元素和一个后继数据元素; (2)第一个数据元素没有前驱数据元素; (3)最后一个数据元素没有后继数据元素。
则称这样的数据结构为线性结构。
简言之,线性结构反映结点间的逻辑关系是 一对一 (1:1) 的。
线性表的逻辑结构:
(a0, a1, … ai-1,ai, ai+1 ,…, an-1)
线性起点
下标,是元素的 序号,表示元素 在表中的位置
数据元素
ai的直接前趋 ai的直接后继
线性终点
n为元素总
个数,即表 长。n≥0
n=0时称为 空表 用符号()表示
例1 分析26 个英文字母组成的英文表是什么结构。
线性表的数据元素集合可以表示为序列a0, a1, a2,...,
an-1,每个数据元素的数据类型可以是任意的类类型。
操作集合
在线性表的第i个数据元素
(1)求当前数据元素个数getS前ize插( 入) 数据元素obj。
(2)插入数据元素insert(i, obj)
(3)删除数据元素delete(i)
(4)取数据元素getData(i) 删除线性表的第i个数据
23
解:已知地址计算通式为: LOC(ai) = LOC(a0) + L *i
LOC( M[3] ) = 8 + 5 ×3 =23
2.2.2 顺序表类
类包含成员变量和成员函数。 成员变量用来表示抽象数据类型中定义的数据集合 成员函数用来表示抽象数据类型中定义的操作集合 顺序表类实现接口List。顺序表类的public成员 函数主要是接口List中定义的成员函数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
取表中第i个结点: 取表中第i个结点:
GetNode( datatype GetNode(L,i) 取表中第i个结点只需返回L.data[i 1]即可 L.data[i{\\取表中第i个结点只需返回L.data[i-1]即可 L.Lengthif (i<1||i> L.Length-1) error"); Error("position error"); L.data[i-1]; return L.data[i-1];}
顺序结构线性表的运算
表的初始化: 表的初始化:
InitList( *L) void InitList(SqList *L) 顺序表的初始化即将表的长度设为0 {\\顺序表的初始化即将表的长度设为0 L.Length=0; L.Length=0; }
求表长: 求表长:
ListLength( *L) int ListLength(SqList *L) 求表长只需返回L.Length { \\求表长只需返回L.Length return L.Length; }
有关线性表的运算
初始化:创建一个空的线性表L 初始化:创建一个空的线性表L。 计数:求线性表L的长度。 计数:求线性表L的长度。 存取:存取第i个数据元素。 存取:存取第i个数据元素。 插入:在第i个数据元素之前, 插入:在第i个数据元素之前,插入一个新的数据元 或在第i个元素后,插入一个新的数据元素。 素;或在第i个元素后,插入一个新的数位序:在一个非空表 (a1 ,a2 ,…,ai,…,an-1 ,an) 中的每个数据元素都有一个确定的位置, 中的每个数据元素都有一个确定的位置,如a1是第一 个数据元素, 是最后一个数据元素, 是第i 个数据元素,an是最后一个数据元素,ai是第i个数据 元素, 为数据元素a 在线性表中的位序。 元素,称i为数据元素ai在线性表中的位序。 前驱/后继元素:若将线性表记为: ai前驱/后继元素:若将线性表记为:(a1, ..., ai-1 , ),则表中ai 先于ai ai先于ai+1, aiai, 先于ai+1 ai , ai+1 , ..., an ),则表中ai-1先于ai,ai先于ai+1, 就称ai aiai的直接前驱元素 ai+1是ai的直接后继 的直接前驱元素, 就称ai-1是ai的直接前驱元素,ai+1是ai的直接后继 元素。 元素。 注意: 注意: 除第一个元素a1元素以外, a1元素以外 除第一个元素a1元素以外,每一个数据元素有且 仅有一个前趋元素。 仅有一个前趋元素。 除最后一个元素以外,每个数据元素有且仅有一 除最后一个元素以外, 个后继元素。 个后继元素。
算法思想: 算法思想: 设LC为空表。 LC为空表。 为空表 LA或LB中的元素逐个插入到LC中即可 中的元素逐个插入到LC中即可。 将LA或LB中的元素逐个插入到LC中即可。 具体方法:为使LC中元素按值非递减有序排列, LC中元素按值非递减有序排列 具体方法:为使LC中元素按值非递减有序排列,可设 两个指针i 分别指向LA LB中某个元素 若设i LA和 中某个元素, 两个指针i和j分别指向LA和LB中某个元素,若设i当前 所指的元素为a,j当前所指的元素为b,则当前应插入 所指的元素为a 当前所指的元素为b LC中的元素 中的元素c 到LC中的元素c为:
if (ai = bj ) Listlnsert(Lc,++k,bj);++i; );++i { Listlnsert(Lc,++k,bj);++i;++j;} else Listlnsert(Lc,++k,bj); );++j;} { Listlnsert(Lc,++k,bj);++j;} } While( <=La_len) While(i <=La_len) { /*如果表La没有取完 则将表La中的所剩元素插入到表lc 如果表La没有取完, La中的所剩元素插入到表lc中 /*如果表La没有取完,则将表La中的所剩元素插入到表lc中*/ GetElem(La,i++,ai); GetElem(La,i++,ai); Listlnsert(Lc,++k,ai); Listlnsert(Lc,++k,ai); } While( <=Lb_len Lb_len) While(j<=Lb_len) { GetElem(Lb,j++,bj); GetElem(Lb,j++,bj); Listlnsert(Lc,++k,bj); Listlnsert(Lc,++k,bj); } }/*MergeList*/
if(x==y) { Delete(LA,k);/*删除 删除* Delete(LA,k);/*删除*/ --; L--; } Else k++; } i++; } }/*PURGE*/
线性表的顺序存储
线性表的顺序存储: 线性表的顺序存储:把线性表的各个数据元素依次存 储在一组地址连续的存储单元里 ;用这种方法存储的 线性表简称为顺序表。 线性表简称为顺序表。 数据元素的存储位置: 数据元素的存储位置: 第i+1个数据元素的存储位置LOC(ai+1)和第i 个数据元素的存储位置LOC( 和第i LOC 个数据元素的存储位置LOC LOC( 之间的关系: 个数据元素的存储位置LOC(ai)之间的关系: LOC( )=LOC LOC( +m。 LOC(ai+1)=LOC(ai)+m。 线性表的第i个数据元素ai的存储位置为: 线性表的第i个数据元素a 的存储位置为: LOC( )=LOC LOC( +(i-1)*m。 LOC(ai)=LOC(a1)+(i-1)*m。
else
实例3 实例3-2:利用线性表的基本运算来实现清除线性表LA 利用线性表的基本运算来实现清除线性表LA 中多余的重复结点,生成一个新的表LB LB。 中多余的重复结点,生成一个新的表LB。如有表 LA=(2,3,4,3,5,6,7,4,8,9) 存在多余的重复结点, 存在多余的重复结点,则 LB=(2,3,4,5,6,7,8,9) 利用算法实现。 利用算法实现。 算法思想:从表LA的第一个结点i=1开始, LA的第一个结点i=1开始 算法思想:从表LA的第一个结点i=1开始,逐个检查结 以后的位置为k的任一元素,若两点相同,则从表LA 点i以后的位置为k的任一元素,若两点相同,则从表LA 中将位置k上数据元素删除掉,当遍历了i 中将位置k上数据元素删除掉,当遍历了i后面的所有元 素后, 就成为表LA中无重复的结点,然后将i LA中无重复的结点 素后,i就成为表LA中无重复的结点,然后将i向后移动 一个位置。重复上述过程,直到i移到表LA的最后一个 一个位置。重复上述过程,直到i移到表LA的最后一个 LA 元素为止。 元素为止。 算法的时间复杂度:(n-1)+(n-2)+(n-3)+…..+1,即 算法的时间复杂度:(n-1)+(n-2)+(n-3)+…..+1,即
算法的时间复杂度为: 算法的时间复杂度为: O(ListLength(La)+ListLength(Lb))
归并算法
MergeList( *La, *Lb, *LC) Void MergeList(List *La, List *Lb, List *LC) { InitList(Lc); /*构造一个空的线性表 构造一个空的线性表Lc*/ InitList(Lc); /*构造一个空的线性表Lc*/ i=j=1;k=0; /*指针 指针i 初始值为1*/ i=j=1;k=0; /*指针i和j初始值为1*/ La_len=ListLength(La); La_len=ListLength(La); Lb_len=ListLength(Lb); Lb_len=ListLength(Lb); while((i<=La_len)&&( =Lb_1en) ((i<=La_len)&&(j while((i<=La_len)&&(j<=Lb_1en) La和Lb均非空 均非空* { /* La和Lb均非空*/ GetElem(La, ai); GetElem(La,i,ai); GetElem(Lb, bj); GetElem(Lb,j,bj); bj) if (ai <bj) { Listlnsert(Lc,++k,ai); Listlnsert(Lc,++k,ai); ++i; ++i; /*将La中的元素插入到表Lc中 中的元素插入到表Lc } /*将La中的元素插入到表Lc中*/
删除:删去第i个数据元素。 删除:删去第i个数据元素。 归并:把两个或两个以上的线性表合并在一起, 归并:把两个或两个以上的线性表合并在一起,形成 一个新的线性表。 一个新的线性表。 分拆:把一个线性表拆成两个或多个线性表。 分拆:把一个线性表拆成两个或多个线性表。 查找:按某个特定的值查找线性表中的某个元素。 查找:按某个特定的值查找线性表中的某个元素。 排序: 排序:对线性表中的某个元素按某个数据项的值递增 (或递减)的顺序进行重新排序。 或递减)的顺序进行重新排序。
根据实例给出线性表归并的算法
实例3 实例3-1:已知线性表LA和LB中的数据元素按值非递减有 已知线性表LA和LB中的数据元素按值非递减有 LA 序排列,现要求将LA LB归并为一个新的线性表 LA和 序排列,现要求将LA和LB归并为一个新的线性表 LC←LA∪LB,且LC中的数据元素仍按值非递减有序排列。 LC←LA∪LB, LC中的数据元素仍按值非递减有序排列。 中的数据元素仍按值非递减有序排列 设 LA=( =(1 15) LA=(1,5,7,15) LB=( =(3 13,15,17) LB=(3,6,8,9,13,15,17) 则 LC=( =(1 13,15,15,17) LC=(1,3,5,6,7,8,9,13,15,15,17)