第2章 数据结构
数据结构第二章课后答案

数据结构第二章课后答案数据结构第二章课后答案1. 线性表1.1 数组实现线性表Q1. 请说明线性表的定义,并结合数组实现线性表的特点进行解释。
线性表是由n(n≥0)个数据元素构成的有序序列,其中n表示线性表的长度。
数组实现线性表的特点是使用一组具有相同数据类型的连续存储空间存储线性表中的元素,通过下标访问和操作元素。
A1. 线性表的定义指出,线性表是由若干个数据元素组成的有序序列。
具体地,在数组实现线性表中,我们将元素存储在一组连续的内存空间中,通过下标访问和操作元素。
由于数组的存储空间具有连续性,这样的实现方式可以在O(1)的时间复杂度下进行元素的访问和修改操作。
1.2 链表实现线性表Q2. 请说明链表实现线性表的特点,并与数组实现进行比较。
链表实现线性表的特点是通过指针将线性表中的元素按照节点的形式连接起来,每个节点包含了存储的元素和指向下一个节点的指针。
与数组实现相比,链表的插入和删除操作更为高效,但是访问某个位置的元素需要从头开始遍历,时间复杂度较大。
A2. 链表实现线性表的特点是通过使用节点和指针将线性表中的元素连接起来。
每个节点中包含了一个存储的元素和指向下一个节点的指针。
链表的插入和删除操作的时间复杂度为O(1),因为只需要改变指针的指向即可。
但是,访问某个位置的元素需要从头开始遍历链表,所以时间复杂度为O(n)。
2. 栈和队列2.1 栈的定义和基本操作Q3. 请给出栈的定义和基本操作。
栈是一种特殊的线性表,它只能在表的一端进行插入和删除操作,该端称为栈顶。
栈的基本操作包括入栈(push)和出栈(pop),分别用于将元素压入栈和将栈顶元素弹出。
A3. 栈是一种特殊的线性表,它只能在表的一端进行插入和删除操作。
这个特定的一端称为栈顶,而另一端称为栈底。
栈的基本操作包括入栈(push)和出栈(pop)。
入栈操作将一个元素压入栈顶,出栈操作将栈顶元素弹出。
2.2 队列的定义和基本操作Q4. 请给出队列的定义和基本操作。
数据结构课后习题及解析第二章

例如m的初值为20;n=7,7个人的密码依次是:3,1,7,2,4,8,4,出列的顺序为6,1,4,7,2,3,5。
第二章答案
约瑟夫环问题
约瑟夫问题的一种描述为:编号1,2,…,n的n个人按顺时针方向围坐一圈,每个人持有一个密码(正整数)。一开始任选一个报数上限值m,从第一个人开始顺时针自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有的人全部出列为止。试设计一个程序,求出出列顺序。利用单向循环链表作为存储结构模拟此过程,按照出列顺序打印出各人的编号。
9.假设有一个循环链表的长度大于1,且表中既无头结点也无头指针。已知s为指向链表某个结点的指针,试编写算法在链表中删除指针s所指结点的前趋结点。
10.已知有单链表表示的线性表中含有三类字符的数据元素(如字母字符、数字字符和其它字符),试编写算法来构造三个以循环链表表示的线性表,使每个表中只含同一类的字符,且利用原表中的结点空间作为这三个表的结点空间,头结点可另辟空间。
r=p;
}
}
r->next=L->next;
printf("请输入第一个报数上限值m(m>0):");
scanf("%d",&m);
printf("*****************************************\n");
printf("出列的顺序为:\n");
q=L;
p=L->next;
7.试分别以不同的存储结构实现线性表的就地逆置算法,即在原表的存储空间将线性表(a1, a2..., an)逆置为(an, an-1,..., a1)。
数据结构第二章习题(1)

B. 单链表
C. 双链表
D. 单循环链表
3.具有线性结构的数据结构是( )。
A. 图
B. 树
C. 广义表
D. 栈
4.在一个长度为 n 的顺序表中,在第 i 个元素之前插入一个新元素时,需向后移动( )
个元素。
A. n-i
B. n-i+1
C. n-i-1
5.非空的循环单链表 head 的尾结点 p 满足( )。
A. n-i
B. n-i+1
C. n-i-1
D. i+1
10.线性表是n个( )的有限序列。
A. 表元素
B. 字符 C. 数据元素 D. 数据项
11.从表中任一结点出发,都能扫描整个表的是( )。
A. 单链表
B. 顺序表
C. 循环链表
D. 静态链表
12.在具有n个结点的单链表上查找值为x的元素时,其时间复杂度为( )。
A. q->next=s->next;s->next=p; B. s->next=p;q->next=s->next;
C. p->next=s->next;s->next=q; D. s->next=q;p->next=s->next; 24.在以下的叙述中,正确的是( )。
A. 线性表的顺序存储结构优于链表存储结构 B. 线性表的顺序存储结构适用于频繁插入/删除数据元素的情况
A. p->next=p->next->next;
B. p=p->next;p->next=p->next->next;
C. p =p->next;
数据结构第2章习题及答案

