第9章 线性结构

合集下载

数据结构-线性结构

数据结构-线性结构

数据结构-线性结构数据结构线性结构在计算机科学的世界里,数据结构就像是搭建高楼大厦的基石,为程序的高效运行提供了坚实的基础。

而线性结构,则是众多数据结构中最为基础和常见的一类。

想象一下,你有一堆物品需要整理,你会怎么做?也许你会把它们排成一排,一个接一个,这就是线性结构的基本概念。

简单来说,线性结构中的数据元素按照顺序依次排列,就像排队的人们,每个元素都有唯一的前驱(除了第一个元素)和唯一的后继(除了最后一个元素)。

线性表是线性结构的典型代表。

它可以分为顺序表和链表两种实现方式。

顺序表就像是一排紧密相连的座位,每个座位上都有一个数据元素。

由于这些元素在内存中是连续存储的,所以读取数据非常方便快捷。

但如果要插入或删除元素,就可能需要移动大量的数据,就像在一排坐满人的座位中插入或移除一个人,后面的人都得跟着挪动位置,这会比较费时。

链表则不同,它更像是用链子把一个个数据元素串起来。

每个元素除了存储自身的数据,还包含指向下一个元素的指针。

这样,插入和删除元素就变得相对简单,只需要调整几个指针的指向就行了。

但要访问链表中的某个元素,就需要顺着指针一个一个地找过去,效率相对较低。

栈和队列也是常见的线性结构。

栈就像是一个只能从一端进出的筒子,先进去的元素会被压在下面,后进去的元素在上面,所以取出元素的时候,是后进去的先出来,这就是所谓的“后进先出”原则。

比如,浏览器的后退功能就可以用栈来实现,每次访问新的页面就把当前页面压入栈中,后退时就从栈顶取出之前的页面。

队列则像是排队买票的队伍,先到的先服务,即“先进先出”。

在操作系统的任务调度中,经常会用到队列,新的任务进入队列等待执行,先进入的任务先被处理。

线性结构在日常生活和计算机程序中都有着广泛的应用。

比如,我们在图书馆排队借书,这就是一个队列的例子;我们把要做的事情列成一个清单,这就是一个线性表。

在计算机程序中,线性结构更是无处不在。

当我们处理一组按照特定顺序排列的数据时,线性结构往往是首选。

数据结构之线性结构和非线性结构

数据结构之线性结构和非线性结构

数据结构之线性结构和⾮线性结构线性结构:⼀、概念1. 线性结构作为最常⽤的数据结构,其特点是数据元素之间存在⼀对⼀的线性关系。

2. 线性结构拥有两种不同的存储结构,即顺序存储结构和链式存储结构。

顺序存储的线性表称为顺序表,顺序表中的存储元素是连续的,链式存储的线性表称为链表,链表中的存储元素不⼀定是连续的,元素节点中存放数据元素以及相邻元素的地址信息。

3. 线性结构中存在两种操作受限的使⽤场景,即队列和栈。

栈的操作只能在线性表的⼀端进⾏,就是我们常说的先进后出(FILO),队列的插⼊操作在线性表的⼀端进⾏⽽其他操作在线性表的另⼀端进⾏,先进先出(FIFO),由于线性结构存在两种存储结构,因此队列和栈各存在两个实现⽅式。

⼆、部分实现1. 顺序表(顺序存储) 按照我们的习惯,存放东西时,⼀般是找⼀块空间,然后将需要存放的东西依次摆放,这就是顺序存储。

计算机中的顺序存储是指在内存中⽤⼀块地址连续的空间依次存放数据元素,⽤这种⽅式存储的线性表叫顺序表其特点是表中相邻的数据元素在内存中存储位置也相邻,如下图:1 // 倒置线性表2 public void Reverse()3 {4 T tmp = default(T);56 int len = GetLength() - 1;7 for (int i = 0; i <= len / 2; i++)8 {9 if (i.Equals(len - i))10 {11 break;12 }1314 tmp = data[i];15 data[i] = data[len - i];16 data[len - i] = tmp;17 }18 }2. 链表(链式存储) 假如我们现在要存放⼀些物品,但是没有⾜够⼤的空间将所有的物品⼀次性放下(电脑中使⽤链式存储不是因为内存不够先事先说明⼀下...,具体原因后续会说到),同时设定我们因为脑容量很⼩,为了节省空间,只能记住⼀件物品位置。

线性数据结构例题分析

线性数据结构例题分析

