02331数据结构-06图
全国自学考试数据结构试题02331试题及答案
全国2011年1月自学考试数据结构试题课程代码:02331一、单项选择题(本大题共15小题,每小题2分,共30分)在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。
错选、多选或未选均无分。
1.下列选项中与数据存储结构无关的术语是( D )P3A.顺序表B.链表C.链队列D.栈2.将两个各有n个元素的有序表归并成一个有序表,最少的比较次数是( B )A.n-1B.nC.2n-1D.2n3.已知循环队列的存储空间大小为m,队头指针front指向队头元素,队尾指针rear指向队尾元素的下一个位置,则向队列中插入新元素时,修改指针的操作是( D )A.rear=(rear-1)%m;B.front=(front+1)%m;C.front=(front-1)%m;D.rear=(rear+1)%m;4.递归实现或函数调用时,处理参数及返回地址,应采用的数据结构是( A )A.堆栈B.多维数组C.队列D.线性表5.设有两个串p和q,其中q是p的子串,则求q在p中首次出现位置的算法称为( C )A.求子串B.串联接C.串匹配D.求串长6.对于广义表A,若head(A)等于tail(A),则表A为( B )P67A.( )B.(( ))C.(( ),( ))D.(( ),( ),( ))7.若一棵具有n(n>0)个结点的二叉树的先序序列与后序序列正好相反,则该二叉树一定是( C )A.结点均无左孩子的二叉树B.结点均无右孩子的二叉树C.高度为n的二叉树D.存在度为2的结点的二叉树8.若一棵二叉树中度为l的结点个数是3,度为2的结点个数是4,则该二叉树叶子结点的个数是( B )P73A.4B.5C.7D.89.下列叙述中错误的是( C )A.图的遍历是从给定的源点出发对每一个顶点访问且仅访问一次P107B.图的遍历可以采用深度优先遍历和广度优先遍历第 1 页C.图的广度优先遍历只适用于无向图D.图的深度优先遍历是一个递归过程10.已知有向图G=(V,E),其中V={V1,V2,V3,V4},E={<V1,V2>,<V1,V3>,<V2,V3>,<V2,V4>,<V3,V4>},图G的拓扑序列是()A.V1,V2,V3,V4B.V1,V3,V2,V4C.V1,V3,V4,V2D.V1,V2,V4,V311.平均时间复杂度为O(n log n)的稳定排序算法是( C )P136 P164 8-2A.快速排序B.堆排序C.归并排序D.冒泡排序12.已知关键字序列为(51,22,83,46,75,18,68,30),对其进行快速排序,第一趟划分完成后的关键字序列是( D )A.(18,22,30,46,51,68,75,83)B.(30,18,22,46,51,75,83,68)C.(46,30,22,18,51,75,68,83)D.(30,22,18,46,51,75,68,83)13.某索引顺序表共有元素395个,平均分成5块。
02331 数据结构资料
02331数据结构第一章概论1.数据是信息的载体。
2.数据元素是数据的基本单位。
3.一个数据元素可以由若干个数据项组成。
4.数据结构指的是数据之间的相互关系,即数据的组织形式。
5.数据结构一般包括以下三方面内容:数据的逻辑结构、数据的存储结构、数据的运算①数据元素之间的逻辑关系,也称数据的逻辑结构,数据的逻辑结构是从逻辑关系上描述数据,与数据的存储无关,是独立于计算机的。
②数据元素及其关系在计算机存储器内的表示,称为数据的存储结构。
数据的存储结构是逻辑结构用计算机语言的实现,它依赖于计算机语言。
③数据的运算,即对数据施加的操作。
最常用的检索、插入、删除、更新、排序等。
6.数据的逻辑结构分类:线性结构和非线性结构①线性结构:若结构是非空集,则有且仅有一个开始结点和一个终端结点,并且所有结点都最多只有一个直接前趋和一个直接后继。
线性表是一个典型的线性结构。
栈、队列、串等都是线性结构。
②非线性结构:一个结点可能有多个直接前趋和直接后继。
数组、广义表、树和图等数据结构都是非线性结构。
7.数据的四种基本存储方法:顺序存储方法、链接存储方法、索引存储方法、散列存储方法(1)顺序存储方法:该方法把逻辑上相邻的结点存储在物理位置上相邻的存储单元里,结点间的逻辑关系由存储单元的邻接关系来体现。
通常借助程序语言的数组描述。
(2)链接存储方法:该方法不要求逻辑上相邻的结点在物理位置上亦相邻,结点间的逻辑关系由附加的指针字段表示。
通常借助于程序语言的指针类型描述。
(3)索引存储方法:该方法通常在储存结点信息的同时,还建立附加的索引表。
索引表由若干索引项组成。
若每个结点在索引表中都有一个索引项,则该索引表称之为稠密索引,稠密索引中索引项的地址指示结点所在的存储位置。
若一组结点在索引表中只对应一个索引项,则该索引表称为稀疏索引稀疏索引中索引项的地址指示一组结点的起始存储位置。
索引项的一般形式是:(关键字、地址)关键字是能唯一标识一个结点的那些数据项。
02331自考数据结构 第二章 线性表
return ;
}
if ( L -> length >= ListSize ){
printf (" overflow ");
return ;
}
for ( j - L -> length -1; j >= i -1; j --)
L ->data [ j +1]= L -> data [ j ]; //从最后一个元素开始逐一后移
线性表的基本运算
上述运算仅仅是线性表的基本运算,不是其全部运 算。因为对不同问题的线性表,所需要的运算可能不同。 因此,对于实际问题中涉及其他更为复杂的运算,可用 基本运算的组合来实现。
线性表的基本运算
【例2.1】假设有两个线性表 LA 和 LB 分别表示两个 集合 A 和 B ,现要求一个新集合 A = A∪B 。
线性表的逻辑定义
数据元素“一个接一个的排列”的关系叫做 线性关系,线性关系的特点是“一对一”,在计 算机领域用“线性表”来描述这种关系。另外, 在一个线性表中数据元素的类型是相同的,或者 说线性表是由同一类型的数据元素构成的,如学 生情况信息表是一个线性表,表中数据元素的类 型为学生类型;一个字符串也是一个线性表:表 中数据元素的类型为字符型等等。
,
a2
i
,…,
ai-1
,
a.aii++1.1 , .…,
an
)
an
线性表n的-1逻辑结an构和存储结构都发…生了相应的变化, 与插入运算相反,插…入是向后移动元素,而删除运算则
是向前移M动AX元-1 素,除非i=n 时直接删除终端元素,不需移
动元素。
删除前
删除后
2004年10月全国自考数据结构(02331)试题及答案
2004年10月全国自考数据结构试题课程代码:(02331)一、单项选择题(本大题共15小题,每小题2分,共30分)1.下列各式中,按增长率由小至大的顺序正确排列的是(D)A.n,n!,2n ,n3/2B.n3/2,2n,n logn,2100C.2n,log n,n logn,n3/2D.2100,logn, 2n, n n2.若要在单链表中的结点*p之后插入一个结点*s,则应执行的语句是(A)A.s->next=p->next; p->next=s; B.p->next=s; s->next=p->next; C.p->next=s->next; s->next=p; D.s->next=p; p->next=s->next; 3.若要在O(1)的时间复杂度上实现两个循环链表头尾相接,则应对两个循环链表各设置一个指针,分别指向(B)A.各自的头结点B.各自的尾结点C.各自的第一个元素结点D.一个表的头结点,另一个表的尾结点4.栈的两种常用存储结构分别为(A)A.顺序存储结构和链式存储结构B.顺序存储结构和散列存储结构C.链式存储结构和索引存储结构D.链式存储结构和散列存储结构5.已知循环队列的存储空间为数组data[21],且当前队列的头指针和尾指针的值分别为8和3,则该队列的当前长度为(C)A.5 B.6 C.16 D.176.已知在如下定义的链串结点中,每个字符占1个字节,指针占4个字节,则该链串的存储密度为(C)typedef struct node{char data[8];struct node *next;}LinkStrNode;A.1/4 B.1/2 C.2/3 D.3/47.应用简单的匹配算法对主串s=″BDBABDABDAB″与子串t=″BDA″进行模式匹配,在匹配成功时,进行的字符比较总次数为(C)A.7 B.9 C.10 D.128.二维数组A[20][10]采用列优先的存储方法,若每个元素占2个存储单元,且第1个元素的首地址为200,则元素A[8][9]的存储地址为(B)A.574 B.576 C.578 D.5809.对广义表L=((a,b),c,d)进行操作tail(head(L))的结果是(D)1 / 7A.(c,d)B.(d) C.b D.(b)10.已知一棵树的前序序列为ABCDEF,后序序列为CEDFBA,则对该树进行层次遍历得到的序列为(D)A.ABCDEF B.ABCEFD C.ABFCDE D.ABCDFE11.一个含n个顶点和e条弧的有向图以邻接矩阵表示法为存储结构,则计算该有向图中某个顶点出度的时间复杂度为(A)A.O(n) B.O(e) C.O(n+e) D.O(n2)12.在关键字序列(12,23,34,45,56,67,78,89,91)中二分查找关键字为45、89和12的结点时,所需进行的比较次数分别为(B)A.4,4,3 B.4,3,3C.3,4,4 D.3,3,413.下列排序方法中,最好与最坏时间复杂度不相同的排序方法是(A)A.冒泡排序B.直接选择排序C.堆排序D.归并排序14.已知含10个结点的二叉排序树是一棵完全二叉树,则该二叉排序树在等概率情况下查找成功的平均查找长度等于(B)A.1.0 B.2.9C.3.4 D.5.515.在下列各种文件中,不能进行顺序查找的文件是(C)A.顺序文件B.索引文件C.散列文件D.多重表文件二、填空题(本大题共10小题,每小题2分,共20分)16.抽象数据类型是指数据逻辑结构及与之相关的(操作)。
02331 - 2015年04月 - 数据结构试题及答案
2015年4月高等教育自学考试全国统一命题考试数据结构试卷(课程代码02331)注意事项:1.本试卷分为两部分,第一部分为选择题,第二部分为非选择题。
2.应考者必须按试题顺序在答题卡(纸)指定位置上作答,答在试卷上无效。
3.涂写部分、画图部分必须使用2B铅笔书写部分必须使用黑色字迹签字笔。
第一部分选择题一、单项选择题(本大题共15小题,每小题2分,共30分)1.以下各阶时间复杂度中,性能最优的是()A.O(log2n) B.O(n) C.O(n3) D.O(2n)2.头指针head指向带头结点的单循环链表。
链表为空时下列选项为真的是()A.head!=Null B.head==NullC.head->next==Null D.head->next==head3.设栈的进栈序列为a,b,c,d,e,经过合理的出入栈操作后,不能得到的出栈序列是()A.d,c,e,a,b B.d,e,c,b,aC.a,b,c,d,e D.e,d,c,b,a4.使用大小为6的数组实现循环队列,若当前rear=0,front=3。
当从队列中出队一个元素,再入队两个元素后,rear和front的值分别是()A.1和5 B.4和2 C.2和4 D.5和15.二维数组a[10][20]按行优先顺序存放在连续的存储空间中,元素a[0][O]的存储地址为200,若每个元素占1个存储空间,则元素a[6][2]的存储地址是()A.226 B.322 C.341 D.3426.广义表A=(a,(b,c,(e,f,g,h)))的深度是()A.2 B.3 C.4 D.77.以二叉链表作为二叉树的存储结构,在有n(n>O)个结点的二叉链表中,空指针域的个数是()A.n-1 B.n+1 C.2n-1 D.2n+18.构造一棵含n个叶结点的哈夫曼树,树中结点总数是()A.n-1 B.n+1 C.2n-1 D.2n+19.若图G的邻接表中有奇数个表结点,下列选项中,正确的是()A.G中必有奇数个顶点B.G中必有偶数个顶点C.G为无向图D.G为有向图10.下列关于有向无环图G的拓扑排序序列的叙述中,正确的是()A.存在且唯一B.存在且不唯一C.存在但可能不唯一D.无法确定是否存在11.对下图进行广度优先搜索遍历,不能得到的遍历序列是()A.V1 V2 V4 V5 V3 B.V1 V2 V5 V3 V4C.V2 V5 V1 V3 V4 D.V2 V1 V5 V4 V312.下列排序方法中,效率较高且使用辅助空间最少的方法是()A.冒泡排序B.快速排序C.堆排序D.归并排序13.下列排序方法中,平均比较次数最少的方法是()A.插入排序B.快速排序C.简单选择排序D.归并排序14.对含有16个元素的有序表进行二分查找,关键字比较次数最多是()A.3 B.4 C.5 D.615.下列叙述中,不符合m阶B树定义的是()A.根结点可以只有一个关键字B.所有叶结点都必须在同一层上C.每个结点内最多有m棵子树D.每个结点内最多有m个关键字第二部分非选择题二、填空题(本大题共10小题,每小题2分,共20分)16.算法必须满足可行性等五个准则,其中_________的含义是:算法中每条指令的含义都必须明确,无二义性。
2017年10月统考真题 02331 数据结构
2017年10月高等教育自学考试全国统一命题考试数据结构试卷(课程代码02331)注意事项:1.本试卷分为两部分,第一部分为选择题,第二部分为非选择题。
2.应考者必须按试卷顺序在答题卡(纸)制定位置上作答,答在试卷上无效。
3.涂写部分、画图部分必须使用2B铅笔,书写部分必须使用黑色字迹签字笔。
第一部分选择题(共30分)一、单项选择题:本大题共15小题,每小题2分,共30分。
在每小题列出的备选项中只有一项是最符合题目要求的,请将其选出。
1.下列选项中,与数据存储结构直接相关的是A.线性表 B.双向链表 C.二叉树 D.有向图2.将12个数据元素保存在顺序表中,若第一个元素的存储地址是100,第二个元素的存储地址是105,则该顺序表最后一个元素的存储地址是A.111 B.144 C. 155 D.1563.设栈的初始状态为空,元素1,2,3,4,5,6依次入栈,栈的容量是3,能够得到的出栈序列是A.1,2,6,4,3,5 B.2,4,3,6,5,1C.3,1,2,5,4,6 D.3,2,6,5,1,44.设指针变量head指向非空单循环链表的头结点,指针变量p指向终端结点,next是结点的指针域,则下列逻辑表达式中,值为真的是A.p->next->next==head B.p->next==headC.p->next->next==NULL D.p->next==NULL5.己知广义表LS=(((a,b)),((c,(d))),(e,(f))),(g,h)),LS的深度是A.2 B.3 C.4 D.56.已知一棵高度为4的完全二叉树T共有5个叶结点,则T中结点个数最少是A.9 B.10 C.11 D. 127.在一棵非空二叉树的中序遍历序列中,所有列在根结点前面的是A.左子树中的部分结点 B.左子树中的全部结点C.右子树中的部分结点 D.右子树中的全部结点8.用邻接矩阵表示有n个顶点和e条边的无向图,采用压缩方式存储,矩阵中零元素的个数是A.n(n+l)/2-e B.n(n+l)/2-2e C.n×n-e D.n×n-2e9.无向图G中所有顶点的度数之和是20,则G中的边数是A.10 B.20 C.30 D.4010.设有向图G含有n个顶点、e条边,使用邻接表存储。
10月自考数据结构02331试题及答案解析
10月自考数据结构02331试题及答案解析10月自考数据结构02331试题及答案解析lO月高等教育自学考试全国统一命题考试数据结构试卷(课程代码02331)本试卷共8页。
满分l00分。
考试时间l50分钟。
考生答题注意事项:1.本卷所有试题必须在答题卡上作答。
答在试卷上无效,试卷空白处和背面均可作草稿纸. 2.第一部分为选择题。
必须对应试卷上的题号使用2B铅笔将“答题卡”的相应代码涂黑。
3.第二部分为非选择题。
必须注明大、小题号,使用0.5毫米黑色字迹签字笔作答。
4.合理安排答题空间.超出答题区域无效。
第一部分选择题一、单项选择题(本大题共l5小题,每小题2分,共30分)在每小题列出的四个备选项中只有一个是符合题目要求的,请将其选出并将“答题卡”的相应代码涂黑。
未涂、错涂或多涂均无分。
1.下列选项中,不属于线性结构的是A.网 B.栈 C.队列D.线性表2.长度为n的顺序表,删除位置i上的元素(0≤i≤n一1),需要移动的元素个数为A.n—i B.n—i—l C.i D.i+13.栈采用不同的存储方式时,下列关于出栈过程的叙述中,正确的是A.顺序栈需要判定栈空,链栈也需要判定B.顺序栈需要判定栈空,而链栈不需要判定C.顺序栈不需要判定栈空,而链栈需要判定D.顺序栈不需要判定栈空,链栈也不需要判定4.若一个栈以数组V[0..n-1]存储,初始栈顶指针top为n,则x入栈的正确操作是A.top=top+1;V[top]=x B.V[top]=x;top=top+1 C.top=top一1;V[mp]=x D.V[top]=x;top=top—l 5.在二维数组a[9][10]中:每个数组元素占用3个存储空间,从首地址SA开始按行优先连续存放,则元素a[8][5]的起始地址是A.SA+141 B.SA+144 C.SA+222 D.SA+2556.广义表A=(x,((y),((a)),A))的深度是A.2 B.3 C.4 D.∞7.一棵左子树为空的二叉树在前序线索化后,其空指针域个数为A.0 B.1 C.2 D.不确定8.下列关于哈夫曼树的叙述中,错误的是A.用n个结点构造的哈夫曼树是唯一的B.哈夫曼树中只有度为0或度为2的结点C.树中两个权值最小的结点可能是兄弟结点D.同一结点集构造的二叉树中,哈夫曼树的WPL最小9.6个顶点的强连通图中,含有的边数至少是A.4 B.5 C.6 D.710.对题l0图进行深度优先搜索遍历,下列选项中,正确的遍历序列是12.有向图采用邻接矩阵存储,某一行中非零元素的个数等于A.对应顶点v的度B.对应顶点v的出度C.对应顶点v的入度D.依附于对应顶点v的边数13.下列选项中,符合堆定义的是A.{102,24,55,60,89,93}B.{24,89,55,60,93,102}C.{102,93,55,60,89,24}D.{102,60。
(完整word版)2018年10月自考02331数据结构试题及答案含评分标准
2018年10月高等教育自学考试全国统一命题考试数据结构试卷(课程代码02331)本试卷共7页,满分l00分,考试时间l50分钟。
考生答题注意事项:1.本卷所有试题必须在答题卡上作答。
答在试卷上无效,试卷空白处和背面均可作草稿纸。
2.第一部分为选择题。
必须对应试卷上的题号使用2B铅笔将“答题卡”的相应代码涂黑。
3.第二部分为非选择题。
必须注明大、小题号,使用0.5毫米黑色字迹签字笔作答。
4.合理安排答题空间,超出答题区域无效。
第一部分选择题一、单项选择题:本大题共l5小题,每小题2分,共30分。
在每小题列出的备选项中只有一项是最符合题目要求的。
请将其选出。
1.下列数据结构中,逻辑结构不同的是A.线性表 B.栈 C.队列 D.二叉树2.将l6个数据元素的线性表按顺序存储方式存储在数组中,若第一个元素的存储地址是l000,第6个元素的存储地址是1040,则最后一个元素的存储地址是A.1112 B.1120 C.1124 D.11283.设栈的初始状态为空,元素1,2,3,4,5依次入栈,不能得到的出栈序列是A.1,2,3,4,5 B.4,5,3,2,1 C.1,2,5,4,3 D.1,2,5,3,4 4.设指针变量P指向非空单链表中的结点,next是结点的指针域,则判断P所指结点为尾结点前一个结点的逻辑表达式中,正确的是A. p->next!=NULL&&p->next一>next->next == NULLB.p->next!=NULL&&p->next->next—NULLC.p->next->next==NULLD.p->next—NULL5.已知广义表LS=(((a,b,c),d),(e,(fg,(h i))),LS的深度是A.2 B.3 C.4 D.56.已知一棵完全二叉树T的第5层上共有5个叶结点,则T中叶结点个数最少是A.5 8.8 C.10 D.277.已知二叉树T的前序遍历序列为a,b,c,e,d,中序遍历序列为C,e,b,d,a,则T 的后序遍历序列为A.c,e,d,b,a B.d,e,c,b,a C.e,c,d,b,a D.e,c,b,a,d 8.有向图G有玎个顶点和e条边,G保存在邻接矩阵M中,M中0与1的个数差是A.n(n+1)/2-e B.n(n+1)/2-2e C.n×n-e D.n×n-2e9.有向图G中所有顶点的度数之和是24,则G中弧的数量是A.10 B.12 C.14 D.1610.设有向图G含有n个顶点、e条边,使用邻接表存储。
最新全国自考数据结构(02331)试题及答案
最新全国自考数据结构(02331)试题及答案全国2012年10月高等教育自学考试数据结构试题课程代码:02331请考生按规定用笔将所有试题的答案涂、写在答题纸上。
选择题部分注意事项:1. 答题前,考生务必将自己的考试课程名称、姓名、准考证号用黑色字迹的签字笔或钢笔填写在答题纸规定的位置上。
2. 每小题选出答案后,用2B铅笔把答题纸上对应题目的答案标号涂黑。
如需改动,用橡皮擦干净后,再选涂其他答案标号。
不能答在试题卷上。
一、单项选择题(本大题共l5小题,每小题2分,共30分)在每小题列出的四个备选项中只有一个是符合题目要求的,请将其选出并将“答题纸”的相应代码涂黑。
错涂、多涂或未涂均无分。
1.一个算法的时间耗费的数量级称为该算法的A.效率B.难度C.可实现性D.时间复杂度2.顺序表便于A.插入结点B.删除结点C.按值查找结点D.按序号查找结点3.设带头结点的单循环链表的头指针为head,指针变量P指向尾结点的条件是A.p->next->next==head B.p->next==headC.p->next->next==NULL D.p->next==NULL4.设以数组A[0..m-1]存放循环队列,front指向队头元素,rear 指向队尾元素的下一个位置,则当前队列中的元素个数为A.(rear-front+m)%m B.rear-front+1C.(front-rear+m)%m D.(rear-front)%m5.下列关于顺序栈的叙述中,正确的是A.入栈操作需要判断栈满,出栈操作需要判断栈空B.入栈操作不需要判断栈满,出栈操作需要判断栈空C.入栈操作需要判断栈满,出栈操作不需要判断栈空D.入栈操作不需要判断栈满,出栈操作不需要判断栈空6.A是一个10×10的对称矩阵,若采用行优先的下三角压缩存储,第一个元素a0,0的存储地址为1,每个元素占一个存储单元,则a7,5的地址为A.25 B.26C.33 D.347.树的后序遍历等价于该树对应二叉树的A.层次遍历B.前序遍历C.中序遍历D.后序遍历8.使用二叉线索树的目的是便于A.二叉树中结点的插入与删除B.在二叉树中查找双亲C.确定二叉树的高度D.查找一个结点的前趋和后继9.设无向图的顶点个数为n,则该图边的数目最多为A.n-l B.n(n-1)/2C.n(n+1)/2 D.n210.可进行拓扑排序的图只能是A.有向图B.无向图C.有向无环图D.无向连通图11.下列排序方法中稳定的是A.直接插入排序B.直接选择排序C.堆排序D.快速排序12.下列序列不为..堆的是A.75,45,65,30,15,25 B.75,65,45,30,25,15C.75,65,30,l5,25,45 D.75,45,65,25,30,1513.对线性表进行二分查找时,要求线性表必须是A.顺序存储B.链式存储C.顺序存储且按关键字有序D.链式存储且按关键字有序14.分别用以下序列生成二叉排序树,其中三个序列生成的二叉排序树是相同的,不同..的序列是A.(4,1,2,3,5) B.(4,2,3,l,5)C.(4,5,2,1,3) D.(4,2,1,5,3)15.下列关于m阶B树的叙述中,错误..的是A.每个结点至多有m个关键字B.每个结点至多有m棵子树C.插入关键字时,通过结点分裂使树高增加D.删除关键字时通过结点合并使树高降低非选择题部分注意事项:用黑色字迹的签字笔或钢笔将答案写在答题纸上,不能答在试题卷上。
自考02331数据结构重点总结(最终修订)
自考02331数据结构重点总结(最终修订)第一章概论1.瑞士计算机科学家沃思提出:算法+数据结构=程序。
算法是对数据运算的描述,而数据结构包括逻辑结构和存储结构。
由此可见,程序设计的实质是针对实际问题选择一种好的数据结构和设计一个好的算法,而好的算法在很大程度上取决于描述实际问题的数据结构。
2.数据是信息的载体。
数据元素是数据的基本单位。
一个数据元素可以由若干个数据项组成,数据项是具有独立含义的最小标识单位。
数据对象是具有相同性质的数据元素的集合。
3.数据结构指的是数据元素之间的相互关系,即数据的组织形式。
数据结构一般包括以下三方面内容:数据的逻辑结构、数据的存储结构、数据的运算①数据的逻辑结构是从逻辑关系上描述数据,与数据元素的存储结构无关,是独立于计算机的。
数据的逻辑结构分类:线性结构和非线性结构。
线性表是一个典型的线性结构。
栈、队列、串等都是线性结构。
数组、广义表、树和图等数据结构都是非线性结构。
②数据元素及其关系在计算机内的存储方式,称为数据的存储结构(物理结构)。
数据的存储结构是逻辑结构用计算机语言的实现,它依赖于计算机语言。
③数据的运算。
最常用的检索、插入、删除、更新、排序等。
4.数据的四种基本存储方法:顺序存储、链接存储、索引存储、散列存储(1)顺序存储:通常借助程序设计语言的数组描述。
(2)链接存储:通常借助于程序语言的指针来描述。
(3)索引存储:索引表由若干索引项组成。
关键字是能唯一标识一个元素的一个或多个数据项的组合。
(4)散列存储:该方法的基本思想是:根据元素的关键字直接计算出该元素的存储地址。
5.算法必须满足5个准则:输入,0个或多个数据作为输入;输出,产生一个或多个输出;有穷性,算法执行有限步后结束;确定性,每一条指令的含义都明确;可行性,算法是可行的。
算法与程序的区别:程序必须依赖于计算机程序语言,而一个算法可用自然语言、计算机程序语言、数学语言或约定的符号语言来描述。
王道数据结构 第六章 图思维导图
ve(源点)=0
ve(k)
=
Ma
x{ve(j)+Weight(vj
v, k )},vj
v 为
k
的任意前驱
1.求所有事件的最早发生时间ve()
按逆拓扑排序序列,依次求各个顶点的vl(k):
vl(汇点)=ve(汇点)
vl(k)
=
Min{vl(j)-W
eight(vj
v, k )},vj
常见考点:
对于n个顶点的无向图G,
若G是连通图,则最少有n
-1条边,
若G是非连通图,则最多可能有Cn2−
1
条边
对于n个顶点的有向图G,
若G是强连通图,则最少有
n条边
子图/生成子图(子图包括所有顶点)
强连通分量:有向图中的极大强连通子图(必须强连通且保留尽可能多的边)
连通图的生成树是包含图中全部顶点的一个极小连通子图(边尽可能的少但要保 持连通)
n个顶点对应2Cn2
条边
几种特殊的图
稀疏图/稠密图 树:不存在回路,且连通的无向图
n个顶点的树必有n-1条边 常见考点:n个顶点的图,若|E|>n-1,则图中一定存在回路
有向树:一个顶点的入度为0,其余顶点的入度均为1的有向图
有向树不是强连通图
常见考点
邻接矩阵
图的存储
无向图
第i个结点的度 = 第i行(或第i列)的非零元素个数
每一轮时间复杂度:O(2n)
时间复杂度
最短路径问题
Dijkstra算法不适用于有负权值的带权图 算法思想:动态规划
Floyd算法(带权图,无权图)
各顶点间的最短路径
自考02331数据结构大纲
第1章概论1.数据结构的作用、意义、基本概念和术语,要求达到“识记”层次。
1.1数据结构所研究的内容;在计算机科学中的作用和意义;Wirth关于程序的定义公式。
1.2数据、数据元素、数据对象、数据项、数据结构等概念的定义。
1.3数据的逻辑结构、存储结构及数据运算的含义及其相互关系。
1.4数据结构的两大类逻辑结构和四种常用的存储表示方法。
2.算法的描述和分析,要求达到“领会”层次。
2.1算法、算法的时间复杂度和空间复杂度等概念。
2.2一个完整算法需要满足的五个准则;算法与程序的关系。
2.3算法的分析方法;对于一般算法能分析其时间复杂度。
第2章线性表1.线性表的逻辑结构,要求达到“识记”层次。
1.1线性表的逻辑定义和性质。
1.2线性表上定义的基本运算。
2.线性表的顺序存储结构和基本运算,要求达到“领会”层次。
2.1顺序表的定义及特点。
2.2顺序表上进行插入和删除操作的实现及时间性能分析。
2.3理解求顺序表逆置和极值及定位两种算法的实现过程。
3.线性表链式存储结构的不同形式及基本运算,要求达到“领会”层次。
3.1单链表、循环链表、双向链表的定义及特点。
3.2单链表上实现建表、查找、插入和删除等基本算法,并分析其时间复杂度。
3.3用尾指针表示单循环链表的意义。
3.4双向链表上的插入和删除操作。
4.利用顺序表和链表设计算法解决应用问题,要求达到“综合应用”层次。
5.顺序表和链表的比较,要求达到“领会”层次。
第3章栈和队列1.栈的逻辑结构、存储结构及相关算法,要求达到“简单应用”层次。
1.1栈的逻辑定义、特点及运算。
1.2顺序栈和链栈上实现进栈、退栈等基本运算。
1.3顺序栈的上溢和下溢问题,如何防止溢出。
2.队列的逻辑结构、存储结构及相关算法,要求达到“简单应用”层次。
2.1队列的逻辑定义、特点及运算。
2.2顺序循环队列的表述;队空和队满的判定;顺序循环队列上入队、出队等基本算法。
2.3链队列的表述;带头结点和不带头结点两种情况下链队列上的基本算法。
自考02331数据结构大纲
第1章概论1.数据结构的作用、意义、基本概念和术语,要求达到“识记”层次。
1.1数据结构所研究的内容;在计算机科学中的作用和意义;Wirth关于程序的定义公式。
1.2数据、数据元素、数据对象、数据项、数据结构等概念的定义。
1.3数据的逻辑结构、存储结构及数据运算的含义及其相互关系。
1.4数据结构的两大类逻辑结构和四种常用的存储表示方法。
2.算法的描述和分析,要求达到“领会”层次。
2.1算法、算法的时间复杂度和空间复杂度等概念。
2.2一个完整算法需要满足的五个准则;算法与程序的关系。
2.3算法的分析方法;对于一般算法能分析其时间复杂度。
第2章线性表1.线性表的逻辑结构,要求达到“识记”层次。
1.1线性表的逻辑定义和性质。
1.2线性表上定义的基本运算。
2.线性表的顺序存储结构和基本运算,要求达到“领会”层次。
2.1顺序表的定义及特点。
2.2顺序表上进行插入和删除操作的实现及时间性能分析。
2.3理解求顺序表逆置和极值及定位两种算法的实现过程。
3.线性表链式存储结构的不同形式及基本运算,要求达到“领会”层次。
3.1单链表、循环链表、双向链表的定义及特点。
3.2单链表上实现建表、查找、插入和删除等基本算法,并分析其时间复杂度。
3.3用尾指针表示单循环链表的意义。
3.4双向链表上的插入和删除操作。
4.利用顺序表和链表设计算法解决应用问题,要求达到“综合应用”层次。
5.顺序表和链表的比较,要求达到“领会”层次。
第3章栈和队列1.栈的逻辑结构、存储结构及相关算法,要求达到“简单应用”层次。
1.1栈的逻辑定义、特点及运算。
1.2顺序栈和链栈上实现进栈、退栈等基本运算。
1.3顺序栈的上溢和下溢问题,如何防止溢出。
2.队列的逻辑结构、存储结构及相关算法,要求达到“简单应用”层次。
2.1队列的逻辑定义、特点及运算。
2.2顺序循环队列的表述;队空和队满的判定;顺序循环队列上入队、出队等基本算法。
2.3链队列的表述;带头结点和不带头结点两种情况下链队列上的基本算法。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
// 邻接矩阵
图:有边(弧)为1;否则为0。网:有边(弧)为权值;否则为∞。 存储空间个数为n2,与边的数目无关。 无向图的邻接矩阵是对称的。 0 1 1 0 0 0 0 1 1 0 0 0 0 1 0 1 0 0 0 0 1 0 0 1 0 A
B C D E
(3) 邻接表
简言之,“数组(弧尾顶点)+链表(邻接点)+个数” 。 typedef struct ArcNode { // 弧结点 int adjvex; // 邻接点 struct ArcNode *nextarc; // 下一个邻接点 } ArcNode; typedef struct VexNode { // 顶点结点 VertexType data; // 顶点信息 ArcNode *firstarc; // 第一个邻接点 } VexNode; const int MAX_VERTEX = 最大顶点个数; typedef struct Graph { // 图 VexNode vexs[MAX_VERTEX]; // 顶点向量 int vexnum, arcnum; // 顶点和弧的个数 } Graph; 边(弧)多则需要存储空间多。 A B C D E 1
1
const int MAX_VERTEX = 最大顶点个数; typedef struct Graph { // 图 VertexType vexs[MAX_VERTEX]; // 顶点向量 ArcType arcs[MAX_VERTEX] [MAX_VERTEX]; int vexnum, arcnum; // 顶点和弧的个数 } Graph;
/\ 3 0
/\ 4 0 /\ 0 1 /\ 0 2 /\ 1 2 /\ 1 3 /\ 2 3 /\ /\ 4 3 技巧:把弧结点按行排整齐,然后画链表。同弧尾的弧组成链表,同弧 头的弧组成链表。
(6) 邻接多重表
简言之,“数组(顶点)+边结点” 。 typedef struct EdgeNode { // 边结点 int vexi, vexj; // 边的两个顶点 struct EdgeNode *nexti, *nextj; // 两个顶点所依附的下一条边 } EdgeNode;
5
typedef struct VexNode { // 顶点结点 VertexType data; // 顶点信息 EdgeNode *firstedge; // 指向第一条边 } VexNode; const int MAX_VERTEX = 最大顶点个数; typedef struct Graph { // 图 VexNode vexs[MAX_VERTEX]; // 顶点向量 int vexnum, edgenum; // 顶点和边的个数 } Graph; 只适合存储无向图,不能存储有向图。 A B C D A B C D 0 1 2 3 0 1
最小生成树
(1) 最小生成树及MST性质
最小生成树。MST性质。 注意:同一个连通网的最小生成树可能是不唯一的,但其代价都是最小 (唯一的)。
(2) 克鲁斯卡尔算法
一句话,“不构成环的情况下,每次选取最小边”。
6
A B C D E 2 5 3 3 1 7 6 3 A B C D E 2 5 3 3 1 7 6 3 A B C D E 2 5 3
(3) 普里姆算法
记V是连通网的顶点集,U是求得生成树的顶点集,TE是求得生成树的 边集。 普里姆算法:
(a) 开始时,U={v0},TE=Φ; (b) 计算U到其余顶点V-U的最小代价,将该顶点纳入U,边纳入 TE; (c) 重复(b)直到U=V。 例:用普里姆算法计算下图的最小生成树。 A B C D E F 2 2 4 1 3 1 5 4 3 3 U V-U 最小 U到V-U中各顶点的最小 代价 代价 边 B {A} {A,F} {A,F,B} {A,F,B,C} C D E F AB/2 BC/1 CD/3 DE/2 ∞ AE/4AF/1 AF/1
3 1 7 6 3 (a) (b) (c) A B C D E 2 5 3 3 1 7 6 3 A B C D E 2 5 3 3 1 7 6 3 A B C
D E 2 5 3 3 1 7 6 3 (d) (e) (f) A B C D E 2 5 3 3 1 7 6 3 (g) (a) 无向网 (b)-(e) 克鲁斯卡尔算法计算最小生成树的过程 (g) 另一个可能的最小生成树 (f) 得到的最小生成树 提示:在不要步骤、只要结果的情况下可采用,边较少时特别有效。
4
ArcNode *firstin, *firstout; // 指向第一条入弧和第一条出弧 } VexNode; const int MAX_VERTEX = 最大顶点个数; typedef struct Graph { // 图 VexNode vexs[MAX_VERTEX]; // 顶点向量 int vexnum, arcnum; // 顶点和弧的个数 } Graph; 弧结点中包含两个指针分别指向同一弧头的下一个弧和同一个弧尾的下 一个弧。顶点结点则指向第一个同弧头和弧尾的弧。十字链表相当于邻 接表和逆邻接表的结合。 A B C D E /\ 0 1 2 3 4
图的存储结构
(1) 图的存储结构
常见图的存储结构有:邻接矩阵,邻接表,逆邻接表,十字链表,邻接 多重表。 邻接多重表只适用于存储无向图,其他存储结构可以存储无向图和有向 图。 A B C D E 例:画出图的邻接矩阵、邻接表、逆邻接表和十字链表。
(2) 邻接矩阵
简言之,“数组(顶点)+二维数组(弧)+个数” 。
深度优先搜索算法有广泛的应用,以上算法是这些应用的基础。
(2) 广度优先搜索 1°. 遍历方法
从图中某顶点出发,访问此顶点之后依次访问其各个未被访问的邻接 点,然后从这些邻接点出发依次访问它们的邻接点,并使“先被访问的 顶点的邻接点”要先于“后被访问的顶点的邻接点”被访问,直至所有已 被访问的顶点的邻接点都被访问。若图中尚有顶点未被访问,则另选图 中未被访问的顶点作为起始点,重复以上过程,直到图中所有顶点都被 访问为止。 广度优先搜索从某顶点出发,要依次访问路径长度为1,2,… 的顶 点。
(3) 时间复杂度分析
观察搜索树可以看出,无论是深度优先搜索还是广度优先搜索,其搜索 过程就是对每个顶点求所有邻接点的过程。当用邻接表存储图时,其时 间复杂度为O(n+e);当采用邻接矩阵作为存储结构时,时间复杂度是 O(n2) (因为求一个顶点的所有邻接点就是搜索邻接矩阵的一行中的n个 数,而顶点的个数为n,总共就是n2)。 4.
2°. 分析方法
方法:画一棵“深度优先搜索树”。 例:下图从A出发深度优先搜索的结果是:ABEDC。 分析:画“深度优先搜索树”。从A出发,访问A(画圈作标记),A的邻接 点有B和C(作为A的孩子),B未访问,访问B(画圈),B的邻接点有E(作B 的孩子),...,以此类推,画出搜索树。深度优先搜索的过程就是沿着该 搜索树先根遍历的过程。
3°. 算法
利用队列(类似按层遍历二叉树)。
void BFSTraverse ( Graph G ) { visited [0 .. G.vexnum-1] = false; // 初始化访问标志为未访问(false) InitQueue ( Q ); for ( v=0; v<G.vexnum; v++ ) if ( ! visited[v] ) { // 从v出发广度优先搜索 visit ( v ); visited [v] = true; EnQueue ( Q, v ); while ( ! QueueEmpty(Q) ) { DeQueue ( Q, u ); for ( w=FirstAdjVex(G,u); w>=0; w=NextAdjVex(G,u,w) ) if ( ! visited[w] ) { visit ( w ); visited [w] = true; EnQueue ( Q, w ); } } } }
2°. 分析方法
方法:画一棵“广度优先搜索树”。 例:下图从A出发广度优先遍历的结果是:ABCED。 分析:画“广度优先搜索树”。与深度优先搜索树类似,A为根,其邻接 点为其孩子,访问一个顶点,则扩展出其孩子。不过广度优先搜索的访 问次序是对该树按层遍历的结果。 A B C D E A B C E A D B D B
0 2
/\ 0 3
1 2 /\ 2 3 /\ /\ 1 3 技巧:把边结点按列排整齐,然后画链表。相同顶点组成链表,这里没 有起点和终点的区别。 3.
图的遍历
(1) 深度优先搜索 1°. 遍历方法
从图中某个顶点出发,访问此顶点,然后依次从其未被访问的邻接点出 发深度优先遍历图;若图中尚有顶点未被访问,则另选图中一个未被访 问的顶点作为起始点,重复上述过程,直到图中所有顶点都被访问为 止。
第六章 图
1、 基础知识和算法
1.
图的有关概念
图,顶点,弧,弧头,弧尾;有向图(顶点集+弧集),0≤e≤n(n-1),无 向图(顶点集+边集),0≤e≤n(n-1)/2;稀疏图(e<nlogn),稠密图;完 全图e=n(n-1)/2,有向完全图e=n(n-1);网,有向网,无向网。子图,邻 接点,顶点的度,入度,出度;路径,路径长度(经过边或弧的数 目),简单路径,回路(环),简单回路(简单环);连通图,连通分 量,强连通分量。 例:有6个顶点组成的无向图构成连通图,最少需要(_a_)条边;当边的 数目大于(_b_)时,该图必定连通。 分析:a. 5。最少有n-1条边就可以构成连通图。 b. 10。考虑将n个顶点 分成两组,一组有n-1个顶点,另一组只有1个顶点。首先在第一组中添 加边,直到n-1个顶点构成全连通子图,共(n-1)(n-2)/2条边,此后若再在 图中任意添加一条边将必定连通两组顶点,从而构成连通图。 思考:对有向图有何结论。 2.