7.若某表最常用的操作是在最后一个结点之后插入一个结点或删除最后一个结点。
则采用()存储方式最节省运算时间。
【北京理工大学 2000 一、1(2分)】A.单链表 B.双链表 C.单循环链表 D.带头结点的双循环链表8. 静态链表中指针表示的是(). 【北京理工大学 2001 六、2(2分)】A.内存地址 B.数组下标 C.下一元素地址 D.左、右孩子地址9. 链表不具有的特点是()【福州大学 1998 一、8 (2分)】A.插入、删除不需要移动元素 B.可随机访问任一元素C.不必事先估计存储空间 D.所需空间与线性长度成正比10. 下面的叙述不正确的是()【南京理工大学 1996 一、10(2分)】A.线性表在链式存储时,查找第i个元素的时间同i的值成正比B. 线性表在链式存储时,查找第i个元素的时间同i的值无关C. 线性表在顺序存储时,查找第i个元素的时间同i 的值成正比D. 线性表在顺序存储时,查找第i个元素的时间同i的值无关11. 线性表的表元存储方式有((1))和链接两种。
试指出下列各表中使用的是何种存储方式:表1是((2))存储方式;表2是((3))存储方式;表3是((4))存储方式;表4是((5))存储方式。
表左的s指向起始表元。
供选择的答案:A.连续B.单向链接C.双向链接D.不连接E.循环链接F.树状G.网状H.随机I.顺序J.顺序循环【上海海运学院 1995 二、1(5分)】12.(1) 静态链表既有顺序存储的优点,又有动态链表的优点。
所以,它存取表中第i个元素的时间与i无关。
(2) 静态链表中能容纳的元素个数的最大数在表定义时就确定了,以后不能增加。
(3) 静态链表与动态链表在元素的插入、删除上类似,不需做元素的移动。
以上错误的是()【南京理工大学 2000 一、3(1.5分)】A.(1),(2) B.(1) C.(1),(2),(3) D.(2)13. 若长度为n的线性表采用顺序存储结构,在其第i个位置插入一个新元素的算法的时间复杂度为()(1Rlink=p;p->Llink->Rlink=q;q->Llink=q;B. p->Llink=q;p->Llink->Rlink=q;q->Rlink=p;q->Llink=p->Llink;C. q->Rlink=p;q->Llink=p->Llink;p->Llink->Rlink=q;p->Llink=q;D. q->Llink=p->Llink;q->Rlink=q;p->Llink=q;p->Llink=q;24.在单链表指针为p的结点之后插入指针为s的结点,正确的操作是:()。
《数据结构》课程课件第二章线性表

Step2:数据域赋值
插入后: Step3:插入(连接)
X q
(1)式和(2)式的顺序颠倒,可以吗?
4、插入元素(在第i个元素之前插入元素e)
为什么时间复杂度不再是O(1)?
第i-1个元素
第i个元素
p
s
新插入元素
5、删除p所指元素的后继元素
P
删除前:
P->next P->next->next
删除:
五、线性表ADT的应用举例
Void mergelist(list La,list Lb,list &Lc)
{ //已知线性表La和Lb中的数据元素按值非递减排列
//归并La和Lb得到新的线性表Lc,Lc中的元素也按值非递减排列
例: 将两个各有n个元素的有序表归并成一个有序表, 其最小的比较次数是( )。 A、n B、2n-1 C、2n D、n-1
三、线性表的ADT
四、线性表的分类
五、线性表ADT的应用举例
例1:已知有线性表L,要求删除所有X的出现
五、线性表ADT的应用举例
例2: 已知有两个分别有序的线性表(从小到大),要 求合并两个线性表,且合并后仍然有序。——归并 方法1: 合并,再排序O((m+n)2)
方法2: 归并,利用分别有序的特点O((m+n))
二、线性表上常见的运算
8、删除 Delete(L,i):删除线性表的第i个元素 删除前 a1 a2 … ai-1 ai ai+1 … an 删除后 a1 a2 … ai-1 ai+1 … an 9、判断是否为空 Empty(L):线性表空,则返回TRUE, 否则FALSE 10、输出线性表 Print(L):输出线性表的各个元素 11、其它操作 复制、分解、合并、分类等
数据结构第2章典型例题解析

第2章线性表典型例题解析一、选择题1.线性表是具有n个(n≥0)的有限序列。
A.表元素B.字符C.数据元素D.数据项【分析】线性表是具有相同数据类型的n(n≥0)个数据元素的有限序列,通常记为(a1,a2,…,a n),其中n为表长,n=0时称为空表。
【答案】C2.顺序存储结构的优点是。
A.存储密度大B.插入运算方便C.删除运算方便D.可方便地用于各种逻辑结构的存储表示【分析】顺序存储结构是采用一组地址连续的存储单元来依次存放数据元素,数据元素的逻辑顺序和物理次序一致。
因此,其存储密度大。
【答案】A3.带头结点的单链表head为空的判断条件是。
A.head==NULL B.head->next==NULLC.head->next==head D.head!=NULL【分析】链表为空时,头结点的指针域为空。
【答案】B4.若某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用存储方式最节省运算时间。
A.单链表B.仅有头指针的单循环链表C.双链表D.仅有尾指针的单循环链表【分析】根据题意要求,该线性表的存储应能够很方便地找到线性表的第一个元素和最后一个元素,A和B都能很方便地通过头指针找到线性表的第一个元素,却要经过所有元素才能找到最后一个元素;选项C双链表若存为双向循环链表,则能很方便地找到线性表的第一个元素和最后一个元素,但存储效率要低些,插入和删除操作也略微复杂;选项D可通过尾指针直接找到线性表的最后一个元素,通过线性表的最后一个元素的循环指针就能很方便地找到第一个元素。
【答案】D5.若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用存储方式最节省时间。
A.顺序表B.双链表C.带头结点的双循环链表D.单循环链表【分析】某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算。
因此不需要移动线性表种元素的位置。
根据题意要求,该线性表的存储应能够很方便地找到线性表的任一指定序号的元素和最后一个元素,顺序表是由地址连续的向量实现的,因此具有按序号随机访问的特点。
《数据结构》课件

第二章 线性表
1
线性表的顺序存储结构
2
线性表的顺序存储结构使用数组来存储元素,
可以快速随机访问元素。
3
线性表的常见操作
4
线性表支持常见的操作,包括插入、删除、 查找等,可以灵活地操作其中的元素。
线性表的定义和实现
线性表是一种数据结构,它包含一组有序的 元素,可以通过数组和链表来实现。
线性表的链式存储结构
线性表的链式存储结构使用链表来存储元素, 支持动态扩展和插入删除操作。
第三章 栈与队列
栈的定义和实现
栈是一种特殊的线性表,只能在一 端进行插入和删除操作,遵循后进 先出的原则。
队列的定义和实现
队列是一种特殊的线性表,只能在 一端进行插入操作,在另一端进行 删除操作,遵循先进先出的原则。
栈和队列的应用场景和操作
哈希表是一种高效的查找数据结构, 通过哈希函数将关键字映射到数组 中,实现快速查找。
排序算法包括冒泡排序、插入排序 和快速排序等,可以根据数据规模 和性能要求选择合适的算法。
结语
数据结构的学习心得 总结
学习数据结构需要掌握基本概念 和常见操作,通过实践和练习加 深理解和熟练度。
下一步学习计划的安 排
在掌握基本数据结构的基础上, 可以进一步学习高级数据结构和 算法,提升编程技能。
相关学习资源推荐
推荐一些经典的数据结构教材和 在线学习资源,如《算法导论》 和LeetCode等。
栈和队列在计算机科学中有许多应 用,如函数调用、表达式求值和作 业调度等。
第四章 树与二叉树
树的定义和性质
树是由节点和边组成的一种非线性数据结构,每个 节点可以有多个子节点。
二叉树的遍历方式
二叉树的遍历方式包括前序遍历、中序遍历和后序 遍历,可以按不同顺序输出节点的值。
数据结构 第2章 线性表

123456
1 3
2 5
4
6
8
整理ppt
06/03/2021
线性表链式结构的存储示意
假设我们有一个线性表(a1,a2,…,an)
数据信息
结点
指针
……
ai 0500
数据域 指针域
图a:链表中的相邻元素
……
ai+1 0800
地址0500
头指针
第一个结点
12
整理ppt
06/03/2021
实现读取单链表第i个元素的代码
/* 初始条件:链式线性表L已存在,0 < i < ListLength(L)+1 */ /* 操作结果:用 e 返回 L 中第 i 个数据元素的值 */
1. Status GetElem (LinkList L, int i, ElemType *e)
2. { /* 参数 L 是待操作的链表,其实也是头结点 */
3.
int j;
4.
Node *p;
/* 声明一结点指针p */
5.
p = L->next;
/* 让p指向链表L的第一个结点 */
6.
j = 1;
/* j为计数器 */
7.
while (p && j<i) /* p不为空或者计数器j还没有等于i时,循环继续 */
8.
{
9.
p = p->next; /* 让p指向下一个结点 */
10.
++j;
11.
}
12. if (!p || j>i)
13.
《数据结构C语言版》----第02章

p size=0
head
a0
a1
(a)
...
a n 1 ∧
3.顺序表操作的效率分析
时间效率分析: 算法时间主要耗费在移动元素的操作上,因此计算时间复 杂度的基本操作(最深层语句频度) T(n)= O(移动元素次数) 而移动元素的个数取决于插入或删除元素的位置i. 若i=size,则根本无需移动(特别快); 若i=0,则表中元素全部要后移(特别慢); 应当考虑在各种位置插入(共n+1种可能)的平均移动次 数才合理。
(3)带头结点单链表和不带头结点单链表的比较
1).在带头结点单链表第一个数据元素前插入结点
p head s p head data next a0 x
∧
a1
…
an-1
∧
(a) 插入前
data next a0
∧
a1
…
an-1
∧
s
x
(b) 插入后
2).删除带头结点单链表第一个数据元素结点
p data next head
(5)取数据元素ListGet(L,
i, x)
int ListGet(SeqList L, int i, DataType *x) { if(i < 0 || i > L.size-1) { printf("参数i不合法! \n"); return 0; } else { *x = L.list[i]; return 1; } }
数据结构 第2章习题答案

第2章习题答案一、填空1. 【严题集2.2①】在顺序表中插入或删除一个元素,需要平均移动表中一半元素,具体移动的元素个数与表长和该元素在表中的位置有关。
2. 线性表中结点的集合是有限的,结点间的关系是一对一的。
3. 向一个长度为n的向量的第i个元素(1≤i≤n+1)之前插入一个元素时,需向后移动n-i+1 个元素。
4. 向一个长度为n的向量中删除第i个元素(1≤i≤n)时,需向前移动n-i 个元素。
5. 在顺序表中访问任意一结点的时间复杂度均为O(1),因此,顺序表也称为随机存取的数据结构。
6. 【严题集2.2①】顺序表中逻辑上相邻的元素的物理位置必定相邻。
单链表中逻辑上相邻的元素的物理位置不一定相邻。
7. 【严题集2.2①】在单链表中,除了首元结点外,任一结点的存储位置由其直接前驱结点的链域的值指示。
8.在n个结点的单链表中要删除已知结点*p,需找到它的前驱结点的地址,其时间复杂度为O(n)。
二、判断正误(在正确的说法后面打勾,反之打叉)(×)1. 链表的每个结点中都恰好包含一个指针。
答:错误。
链表中的结点可含多个指针域,分别存放多个指针。
例如,双向链表中的结点可以含有两个指针域,分别存放指向其直接前趋和直接后继结点的指针。
(×)2. 链表的物理存储结构具有同链表一样的顺序。
错,链表的存储结构特点是无序,而链表的示意图有序。
(×)3. 链表的删除算法很简单,因为当删除链中某个结点后,计算机会自动地将后续的各个单元向前移动。
错,链表的结点不会移动,只是指针内容改变。
(×)4. 线性表的每个结点只能是一个简单类型,而链表的每个结点可以是一个复杂类型。
错,混淆了逻辑结构与物理结构,链表也是线性表!且即使是顺序表,也能存放记录型数据。
(×)5. 顺序表结构适宜于进行顺序存取,而链表适宜于进行随机存取。
错,正好说反了。
顺序表才适合随机存取,链表恰恰适于“顺藤摸瓜”(×)6. 顺序存储方式的优点是存储密度大,且插入、删除运算效率高。
数据结构第二章参考答案

数据结构第二章参考答案习题21. 填空题(1)在一个单链表中,已知每个结点包含data和next两个域,q所指结点是p所指结点的直接前驱,若在q和p之间插入s所指结点,则执行(___________)和(___________)操作。
答案:q->next = s; s->next = p; 或 s->next=q->next; q->next = s; (2)表长为n的顺序表,当在任何位置上插入或删除一个元素的概率相等时,插入一个元素所需移动元素的平均个数为(___________),删除一个元素需要移动元素的平均个数为(___________)。
答案:n/2 (n-1)/2(3)表长为0的线性表称为(___________)。
答案:空表(4)动态内存管理是操作系统的基本功能之一,其作用是响应用户程序对内存的(___________)和(___________)请求。
答案:申请释放(5)顺序表多采用(___________)实现的,是一种随机存取结构,对表中任意结点存取操作的时间复杂度为(___________)。
而查找链表中的结节,需要从头指针起顺着链扫描才能得到,平均时间复杂度为(___________)。
因此,若线性表的操作主要是进行查找,很少进行插入或删除操作时,采用(___________)表比较合适。
答案:数组 O(1) O(n) 顺序(6)在链表某个位置上进行插入和删除操作,只需要修改(___________)即可,而无须移动大量元素,操作的时间复杂度为(___________)。
而在顺序表中进行插入和删除操作,往往要移动大量元素,平均移动元素的数目为(___________),平均时间复杂度为(___________)。
因此,若对线性表进行频繁的插入和删除操作时,采用(___________)表相对合适。
若插入和删除主要发生在表头和表尾,则采用(___________)表更为合适。
第二章-2 空间数据结构的类型

“外壳”; ③没有任何点在三角形的外接圆内部,反之,
如果一个三角网满足此条件,那么它就是 Delaunay三角网;
④如果将三角网中的每个三角形的最小角进行 升序排列,则Delaunay三角网的排列得到的数值 最大,从这个意义上说, Delaunay三角网是 “最接近于规则化”的三角网。(等边三角形)
▪ TIN
它角 连 多从
) 。
被 称 为
形 网 是
形 成 的
边 形 中
左 图 中
狄泰 一 各可
洛森 个 已以
尼多 三 知看
三边 角 点出
角 网 (
形 的 对 偶 图
形 网 , 该 三
)
(
参 考 点
相
来 , 将 泰 森
D-
,
▪ 用迪洛尼三角网构建泰森多边形
▪ 给定一个D-TIN,对于它的所有内边,连接共 有每条内边的两个三角形的外接圆的圆心,即构 成该TIN的平面点集Voronoi图。 (1)首先构建离散平面点集的D-TIN; (2)然后求取各三角形的外接圆心; (3)对每一个离散点,按顺时针或逆时针方 向连接与其关联的三角形的外接圆心,即得到该 离散点的泰森多边形;
▪
②手扶跟踪数字化法;
▪
③数据结构转换法。
2.3.2 矢量数据结构
矢量数据结构分为以下几种主要类型 ▪ 简单数据结构 ▪ 拓扑数据结构 ▪ 曲面数据结构
1)简单数据结构 a.面条(Spaghetti方式)在简单数据结构中,空间数据按 照以基本的空间对象(点、线、多边形)为单位进行单独 组织,不含有拓扑关系数据,最典型的是面条(Spaghetti 方式)
数据结构第2章线性表A