算法分析(朴素的算法): 对于每个大小为k的区间,都要计算最大值和最小值 时间复杂度:O(n * k)
位置 数值
1 1
2 3
3 -1 -1
4 -3 -3 -3
5 5 -3 5
6 3 -3 3
7 6 3 6
8 7 3 7
min
队列: 1 3
-1
观察队列中元素离开队列的情况:
1.元素Vi从队尾离开队列:
第i+1个元素以及它后面的元素依次前移。
其中,2、3操作中都可能需要移动大量元素。
总复杂度:O(n * m)。
Байду номын сангаас 5 1 2 2 2 7 1 2 3 3 6 31 23 14 5 7
1 3
链表: 元素数组:data[maxn]; 指针数组:next[maxn]; //元素data[i]的后继元素所在位置是next[i] 头结点指针:head 不要求逻辑上相邻的元素存储位置也相邻,不能随机存储。 5 1 2 2 2 7 1 2 3 3 1 3
算法分析: 维护三个数组q1,q2,q3; 取q2、q3队首元素的较小者k,加入q1,相应队列的队首位置后移, 2*k+1、3*k+1分别加入q2、q3;
直到q1中的元素个数达到n个。
实际上,q2、q3中的元素都来自于q1,只要维护two、three两个位置,
表示q2中的下一个数由q1[two]*2+1得到,q3中的下一个数由
j插在i的右侧:
ll[j] = i; rr[j] = rr[i];
ll[rr[i]] = j; rr[i] = j;
删除i: rr[ll[i]] = rr[i]; ll[rr[i]] = ll[i];

线性结构

线性结构
a1 a2 an NIL
空表时:L=NIL 空表时:
2.3 线性表的链式存储结构
struct node { elemtype data; struct node* next; }; node为一记录,它由data和next两项组成; 为一记录,它由 为一记录 和 两项组成; next为一指针,指向node记录类型; 为一指针,指向 记录类型; 为一指针 记录类型 为数据域; data为数据域; 为数据域
2.3 线性表的链式存储结构
2. 带头结点的线性链表 . 在线性链表的第一个元素结点之前附设一个结点 称头结点),它的数据域不存储任何信息, ),它的数据域不存储任何信息 (称头结点),它的数据域不存储任何信息,其指针 域存储第一个元素结点的存储位置。头指针L指向该 域存储第一个元素结点的存储位置。头指针 指向该 头结点。 头结点。 空表时: ↑ 空表时:L↑.next=NIL 带头结点链表的引入是为了使算法判空和处理一致。 带头结点链表的引入是为了使算法判空和处理一致
2.2 线性表的顺序存储结构
插入算法时间复杂度分析: 插入算法时间复杂度分析: 最坏情况是在第1 最坏情况是在第1个元素前插入 (i=1), (i=1), 此时,要后移n个元素,因此, 此时,要后移n个元素,因此,
T(n)=O(n) =O(DELETE( 2. 删除运算DELETE(L,i)
2.3 线性表的链式存储结构
初始化算法:
elemtype initlist(node * * h) { *h=(node *)malloc(sizeof(node)); (*h)->next=null; }
2.3 线性表的链式存储结构
3. 几种基本运算在单链表上的实现 . (1)GET(L,i)函数

数据结构自测题答案

数据结构自测题答案

第1章绪论二、填空题1. 4种基本结构是:集合、线性结构、树形结构、图状结构。

2. 树形结构中元素的关系是一对多,图形结构中元素的关系是多对多。

3. 顺序存储结构中数据元素的存储位置与其逻辑顺序是对应的。

4. 算法效率的度量方法有:事后统计方法和事前分析估算方法。

5. 好算法应达到的目标:正确性、可读性、健壮性、执行时间短、存储量低。

6. 抽象数据类型可细分为3种:原子类型、固定聚合类型和可变聚合类型。

7. 抽象数据类型的定义包括:数据对象的定义、数据关系的定义、基本操作的定义。

三、判断题五、应用题1. 按增长率从小到大的顺序排列下列各函数:(2/3)n ,nlog,n ,n2 ,n!22. 写出以下各函数的功能,并求出其时间复杂度。

(1) 功能是判断n是否为素数,时间复杂度为O(√n ) 。

(2) 功能是计算1!+2!+…+n! ,时间复杂度为O(n ) 。

(3) 功能是计算1!+2!+…+n! ,时间复杂度为O(n2 ) 。

六、算法题1. 编写算法计算1!+2!+…+n!,并使算法的时间复杂度为O(n)。

算法思想:用循环实现阶乘的累加求和,注意在求n!时,使用前一次循环中已经求出的(n-1)!的结果。

double factorial(int n){ int i;double p=1, sum=0;for( i=1; i<=n; i++){ p=p*i;sum=sum+p;}return(sum);}2. 编写算法计算2i (i=0,1,2,…,n),并将计算结果存入数组a中,设计算机中允许的最大整数值为MAXINT,则当2k >MAXINT(0≤k≤n)时,应进行出错处理。

算法思想:先判断n的取值是否合法,若非法则直接退出程序,若n 合法则继续计算2i,在计算2i时,需要判断2i的值是否大于MAXINT/2,这个条件其实就是判断2i+1的值是否大于MAXINT#define arrsize 100#define MAXINT 65535void calculate(int a[ ], int n){ int i;if(n<=0 || n>arrsize){ printf("n error!\n");exit(-1);}a[0]=1;printf("a[0]=%d\n", a[0]);for(i=1; i<n; i++){ a[i]=a[i-1]*2;printf("a[%d]=%d\n", i, a[i]);if( a[i]>MAXINT/2 ){ printf(“i=%d, ERROR!\n”, i+1);break;}}}第2章线性结构一、选择题二、填空题1. 需向后移动__n-i+1____个元素。

线性结构PPT课件

线性结构PPT课件
线性结构的优点
线性结构简单易懂,易于实现和操作,具有较好的空间和 时间效率。
线性结构的应用
线性结构广泛应用于各种领域,如计算机科学、数学、物 理学、工程学等,用于解决各种问题,如排序、查找、数 据压缩等。
对未来线性结构应用的展望
线性结构的发展趋势
随着计算机科学和技术的不断发展,线性结构的应用场景和需求也在不断扩大。未来,线 性结构可能会与其他数据结构或算法结合,形成更加高效和实用的解决方案。
组织结构图
总结词
组织结构图是一种表示组织内部结构和关系的图形化工具,通常用于展示公司的部门和职位。
详细描述
组织结构图通过图形和文字展示了组织内部的层次结构和职位关系,有助于理解公司各部门之间的职责和协作方 式。在PPT课件中,组织结构图可以用于介绍公司的组织架构、部门职责和协作方式,帮助观众更好地了解公司 的运营和管理。
技巧
选择适当的反馈机制,如问卷调查、互动问答等, 以获取观众的真实反馈。
2023
PART 03
线性结构的实现方式
REPORTING
流程图
总结词
流程图是一种用图形表示工作流程或程序的工具,通过箭头和节点来表示步骤和 决策。
详细描述
流程图通常用于表示一系列按特定顺序执行的任务或决策,通过箭头连接各个步 骤,清晰地展示了整个流程的逻辑关系。在PPT课件中,流程图可以用于展示操 作流程、业务流程、算法流程等,帮助观众更好地理解整个过程。
如何扬长避短
灵活调整顺序
在制作PPT时,可以预 先设计多种线性结构, 根据观众的需求和反馈 选择合适的结构。
增加交互性
在PPT中加入交互元素, 如提问、投票等,提高 观众的参与度,增强互 动效果。

线性结构——精选推荐

线性结构——精选推荐

线性结构概述 线性结构是包含n个相同类型元素的优先序列。

在线性结构中,数据元素的前后关系是“⼀对⼀”的,即线性关系。

对于线性结构L=(a1, a2, ..., a n): a.当1≤i<n且i<j≤n时,a j是a i的后继。

a i+1是a i的直接后继。

b.当1<i≤n且1≤j<i时,a j是a i的前驱。

a i-1是a i的直接前驱。

c.a1是头元素。

头元素没有前驱。

d.a n是尾元素。

尾元素没有后继。

线性结构的存储表⽰主要有两种: 顺序存储:借助数据元素在存储空间中的相对位置来表⽰元素之间的逻辑关系。

采⽤顺序存储的线性结构通常使⽤数组来存储相同类型的元素。

链式存储:借助指⽰数据元素存储地址的指针来表⽰元素之间的逻辑关系。

采⽤链式存储的线性结构通常使⽤结点来存储元素,该结点中使⽤指针变量指向其直接前驱或直接后继的结点。

典型的线性结构有栈、队列和线性表等。

栈 如果只允许在序列末端进⾏操作,这种线性结构称为栈。

栈是⼀种后进先出的线性结构。

对于栈来说,尾元素所在端称为栈顶,头元素所在端称为栈底。

不含任何元素的栈称为空栈。

栈的插⼊操作是将新元素压⼊栈顶,称为⼊栈;栈的删除操作是将栈顶元素删除,称为出栈。

可以将栈的操作定义成如下接⼝:1public interface Stack<E> {23/**4 * 销毁栈5*/6void destroyStack();78/**9 * 判断栈是否为空10 * @return若空则返回true,否则返回false11*/12boolean stackEmpty();1314/**15 * 清空栈16*/17void clearStack();1819/**20 * 元素压⼊栈21 * @param e22*/23void push(E e);2425/**26 * 栈顶元素出栈27 * @return28*/29 E pop();3031/**32 * 取栈顶元素33 * @return34*/35 E getTop();3637/**38 * 栈内元素个数39 * @return40*/41int stackLength();4243 }Stack 按存储结构分类,栈可以分为顺序栈和链栈。

第二讲 线性结构

第二讲 线性结构
2)线性结构:元素之间存在着一对一的 关系。依次排列形成一条“锁链”。 3)树形结构:数据元素之间存在着一对 多的关系,具有分支、层次特性。 4)图状结构:数据元素之间存在多对多 的关系,元素之间互相缠绕,具有分支、 层次特性。
数据结构的基本概念 一个数据结构应包含两方面的信息 ①表示数据元素的信息 ②表示各数据元素之间的前后件关系 例如:
(数值或非数值)
元素有限集 关系有限集
例如:铺设煤气管道问题
A
32.8 18.2 12.1 44.6 8.7
I
A
32.8 12.1
8.7
I
B
H
52.5 56.4 10.5 79.2
B C
21.3
H
79.2 10.5
C
21.3 41.1 67.3
G
85.6
G
F
41.1
E
98.7
E
D
F
D
(b) 铺设煤气管道设计图
6.Delete(L,i):删除线性表L的第i个元素。
7.Empty(L):若线性表L为空返回True,否则返回False。 8.其他:如线性表的合并、复制、分解等。
例:在长度为n的线性表L的第i个位置上插入一个新元素x
元素 11 14 20 25 28 31 43 78 插入前: 序号 1 2 3 4 5 6 7 8
1. 有穷性 2. 确定性
算法特性
3. 可行性
4. 有输入 5. 有输出
算法
1. 程序设计语言描述的算法 算法分类
2. 伪语言算法 3. 非形式算法(自然语言算法) 1. 算法选用的策略
算法执行时间相关因素
2. 问题的规模 3. 编写程序的语言 4. 编译程序产生的机器代码的质量 5. 计算机执行指令的速度