在线性表的第i个位臵前插入一个元素的示意图如下:
1 2 3 4 插入25 5 12 1
12
13 21
13
21 24 28 30 42 77
2
3 4 5 6 7 8
24
25
6
7 8
28
30 42 77
9
16
3)删除
删除线性表的第i个位臵上的元素
实现步骤: 将第i+1 至第n 位的元素向前移动一个位臵; 表长减1。 注意:事先需要判断,删除位臵i 是否合法? 应当符合条件:1≤i≤n 或 i=[1, n] 核心语句: for ( j=i+1; j<=n; j++ )
18
2.2.3 顺序表的运算效率分析
时间效率分析:
算法时间主要耗费在移动元素的操作上,因此 计算时间复杂度的基本操作(最深层语句频度) T(n)= O (移动元素次数) 而移动元素的个数取决于插入或删除元素的位臵.
讨论1:若在长度为 n 的线性表的第 i 位前 插入一个元素, 则向后移动元素的次数f(n)为: f(n) = n – i + 1
例2 分析学生情况登记表是什么结构。
学号 姓名 性别 年龄 班级
0406010402
0406010405 0406010406 0406010410 0406010413 :
陈杰
邓博 管杰 黄腾达 李荣智 : : :
2004级计软04-1班
2004级计软04-1班 2004级计软04-1班 2004级计软04-1班 2004级计软04-1班 :
InitList( &L ); DestoryList( &L ); //建空表,初始化 //撤销表,释放内存
数据结构第二章习题