线性结构和非线性结构讲解

线性结构和非线性结构讲解
BinaryTree();
▪ BinaryTree.EMPTY是一个哑元结点,当树 为空时,可以调用其中的方法。
构造方法1:构造空二叉树
private BinaryTree() {
val = null; parent = null; left = right = this; }
this
parent ^ val ^
数据的逻辑结构可描述为: Group=(D,R)
A
BC D
EF
GH
IJ
有限个数据元素的集合 这些数据元素间关系的集合
▪ D={A,B,C,D,E,F,G,H,I,J}
▪ R={(A,B),(A,C),(A,D),(B,E),(B,F),(D,G), (D,H),(F,I),(F,J)}
A
树的定义1
▪ 树中度不为零的结点称为分枝结点(或非 终端结点)。除根结点外的分枝结点统称 为内部结点。
A
树的相关术语
BC D
EF
GH
IJ
结点的子树的根称为该结点的孩子结点,相应地, 该结点称为孩子的双亲结点。
✓ 如得点把果结序路存 点 列 径K是 所在i是树 经树结中 过中点从 的的K一结边i+(个点1即的K结连双1点到接亲序结两结列点个点KK结(1j1的,点≤一iK≤的2j条-,线1)路.,段..径,则)的。K称数我j,该目们使结 称作这条路径的长度。
▪ 二叉树(BinaryTree)是n(n≥0)个结点的有 限集合,它或者是空集(n=0),或者由一个根结 点及两棵互不相交的、分别称作这个根的左子 树和右子树的二叉树组成。
A
A
A
A
B
B
(a)空二叉树 (b)根和空 (c)根和非 的左右子树 空左子树, 空的右子树

数据结构,清华大学出版社,严蔚敏吴伟民编著

数据结构,清华大学出版社,严蔚敏吴伟民编著

第一章绪论1、数据结构是计算机中存储、组织数据的方式。

精心选择的数据结构可以带来最优效率的算法。

2、程序设计= 算法+数据结构3、解决问题方法的效率:●跟数据的组织方式有关●跟空间的利用效率有关●跟算法的巧妙程度有关4、数据:所有能输入到计算机中,且被计算机处理的符号的集合,是计算机操作对象的总称;是计算机处理的信息的某种特定的符号表示形式。

5、数据元素:数据中的一个“个体”,数据结构中讨论的基本单位。

相当于“记录”,在计算机程序中通常作为一个整体考虑和处理。

6、数据项: 相当于记录的“域”, 是数据的不可分割的最小单位,如学号。

数据元素是数据项的集合。

7、数据对象:性质相同的数据元素的集合.例如: 所有运动员的记录集合8、数据结构:是相互间存在某种关系的数据元素集合。

9、数据结构是带结构的数据元素的集合。

10、不同的关系构成不同的结构。

11、次序关系:{<ai,ai+1>|i=1,2,3,4,5,6}12、对每种数据结构,主要讨论如下两方面的问题:1)数据的逻辑结构,数据结构的基本操作;2)数据的存储结构,数据结构基本操作的实现;13、数据的逻辑结构:数据之间的结构关系,是具体关系的抽象。

数据结构的基本操作:指对数据结构的加工处理。

14、数据的存储结构(物理结构):数据结构在计算机内存中的表示。

数据结构基本操作的实现:基本操作在计算机上的实现(方法)。

15、数据结构的有关概念16、数据元素的4类的基本结构:○1集合;○2线性结构:结构中数据元素之间存在一对一的关系;○3树形结构:结构中数据元素之间存在一对多的关系;○4图状结构或网状结构:结构中数据元素之间存在多对多的关系。

17、C语言的优点:C语言可以直接操作内存。

18、每个节点都由两部分组成:数据域和指针域。

19、链接存储结构特点:●比顺序存储结构的存储密度小(每个节点都由数据域和指针域组成)。

●逻辑上相邻的节点物理上不必相邻。

基本数据结构-线性结构

基本数据结构-线性结构

西安电子科技大学 - Xidian University
move a onto b

先将a和b上的其他木块移回到它们的初始位置,然 后将木块a摞在木块b上.
2
Example: move 3 onto 6
4 7 0 1 3 5 6 8 9 0 1 2 3 4 5 6 7 8 9
3 0 1 2 3 4 5 6 7 8 9
head

a1 头结点
带头结点的单向链表

ai-1 ai ai+1 an-1
a2
∧ an
西安电子科技大学 - Xidian University
单链表中插入元素

将元素ai所在结点的地址赋给元素e结点的指针域: S->next = P->next;

修改元素ai-1所在结点指针域的值: P->next = S;
∧ a1
a2

ai

an-1
an ∧
(a) 双向链表
a1
a2

an-1
an
tail
(b) 循环单链表
西安电子科技大学 - Xidian University
单链表的插入和删除

链式存储:任意存储单元存储元素 链表结点包括数据域和指针域 插入或删除一个元素,只需修改结点指针域 访问任一元素必须从链表头指针开始
a1 a2
d
例如:由n个元素构成的一维数组a 由下标i确定数组元素a[i],其位置关 系为(在C/C++/Java中,下标从0开始): Loc(a[i])=Loc(a[1])+(i-1)*d (1≤i≤n)
ai+1

数据结构知识点归纳

数据结构知识点归纳

一、数据结构的章节结构及重点构成数据结构学科的章节划分基本上为:概论,线性表,栈和队列,串,多维数组和广义表,树和二叉树,图,查找,内排,外排,文件,动态存储分配。

对于绝大多数的学校而言,“外排,文件,动态存储分配”三章基本上是不考的,在大多数高校的计算机本科教学过程中,这三章也是基本上不作讲授的。

数据结构的章节比重大致为:1.概论:概念,时间复杂度。

2.线性表:基础章节,必考内容之一。

概念,算法设计题。

3.栈和队列:基本概念。

4.串:基本概念。

5.多维数组及广义表: 基本概念。

6.树和二叉树:重点难点章节,各校必考章节。

概念,问答,算法设计题。

7.图:重点难点章节,各校必考章节。

概念,问答,算法设计题。

8.查找:重点难点章节,概念,问答。

9.排序:重点难点章节,问答各种排序算法的排序过程二、各章节的主要内容:第一章概述主要内容:本章主要起到总领作用,为读者进行数据结构的学习进行了一些先期铺垫。

大家主要注意以下几点: (1)数据结构的基本概念。

(数据;数据元素;数据项;数据结构;数据的逻辑结构:线性和非线性,具体分为集合、线性结构、树形结构和图状结构;数据的存储结构:顺序存储和链式存储;运算)(2)算法的度量:时间效率和空间效率,分别用时间复杂度和空间复杂度度量,掌握时间复杂度的度量方法量方法。

(大O表示法)参考题目:填空题:1、数据结构是相互之间存在一种或多种特定关系的数据元素的集合,它包括三方面的内容,分别是数据的逻辑结构、()和()。

2、数据结构按逻辑结构可分为两大类,它们分别是()和()3. 数据的物理结构主要包括()和()两种情况。

4.线性表,栈,队列和二叉树四种数据结构中()是非线性结构,()是线性结构。

5、线性结构中元素之间存在()关系,树形结构中元素之间存在()关系,图形结构中元素之间存在()关系。

6、程序段的时间复杂度是_______。

for(i=1;i<=n;i++){ k++;for(j=1;j<=n;j++)x=x+k;}7.下列算法的时间复杂度是_____。

C++ 第9章 线性结构

C++   第9章 线性结构