数据结构第二章习题第2章线性表一、单项选择题1.线性表就是具备n个_________的非常有限序列。
a.表元素b.字符c.数据元素d.数据项2.线性表是_________。
a.一个非常有限序列,可以为空b.一个非常有限序列,不可以为空c.一个无穷序列,可以为空d.一个无穷序列,不可以为空3.线性表使用链表存储时,其地址_________。
a.必须是连续的b.一定是不连续的c.部分地址必须是连续的d.连续与否均可以4.链表不具备的特点是_________。
a.可以随机出访任一结点b.填入删掉不须要移动元素c.不必事先估算存储空间d.所须要空间与其长度成正比5.设立线性表存有n个元素,以下操作方式中,_________在顺序单上同时实现比在链表上同时实现效率更高。
a.输出第i(1≤i≤n)个元素值b.互换第1个元素与第2个元素的值c.顺序输入这n个元素的值d.输出与给定值x相等的元素在线性表中的序号6.设立线性表中存有2n个元素,以下操作方式中,_________在单链单上同时实现Obrero在顺序单上同时实现效率更高。
a.删掉选定的元素b.在最后一个元素的后面插入一个新元素c.顺序输出前k个元素d.互换第i个元素和第2n-i-1个元素的值(i=0,1…,n-1)7.如果最常用的操作是取第i个结点及其前驱,则采用_________存储方式最节省时间。
a.单链表中b.双链表中c.单循环链表d.顺序表8.与单链表相比,双链表的优点之一是_________。
a.填入和删掉操作方式更直观b.可以展开随机出访c.可以省略字段指针或表尾指针d.出访前后相连结点更有效率9.率先垂范结点的单链表中l为觑的认定条件就是_________。
a.l==nullb.l->next==nullc.l->next==ld.l!=null10.在一个具备n个结点的有序单链表填入一个崭新结点并仍然维持有序的时间复杂度就是_________。
数据结构算法(第二章)