return true;
}
9.2 线性表
顺序表类的Delete()函数
✿ 函数的功能是:返回下标为i的元素至x,并删除之 。
bool SeqList::Delete(int i,char &x){
if(Find(i,x)){ for(int k=i;k<length-1;k++)
element[k]=element[k+1];
length--; return true; } else return false; }
9.2 线性表
顺序表类的output()函数
✿ 函数的功能是:输出表中所有元素的值 。 void SeqList::output(ostream &out)const{ for(int i=0;i<length;i++)
输出 一个算法应该有一个或多个输出。
算法
3. 算法的描述
自然语言描述、程序设计语言描述、流程图描述等。 以下采用C++语言作为描述算法的工具
4. 算法的评价
1)算法的时间复杂度:根据算法编写出的程序在计算机上
运行时所消耗的时间。 2)算法的空间复杂度:根据算法编写出的程序在计算机上 运行时所需要的存储空间的大小。
✿ 单击超链接查看以下函数的实现:构造函数
Find()
Search()
Insert()
Delete()
output()
重载“<<”的函数
继续
9.2 线性表
顺序表类的构造函数
✿ 函数的功能是:建立一个空表。 SeqList::SeqList(int m){ element=new char[m]; Maxsize=m; length=0; }

第三讲 线性结构

第三讲 线性结构

线性表的删除
①删除运算的逻辑描述 指在表的第i( 指在表的第 (1≤i≤n+1)个位置上,删除一个 )个位置上, 结点,使长度为n的线性表: (a1,…,ai-1, 结点,使长度为 的线性表: , 的线性表 ai,…an)变成长度为 的线性表 1,…,ai-1, 变成长度为n-1的线性表 变成长度为 的线性表(a , ai+1,…an). ②顺序表删除操作过程 【顺序表的删除 】 ③具体算法描述
例: 一个整数序列: 一个整数序列: (243,33,687,6,-56,2,, , , , , , 987,0,345) , , ) 一周的七天: 一周的七天: (SUN,MON,TUE,WED,THU,FRI ,SAT) )
一张学生成绩表: 一张学生成绩表:
学号 20090001 20090002 20090003 20090004 ······ 姓名 丁一 马二 张三 李四 ······ 数学 87 66 76 87 ······ 物理 55 55 89 55 ······ 电路 67 78 66 67 ······
listtype p,*l; int n=5,i,x,j; l=&p; printf("请输入顺序表的值(5个)"); creat_list(l,n); output_list(l); printf("\n请输入要插入元素的位置:"); scanf("%d",&i); printf("\n请输入插入元素的值:"); scanf("%d",&x); insert_list(l,i,x); output_list(l); printf("\n请输入要删除元素的位置:"); scanf("%d",&j); delete_list(l,j); output_list(l);

线性结构在非线性结构中的应用

线性结构在非线性结构中的应用

线性结构在非线性结构中的应用摘要:数据结构课程中数据的逻辑结构分为线性结构和非线性结构。

数据结构中线性结构指的是数据元素之间存在着“一对一”的线性关系的数据结构。

相对应于线性结构,非线性结构的逻辑特征是一个结点元素可能对应多个直接前驱和多个后驱。

关键字:线性表,树,图1.引言数据元素相互之间的关系称为结构。

有四类基本结构:集合、线性结构、树形结构、图状结构(网状结构)。

树形结构和图形结构全称为非线性结构。

集合结构中的数据元素除了同属于一种类型外,别无其它关系。

线性结构中元素之间存在一对一关系,树形结构中元素之间存在一对多关系,图形结构中元素之间存在多对多关系。

在图形结构中每个结点的前驱结点数和后续结点数可以任意多个。

2.数据结构分类数据结构中,逻辑上(逻辑结构:数据元素之间的逻辑关系)可以把数据结构分成线性结构和非线性结构。

线性结构的顺序存储结构是一种随机存取的存储结构,线性表的链式存储结构是一种顺序存取的存储结构。

线性表若采用链式存储表示时所有结点之间的存储单元地址可连续可不连续。

逻辑结构与数据元素本身的形式、内容、相对位置、所含结点个数都无关。

数据结构的形式定义为:数据结构是一个二元组:Data-Structure=(D,S) 其中:D是数据元素的有限集,S是D上关系的有限集。

数据结构不同于数据类型,也不同于数据对象,它不仅要描述数据类型的数据对象,而且要描述数据对象各元素之间的相互关系。

数据类型是一个值的集合和定义在这个值集上的一组操作的总称。

不同的数据结构其操作集不同,但下列操作必不可缺:1,结构的生成;2.结构的销毁;3,在结构中查找满足规定条件的数据元素;4,在结构中插入新的数据元素;5,删除结构中已经存在的数据元素;6,遍历。

线性结构是一种最简单而且最常用的数据结构,线性结构的实例,在我们的现实生活中经常遇见,例如排队买票的队列、图书卡片目录的编排等,而线性表则是一种点型的线性结构。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第九章线性结构2. 线性表3. 栈5. 数组9.1 数据结构概述概念和术语数据结构:数据对象中数据元素之间的结构关系数据:计算机能够识别、存储和处理的符号的集合。

数据元素:数据的基本单位,由一个或多个数据项组成。

又称为结点、顶点、记录、表目等。

数据项:具有独立含义的数据的最小单位,又称为域、字段。

数据对象:具有相同性质的数据元素集合。

9.1 数据结构概述例:职工情况表职工情况表是一种数据结构,每个职工情况为一数据元素,职工的每项基本信息为一个数据项,部门的所有职工构成一个数据对象。

9.1 数据结构概述9.1 数据结构概述9.1 数据结构概述例:排队问题Customer(λ)Queue (B-1)Server (μ)逻辑结构:排队方式,数据间的逻辑关系。

存储结构:计算机中队列的存储方法。

运算:排队过程中各种操作的实现方法。

数据结构研究的主要内容:数据的逻辑结构、数据的存储结构、数据的运算数据结构包含内容之一:数据的逻辑结构数据的逻辑结构:例:职工情况表表尾元素表头元素数据的逻辑结构只抽象地反映出数据元素之间的逻辑关系,它与数据的存储无关,是独立于计算机的。

9.1 数据结构概述每个元素最多有一个直接前驱和一个直接后继,即为线性结构。

数据逻辑结构的分类:1)集合结构:在集合结构中,数据元素之间的关系是“属于同一集合”,集合是元素关系极为松散的一种结构。

例:2)线性结构:除第一个和最后一个元素外,其他每个元素都仅有一个直接前驱元素和一个直接后继元素。

例:9.1 数据结构概述数据逻辑结构的分类:3)树形结构:每个元素若有直接前驱元素,只能有一个,但可以有多个直接后继元素。

例:4)图形结构:每个元素都可以有多个直接前驱元素和多个直接后继元素。

例:9.1 数据结构概述数据结构包含内容之二:数据的存储结构⏹数据的存储结构:数据的存储结构是逻辑结构在计算机内存储器中的实现。

⏹四种基本的存储映象方式:1)顺序方式2)链接方式3)索引方式4)散列方式继续9.1 数据结构概述将数据元素按照某种顺序存放到一片连续的存储单元内,数据元素之间的逻辑关系是通过它们在存储器中的相对位置体现的。

例:英语字母表的顺序存储。

ZY X ……C B A 顺序存储方式的优点是:①元素之间的逻辑关系通过它们在存储位置体现,因此存储密度高。

②可以快速地确定出任意元素的存储位置,从而能够实现对元素的 随机、快速访问。

顺序存储方式的缺点是:①插入或删除元素时,可能会引起大量元素的移动,实现效率低。

②存储空间需预先分配,如果定的太大会造成空间的浪费,定的太 小又可能会发生溢出。

9.1 数据结构概述顺序方式逻辑上相邻的元素在物理位置上未必相邻,元素间的逻辑关系由附加的指针域表示。

第一个职工情况第二个职工情况最后一个职工情况…head∧例:职工情况链表(链接方式存储的线性结构)链接存储方式的优点是:①元素之间的逻辑关系通过结点的指针域指出,因此,在插入和删除元 素时,不会引起大量元素的移动。

②可动态申请和释放结点空间,所使用的存储空间大小与实际存储的数 据元素的数量保持一致。

链接存储方式的缺点是:①不能实现对数据元素的随机访问。

②每个结点中的指针域会耗费一些存储空间。

9.1 数据结构概述链接方式索引方式的优点是:检索速度快。

索引方式的缺点是:①增加的索引表会占用较多的存储空间;②在插入和删除数据元素时需要修改索引表,因而会花费更多的时间。

索引表数据9.1 数据结构概述关键字地址索引方式关键字:是指能够惟一标识一个数据元素的一个或多个数据项。

散列方式数据元素的存储位置是用它的关键字计算出来的。

散列方式存储的数据结构又称为哈希表、杂凑表等。

散列方式的优点是:检索、增加和删除元素的操作都很快。

散列方式的缺点是:如果使用了不好的散列函数,可能会出现存储单元的冲突,为解决冲突需要额外的时间和空间开销。

9.1 数据结构概述数据结构包含内容之三:数据的运算⏹数据的运算:对数据对象中的数据所进行的加工和处理。

⏹常用的数据运算:插入、删除、查找、排序、更新等。

⏹数据运算的特点:数据的运算定义在逻辑结构之上,实现在存储结构之上。

数据运算的实现用算法描述。

9.1 数据结构概述算法1.什么是算法算法是对解决问题方法的精确描述,是用来完成某个特定任务的有限步骤序列。

例如:用辗转相除法求两个正整数M和N的最大公因数的算法为:•step1: 求M除以N的余数R;•step2: 若R=0,算法结束,即N为M和N的最大公因数•Step3: 否则,置M←N,N←R,返回step19.1 数据结构概述算法2. 算法的基本特征有穷性确定性可行性输入输出算法3. 算法的描述自然语言描述、程序设计语言描述、流程图描述等。