∥算法2.1: 将所有在线性表Lb中但不在La中的数据元素插入到La中void union(List &La, List Lb){La_len=ListLength(La);Lb_len=ListLength(Lb);for(i=1;i<=Lb_len;i++){GetElem(Lb,i,e);if(!LocateElem(La,e,equal)) ListInsert(La,++La_len,e);}}∥union∥算法2.2: 已知线性表La和Lb中的数据元素按值非递减排列。
∥归并La和Lb得到新的线性表Lc ,Lc的数据元素也接值非递减排列。
void MergeList(ListLa,List Lb, List &Lc){InitList(Lc);i=j=1; k=0;La_len=ListLength(La); Lb_len=ListLengtb(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∥算法 2.3:构造一个空的线性表L。
Status InitList_Sq(SqList &L){L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));if(!L.elem) exit(OVERFLOW);L.length=0;L.listsize=LIST_INIT_SIZE;return oK;}∥InitList_Sq∥算法2.4:在顺序线性表L中第i个位置之前插入新的元素e,∥i的合法值为1≤i≤ListLength_ Sq(L)+1Status ListInsert_ Sq(SqList &L, int i, ElemType e){if(i<1|| i>L.length+1) return ERROR;if (L.length>=L.listsize){newbase= (ElemType *)realloc(L.elem, (L.listsize+ LISTINCREMENT)* sizeof(ElemType));if(!newbase)exit(OVERFLOW);L.elem=newbase;L.listsize+=LISTINCREMENT;}q=& (L.elem[i-l]);for(p=&(L.elem[L.length-l]);p>=q;--p)*(p+1)=*p;*q=e;++L.length;return OK;}∥Listlnsert_ Sq∥算法2.5:在顺序线性表L中删除第i个元素,并用e返回其值∥i的合法值为1≤i≤ListLength_ Sq(L)Status ListDelete_ Sq(SqList &L, int i,ElemType &e){if((i<1)|(1> L.length)) return ERROR;p=&(L.elem[i-l]);e=*p;q=L.elem+L.length -1;for(++p;p<=q;++p) *(p一1)=*p;--L.length;Return OK;}//ListDelete_Sq算法2.6:在顺序线性表L中查找第1个值与e满足compare()的元素的位序,//若找到,则返回其在L中的位序,否则返回0LocateElem_Sq(SqList_L, ElemType e, Status(*compare)(ElemType,ElemType)){;L.elem;while(i<=L.length&&!(*compare)(*p++,e)) ++i;if(i<=L.length) return i;else return0;}∥LocateElem_Sq∥算法2.7:已知顺序线性表La和Lb的元素按值非递减排列∥归并La和Lb得到新的顺序线性表Lc ,Lc的元素也按值非递减排列void MergeList_ Sq(SqList La, SqList Lb, SqList &Lc){pa=La.elem; pb=Lb.elem;Lc.listsize=Lc.length=La.length+Lb.length;pc=Lc.elem=(ElemType* )malloc(Lc.listsize* sizeof(ElemType));if(!Lc.elem) exit(OVERFLOW);pa_last=La.elem+La.length-l;pb_last=Lb.elem+Lb.length-l;while (pa<=pa_last&&pb<=pb_last){*pc++=*pa++;while (pa<=pa_ last) *pc++=*pa++;while (pb<=pb_ last) *pc++=*pb++;}∥MergeList_Sq∥算法2.8:L为带头绪点的单链表的头指针。
第2章 数据结构与算法