以下采用C++语言作为描述算法的工具4. 算法的评价1)算法的时间复杂度:根据算法编写出的程序在计算机上运行时所消耗的时间。

2)算法的空间复杂度:根据算法编写出的程序在计算机上运行时所需要的存储空间的大小。

9.1 数据结构概述算法算法时间复杂度的度量一般把程序运行时语句的执行次数(不包括说明语句)作为估算程序执行时间的量度。

例:估算以下函数的时间复杂度。

int min( int a[ ], int n ) {int k,i;k=0; //执行1 次for(i=1; i<n; i++) //执行n 次if(a[i]<a[k]) k=i;//执行n-1次return k; //执行1 次}语句执行频度:f(n)=2n+1忽略低次项,记为:f(n)=O(n)它与n成正比算法⏹常见的算法时间复杂度O(1)、O(log2n)、O(n)、O(nlog2n)、O(n2)、O(n3) 、O(2n)⏹时间函数的增长率9.1 数据结构概述线性表线性表是由n(n≥0)个相同类型的数据元素e 0、e 1、…、e n-1 组成的有限序列。

可抽象的表示为:(e 0,e 1,……,e i-1,e i ,e i+1,……e n-1)开始元素中间元素终端元素建空表、求表长、查找、插入、删除、排序等。

9.2 线性表1.线性表的定义线性表中元素的个数称为表的长度。

长度为0的表为空表。

元素在表中的序号称做元素的下标。

2. 线性表常用的基本运算线性表的顺序存储结构(顺序表)⏹以顺序方式存储的线性表称为顺序表。

⏹可以用一维数组实现顺序表。

例:用C++的一维数组实现对英文字母表的顺序存储。

char table[26];或:char *table=new char[26];讨论:应该把存储线性表的一维数组和实现顺序表各种运算的函数封装在一起,即定义顺序表类。

9.2 线性表字符型顺序表类定义#include <iostream.h>class SeqList{private:int Maxsize; //线性表的容量int length; //线性表的长度char *element;public: SeqList(int m=10); //构造函数 ~SeqList(){delete []element;} //析构函数 bool IsEmpty(){return length==0;} //判表是否为空 int Length(){return length;} //返回表长 bool Find(int i char &x); //把下标为i 的元继续 单击超链接查看以下函数的实现:构造函数Find() Search() Insert()Delete() output() 重载“<<”的函数9.2 线性表顺序表类的构造函数函数的功能是:建立一个空表。

9.2 线性表顺序表类的Find()函数函数的功能是:把下标为i的元素取至x。

bool SeqList::Find(int i,char&x){if(i<0||i>length-1) return false;x=element[i];return true;}9.2 线性表顺序表类的Search()函数函数的功能是:返回x在表中的下标。

int SeqList::Search(const char &x){for(int i=0;i<length;i++)if(element[i]==x) return i;return -1;}9.2 线性表顺序表类的Insert()函数bool SeqList::Insert(int i,const char &x){if(i<0||i>length) return false; //下标越界if(length==Maxsize) return false; //表已满for(int k=length-1;k>=i;k--)element[k+1]=element[k];element[i]=x;length++;return true;}9.2 线性表顺序表类的Delete()函数函数的功能是:返回下标为i的元素至x,并删除之。

bool SeqList::Delete(int i,char&x){if(Find(i,x)){for(int k=i;k<length-1;k++)element[k]=element[k+1];length--;return true;}elsereturn false;}9.2 线性表顺序表类的output()函数函数的功能是:输出表中所有元素的值。

void SeqList::output(ostream&out)const{ for(int i=0;i<length;i++)out<<element[i]<<" ";}9.2 线性表顺序表类的友元函数函数的功能是:为方便输出,重载“<<”。

ostream& operator<<(ostream&out,const SeqList&x){x.output(out);return out;}9.2 线性表讨论:顺序表的优缺点⏹⏹⏹顺序表适用于表长已知且插入和删除操作不频繁的线性表9.2 线性表例:将一串字符存入顺序表,删除其中所有的数字字符。

#include "seqlist.h"void main(){char str[]="1C++ 2FORTRAN 3PASCAL 4BASIC SeqList L(100); //建空表int i;for(i=0;str[i]!=0;i++)if(L.Insert(i,str[i])==false)//向表中放数据{ cout<<”插入异常\n”;break;}cout<<L<<endl; //利用重载的插入运算符输出表中元素i=0;char x ;while(i<L.Length()){程序的输出结果是:1C++ 2FORTRAN 3PASCAL 4BASICC++ FORTRAN PASCAL BASIC9.2 线性表线性表的链接存储结构(链表)⏹以链接方式存储的线性表称为链表。

相关文档
最新文档