数据结构与算法1.1 基本概念信息--------》数据1.11 数据结构的基本概念数据:数据就是计算机化的信息,数据元素(结点记录表目)是数据的基本单位,一个数据元素由多个数据项组成,数据项是有独立含义的数据的最小单位。
数据结构:数据的逻辑结构线性结构非线性结构数据的储存结构数据的运算包括:检索,插入,删除,更新,排序等。
1.12主要的数据存储方式(1)顺序存储结构结点中只有自身信息字段,没有链接信息字段可以通过计算确定数据结构中第I个结点的位置删除,插入运算会引起大量的结点移动(2)链式存储结构结点中除了自身信息外,还有表示连接信息的指针字段,用指针来体现数据之间逻辑上的联系逻辑上相邻的结点物理上不必相邻插入,删除操作灵活方便,不必移动结点,只要改变结点中指针值即可1.13算法的设计与分析算法采用由粗到细,由抽象到具体的逐步求精的方法算法分析:主要分析算法所占用的计算机资源,即时间代价和空间代价两个方面。
1.2线性表线性表是最简单,最常用的数据结构。
线性表的逻辑结构为n个数据元素的有序序列。
线性表的储存结构多样其中:顺序储存结构的线性表称为顺序表(一维数组)链式储存结构的线性表称为链表散列方法储存的线性表称为散列表线性表根据其上的运算集合不同可以分为:栈和队列1.21 顺序表和一维数组用顺序方式储存的线性表成为一维数组。
用存储单元的邻接性体现线性表元素间的一维顺序关系,对线性表进行插入和删除操作时,可能需要移动大量的结点。
1.22 链表(1)线性链表(单链表)头指针--→头结点--→结点(2)双链表设置两个指针,其中Llink指向前驱结点,Rlink指向后继结点。
(3)可利用空间表作用是管理可用于链表插入的结点,当链表插入需要一个结点时,从可利用空间表删除第一个结点,用这个结点去做链表插入;当从链表中删除一个结点的时候,就把这个结点插入到可利用空间表第一个结点的前面。
1.23 栈栈是限定仅在一端进行插入和删除的线性表。
数据结构 第二章__线性表(本)

数据结构与算法华东师范大学计算机系杨沛第二章线性表2.1 线性表的基本概念线性表是具有相同数据类型的数据元素的有限序列。
由n(n≥0)个数据元素k0,k1,…,kn-1组成的线性表记为(k0 ,k1 ,…,kn-1),线性表中包含的数据元素的个数n称为线性表的长度(length),称长度为零的线性表为空的线性表(简称为空表)。
相关概念:表头、表尾、前驱、后继有序线性表:数据元素的相对位置与它们的值有联系。
无序线性表:数据元素的相对位置与它们的值没有联系。
第二章线性表例小于20的质数组成的线性表(2,3,5,7,11,13, 17,19);英文字母表也是线性表,表中每个字母是一个数据元素:(A,B,C,……,Z);2.2 顺序表2.2.1 线性表顺序表(sequential list)就是顺序存贮的线性表,即用一组连续的存贮单元依次、连续地存贮线性表中的结点。
如果每个结点占用s个存贮单元,并假设存放结点ki(0≤i≤n-1)的开始地址为loc(k0),则结点ki的地址loc(ki)可表示成Loc(ki) =loc(k0) + i*s。
2.2 顺序表在C 语言中,可用数组表示线性表:#define MAXN 100int list[MAXN];int n;线性表的结点k 0,k 1,…,k n-1依次存放在数组单元list[0],list[1],…,list[n-1]。
2.2.1 线性表最大表长实际表长线性表2.2 顺序表2.2.1 线性表假设s=sizeof(int),则可得到计算ki的地址的公式,因loc(ki)=&list[i],而&list[i]=&list[0]+i·s,故loc(ki)=&list[0]+i·s。
2.2 顺序表2.2.2 顺序表的操作(1)初始化:初始长度置为0即可(n=0;),数组空间在编译时分配。
(2)顺序表的插入:插入算法的C函数SqListInsert():若插入位置i不在可以插入的位置上,即i<0或i>n,则返回0;若n=MAXN,即线性表已满,此时数组list[]没有多余的存贮单元可以存放新结点,则返回-1;若插入成功,则返回12.2 顺序表实际表长(2)顺序表的插入:int SqListInsert(int list[],int*p_n,int i,int x) {int j;if(i<0||i>*p_n)return(0);//i不是合法的插入位置if(*p_len==MAXN)return(-1);//线性表已满2.2 顺序表for(j=*p_n;j>i;j--)list[j]=list[j-1];//结点右移list[i]=x;(*p_n)++;//表长加1return(1);}2.2 顺序表(2)顺序表的插入:对于存放在数组list[]中的、具有n个结点的顺序表,为了把值为x的结点插在表的位置i(0≤i≤n)上,可调用如下的语句:k=SqListInsert(list, &n, i, x);注:结点移动是本算法的关键操作2.2 顺序表(3)顺序表的删除:删除算法的C函数SqListDelete():在具有n个结点的顺序表中,删除第i(0≤i≤n-1)个位置上的结点,使线性表长度减1,若删除位置不合法,即i<0或i≥n,则返回0;若删除位置合法,即0≤i≤n-1,则删除成功,返回1。
第2章 CAD常用数据结构

C
(a) 申请一个新结点 Rear B C D 0 E
(b)将 B、D 结点地址分别赋给 C 结点 Head A 0 B C D 0 E Rear
(c)插入后 图 2.9 双向链表的插入操作
循环链表
单向链表只给出结点的直接后继,无法求得某结点的前 趋。单向链表最后一个结点的指针域是空的,如果将其 存放第一个结点的地址就形成了循环链表,如图2.10 (a)所示。在循环链表中,从任一结点出发可以达到 表中所有的结点,从而克服了单向链表不能访问其前趋 结点的缺点。
一个数据元素可以由若干个数据项(Item)组成, 此时,常把数据元素称为记录( Record ),含有大 量记录的线性表又称为文件(File)。
姓 名 王晓林 程 红 刘建平 学号 02001 02002 02006 性别 男 女 男 年龄 18 20 21 班 级 健康状况 机械02 健康 机械02 一般 机械02 神经衰弱
Head A 0 B C D 0 E Rear
(a)删除前 Head A 0 B C D 0 E Rear
(b)删除后 图 2.8 双向链表的删除操作
5、插入
若在第 i 个数据元素前插入一个新的 数据元素,首先为该元素申请存储 空 间 , 得 到 一 个 新 结 点 , 如 图 2.9 (a)所示。这个新结点的数据域存 放该元素的值。再找到第i-1个和第i 个结点;新结点的指针域nextPtr, 存放第 i-1个结点的指针域nextPtr的 内容,指针域prePtr存放第 i 个结点 指针域prePtr的内容;结点 i-1的指 针域和结点 i指针域存放新结点的地 址。如图2.9所示。
TOP=4 E D C B A
TOP=-1
TOP=0 A
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、算法
2、算法的描述: 1)流程图 2)伪代码——类似程序设计语言
3、算法的基本结构 ——算法代码化的过程: 1)顺序结构 2)分支结构 3)循环结构
一、算法
算法的时间复杂度是指( )。
A. 执行算法程序所需要的时间 B. 算法程序的长度 C. 算法执行过程中所需要的基本运算次数 D. 算法程序中的指令条数
第2章 数据结构
۩ 算法 ۩ 数据结构概述 ۩ 线性结构 ۩ 栈和队列 ۩树 ۩图
第2章 数据结构
数据结构是讨论非数值类问题的 对象描述、信息组织方法及其相应的 操作。
数据结构的研究内容
电子计算机的主要用途: 早期: 主要用于数值计算。
数学模型→选择计算机语言→编出程序→测试→最终解答
后来: 处理逐渐扩大到非数值计算领域
一、算法
算法的空间复杂度是指( )。
A. 算法程序的长度 B. 算法程序中的指令条数 C. 算法程序所占的存储空间 D. 算法执行过程中的所需要的存储空间
一、算法
4、算法效率衡量方法与准则 :
时间复杂度:Windows程序设计中,指执行时间的
长短。
空间复杂度:指存储空间的大小。
一、算法
5、算法与数据结构的关系:
思考:
数据处理的最小单位是( )。 A. 数据 B. 数据元素 C. 数据项 D. 数据结构
补充——数据项
数据项,是数据的最小单位,数据项定 义的内容包括:
item
名称、编号(I)、别名、简述 类型、长度 取值范围
数据项定义举例
数据项名:年级 别名: 取值及含义:〔F|M|J|S〕
F-freshmen,一年级 M-sophomore,二年级 J-junior,三年级 S-senior,四年级 注释:F,M,J,S可分别用1,2,3,4代替
设有六个比赛项目,规定每个选手至多可参加三个项
目,有五人报名参加比赛(如下表所示)。要求设计比
赛日程表,使得在尽可能短的时间内完成比赛。
姓名
项目1
项目2
项目3
丁一
跳高
跳远
100米
马二
标枪
铅球
张三
标枪
100米
200米
李四
铅球
200米
跳高
王五
跳远
200米
(1)设用如下六个不同的编码代表不同的项目:
跳高 跳远 标枪 铅球 100米 200米
不同联系
系主任 1
负责
班级 1
包含
1
N
系
学生
一对一联系 一对多联系
产品 M
组成 N
零件
多对多联系
习题:将下述表达式用图形的形式表示出来
(1)Data_Structure=(D,S),其中,
D={ 01,02,03,04,05 }
S={ }
集合结构
(2) S=(D, R) D={ a, b, c, d, e, f }
链式存储结构——借助指示元素存储地址的指针表示数据元素 之间的逻辑关系
索引存储结构——在存储结点的同时,还建立附加的索引表, 索引表中的每一项称为索引项,形式为:关键字,地址。 散列存储结构——根据结点的关键字直接计算出该结点的存 储地址。 说明:四种存储方法可结合起来对数据结构进行存储映像。
第2章 数据结构
R={ <a,e>, < b,c >, < c,a >, < e,f >, < f,d > }
解: 上述表达式可用图形表示为:
b
c
a
e
f
d
线性结构
(3) Data_Structure=(D,S),其中,
D={ 01,02,03,04,05 ,06,07 } S={(01,02),(01,03),(01,04),(02, 05),(02,06),(03,07) }
算法 数据结构概述
线性结构
栈和队列 数组 树 图
三、线性结构
线性表 1.线性表的定义
线性表是n(n>=0)个数据元素的有限序列,表中 各个元素具有相同的属性。
记做:(a1,a2,…….ai-1,ai,ai+1,…,an-1,an ) 其中,ai-1称为ai 的直接前趋元素,ai+1是ai的直 接后继元素 线性表的长度:表中的元素个数 n
Data_Structure =(D,R) 其中,D是数据元素的有限集,R是D上关系的有 限集。
二、数据结构概述
[例1] 线性数据结构 =(D,R) D = {1,2,3,4,5,6,7,8,9,10}
R = {<1,2>,<2,3>,<3,4>,<4,5>,<5, 6>,<6,7>,<7,8>,<8,9>,<9,10>}
三、线性结构
线性表的顺序表示和实现
顺序表的表示: 采用顺序存储结构存储的线性表
顺序存储定义:把逻辑上相邻的元素存储在物理 位置上相邻的存储单元中。
简言之:逻辑相邻,物理也相邻
顺序存储方法:用一组地址连续的存储单元依次 存放线性表的数据元素。
线性表顺序存储结构的特点
1、逻辑上相邻的物理元素,其物理位置上也相邻 2、若已知线性表中第1个元素的存储位置,则线性表中任 意一
<习题2> 数据在计算机存储器内表
示时,物理地址与逻辑地址相同并且是
连续的,称之为:
A. 存储结构
B. 逻辑结构
C. 顺序存储结构 D. 链式存储结构
【答案】C
三、线性结构
<习题3>一个向量第一个元素的存储 地址是100,每个元素的长度为2,则第 5个元素的地址是( )。 A. 110 B. 108 C. 100 D. 120
计算机科学家沃斯(N.Wirth)提出的: “算法+数据结构=程序”
计算机内的数值运算依靠方程式,而非数值 运算则要依靠数据结构。
同样的数据对象,用不同的数据结构来表示, 运算效率可能有明显的差异。
第2章 数据结构
算法
数据结构概述
线性结构 栈和队列 数组 树 图
二、数据结构概述
特性相同的数据元素构成的集合中,如果在数据 元素之间存在一种或多种特定的关系,则称之为数 据结构 。
【答案】B
三、线性结构
<习题4> 线性表若采用链式存储结 构时,要求内存中可用存储单元的地址:
A. 必须是连续的 B. 部分地址必须是连续的 C. 一定是不连续的 D. 连续或不连续都可以
出生年月 1989.12 1989.07 1991.02 1990.10 1991.01 1990.03 1991.01 1991.02 1989.12
三、线性结构
2. 线性表的顺序表示和实现 顺序表——线性表的顺序存储表示 顺序表,随机存取
三、线性结构
3. 线性表的链式表示和实现
单链表——线性表的链式存储表示 数据域(data)和指针域(next)
指针域 43 13 1
NULL 37 7 19 25
答:头指针是指向链表中第一 个结点的指针,因此关键是要 寻找第一个结点的地址。
H
31
ZHAO 7
称:头指针H的值是31
例:现有一个有5个元素的线性表 L={23,17,47,05, 31},若它以链式结构存储在下列100~119号地址空间
中,每个结点由数据(占2个字节)和指针(占2个字节) 组成,如下图所示。
结点:数据元素的存储映象
数据域 指针域
数据元素
直接后继位置
链表:n个结点链接成起来形成一个链表,即为线性表的
链式存储结构。
指针域为空
L
a1
a2
… ai-1
ai
… an ^
头结点 L
^
三、线性结构
数据结构是讨论非数值类问题的对 象描述、信息组织方法及其相应的操作
<例1.1 电话号码查询问题>
设有一个电话号码薄,有N个人的姓名和电话号 码。要求设计一个程序,按人名查找号码,若不存在 则给出不存在的信息。
下面叙述正确的是( )。 A. 算法的执行效率与数据的存储结构无关 B. 算法的空间复杂度是指算法程序中指令( 或语句)的条数 C. 算法的有穷性是指算法必须能在执行有限 个步骤之后终止 D. 以上3种描述都不对
二、数据结构概述
3、按数据结构在计算机内的存储方式来划分
顺序存储结构——借助元素在存储器的相对位置来表示数据元 素之间的逻辑关系。
用一组任意的存储单元存储线性表的元素
例:一个线性表的逻辑结构为: (ZHAO,QIAN,SUN,LI,ZHOU,WU,ZHENG,WANG), 其存储结构用单链表表示如下,请问其头指针的值是多少?
存储地址 1 7 13 19 25 31 37 43
数据域 LI
QIAN SUN WANG WU ZHAO ZHENG ZHOU
[例3] 树形结构 =(D,R) D = {a,b,c,d,e,f,g,h,i,j,k,l} R = {<a,b>,<a,c>,<a,d>,<b,e>,<b,f>, <b,g>,<c,h>,<c,i>,<c,j>,<d,k>,<d,l>}
二、数据结构概述
四类基本的数据结构 集合结构。各元素间没有直接的关联。 线性结构。该结构的数据元素之间存在着一对一的关 系。 树型结构。该结构的数据元素之间存在着一对多的关 系。 图形结构。该结构的数据元素之间存在着多对多的关 系,也称作网状结构。
2、线性表顺序存储结构的特点: