logo资料库

数据结构复习笔记(西南交通大学2020秋季学期数据结构A)-Keller_Wang.pdf

第1页 / 共26页
第2页 / 共26页
第3页 / 共26页
第4页 / 共26页
第5页 / 共26页
第6页 / 共26页
第7页 / 共26页
第8页 / 共26页
资料共26页,剩余部分请下载后查看
数据结构复习笔记(西南交通大学2020秋季学期数据结构A)-Keller_Wang
0.写在前面
1.分析算法的T(n)和S(n)
例1:分析@标注语句执行频度
例2:分析@标注语句执行频度
例3:分析@标注语句执行频度
例4:分析时间复杂度及变量count的值
2.堆栈与队列(特别是循环队列)
例1:若元素入栈次序为ABC,写出所有可能的出栈序列。
例2:长度为n且设有队头、队尾指针的链式队列中,出队操作的时间复杂度为
例3:试说明以下算法的功能。
例4:写出下面的递归算法,并消除递归。
3.前/中/后缀表达式的互化
例1:写出中缀表达式a+(b-c)*d对应的前缀表达式和后缀表达式。
例2:后缀式3, 4, X, *, +, 2, Y, *, 5, /, - (表达式中逗号表示空格)对应的中缀式为
4.写出KMP或改进KMP算法的next数组元素值
例1:写出"abcabaa"的子串的next和nextval数组元素值
5.多维数组/半三角矩阵元素下标与顺序存储下标互算
例1:若某高级语言30行x20列二维数组(设数组元素下标从0开始)元素按行序为主序存储,每个元素存储长度为8字节。若该数组首地址为0,则存储地址为600(该地址为十进制数)的元素的行下标= ,列下标= 。
例2:某10阶对称方阵用一维数组按“行序为主序”顺序存储其下半三角元素(含主对角线元素),若所有下标从0开始,则行、列下标分别为6、7的矩阵元素在一维数组中的存储下标为?
6.广义表的表示;求表头和表尾
例1:广义表(a,b,c,d)的表尾?
例2:设有广义表L=((),()),则GetHead(L)= ;GetTail(L)= ?
7.二叉树的前/中/后序以及层次遍历;各种计算问题
例1:一棵深度为k且具有2^{k}-1个结点的二叉树称为 。这类二叉树的特点是:二叉树的每一层结点的个数都为上一层的_?
例2:已知完全二叉树的第7层(第7层为最后一层)有10个叶结点,则整棵二叉树的结点数为 ?
例3:若完全二叉树(结点编号从1开始)中某结点编号为11,则该结点的右儿子编号为 ,双亲结点编号为 。
例4:一棵二叉树中,度为2的结点数为15,则叶子结点数为 。
例5:二叉树如下图所示,写出先序、中序、后序遍历结点访问次序
8.中序线索化与中序穿线二叉树
例1:二叉树的中序遍历为DGBEAHFIC,画出中序线索化后的穿线二叉树。
例2:假设二叉树已完成中序线索化,以下算法函数利用线索指针实现非递归的中序遍历,请填空使算法完整。
9.已知前/中序遍历次序构造二叉树
例1:设先序遍历某二叉树得到的结点访问序列为ABCD,中序遍历该二叉树的序列为BADC,则后序遍历该二叉树的序列为?
例2:已知10个关键字组成的某二叉排序树的先序遍历关关键字次序为30, 9, 5, 18, 12, 24, 50, 39, 42, 60。画出该二叉排序树。
10.树与森林的转换-孩子兄弟链表
例1:由三棵树组成的森林由广义表(A(B, C, D), E(F), G(H, I(J)))给出,请画出该森林;若用孩子兄弟链表将该森林表示为二叉树形式,画出该二叉树。
11.哈夫曼二叉树与哈夫曼编码, 平均码长的计算
例1:六个符号A,B,C,D,E,F出现的概率分别是1/24, 9/24, 3/24, 5/24, 2/24, 4/24,建立一棵哈夫曼(Huffman)二叉树,给出各个符号对应的哈夫曼编码,并计算这六个字符的平均编码长度。
12.图的存储结构(画图)与DFS、BFS遍历
例1:用邻接表存储n个顶点e条边的无向图,其头(顶点)结点和表(边)结点的总数是?
例2:某DAG的邻接矩阵存储结构如下图所示,基于该存储结构:(1) 画出该DAG;(2) 写出从1号顶点出发的深度优先遍历顶点访问次序;(3) 写出从1号顶点出发的宽度优先遍历顶点访问次序;
13.用普里姆或克鲁斯卡尔算法求最小生成树
14.AOV网络与拓扑排序
例1:某AOV网络如下图所示,若各顶点的邻接点次序为字母升序,写出采用队列和堆栈存储入度为零顶点时,拓扑排序算法得到的排序结果。
15.AOE网络(求顶点的最早开始/最晚开始时间,求关键活动及关键路径)
例1:已知带权网络如下,边上的权重表示活动持续的时间,求解以下问题。(1) 写出各顶点的最早开始与最晚开始时间。(2) 写出关键路径(用顶点拓扑有序序列表示)。
16.最短路径(会填写两种算法的动态过程表格)
17.二叉排序树插入与删除结点;平衡二叉排序树插入结点;等概率成功查找时的ASL计算
例1:9个关键字输入次序为20, 8, 30, 15, 6, 40, 10, 25, 2。按此输入次序构造二叉排序树,写出其中序遍历次序;若每个元素等概率查找,试计算成功查找时的ASL。
18.分块顺序查找的最佳分块方法
例1:900个元素的索引顺序表,分块内部和索引表均用顺序查找,则最佳分块长度为?
19.B-和B+树插入/删除结点的结果画图
20.哈希表(装填因子,同义词,构造原则,线性及二次探测、链表解决冲突的方法及对应的元素等概率成功查找时的ASL的计算)
例1:12个关键字为{19, 14, 23, 01, 68, 20, 84, 27, 55, 11, 10, 79}。设H(K)=K mod 13,地址空间范围0~15,用二次探测再散列解决冲突。画出哈希表;若各元素等概率查找,求成功查找时的平均查找长度。
例2:使用散列函数h(x)=x mod 11(哈希表地址空间0..10),把10个关键字9, 25, 15, 20, 7, 1, 36, 48, 12, 31存入哈希表中。(1) 若使用链地址法解决冲突,试画出构造好的哈希表。(2) 计算各关键字等概率查找条件下查找成功时的平均查找长度
21.希尔排序给定增量序列,写出各趟增量排序结果
例1:设递减增量序列为5, 3, 1, 对以下10元序列进行由小到大希尔排序,写出各趟增量排序结果。49 38 65 97 76 13 27 49 55 04。
22.快速排序各趟排序的结果,支点元素的最终位置
例1:8个待排序关键字为49, 38, 65, 97, 76, 13, 27, 49, 排序下标范围0~7,以0号元素为支点进行非递减的快速排序,求一趟快排的结果以及支点元素的下标。
23.堆排序初始建堆的结果,输出堆顶元素并进行调整后的结果
例1:将序列{ 49, 38, 65, 97, 76, 13, 27, 49}构建为大根堆。
24.基数排序各趟分配和收集的结果
例1:对以下8个3位4进制数采用基数排序进行由小到大排序,写出对最低位、中间位以及最高位分别进行分配和收集的结果。101, 002, 332, 220, 123, 301, 021, 231
25.归并排序各趟结果
例1:写出对如下序列归并排序的各趟结果:{20}{-8}{9}{26}{7}{-9}{-26}{34}{15}{-1}
数据结构复习笔记(西南交通大学2020秋季学期数据结构A)- Keller_Wang 0.写在前面 本文作者:Keller Wang 用于西南交通大学2020秋季学期的数据结构A课程的期末考试复习 版权声明:本文为原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/Keller_Wang/article/details/112324367 写这个笔记的初衷是因为老师发的ppt中并没有对于各个例题的过多解答,而且考察的很多知识点其 实不需要对算法和数据结构本身有很深入的了解就可以解决,因此就考虑写这么一篇笔记,主要希望能 够帮助大家快速并全面的应对数据结构A课程的期末考试。 本文更侧重与对各个知识点对应的选择填空题的应对策略,其中很多数据结构和算法介绍的并非详 细,建议有时间的同学查阅更详细的资料以加深理解。 其中知识点顺序采用了赵宏宇老师"课程总结.ppt"中"考试要点"部分中列举的27个知识点。(其中对 7. 进行了合并,以及 21. 和 12. 和 26. 进行了合并)。 各知识点例题采用了赵宏宇老师"数据结构-习题讲评汇总28个知识点.ppt"、"习题讲评1(线性表-堆栈 队列-数组广义表-串).pptx"和"习题讲评2(树-图-查找-内部排序).pptx"三个ppt中的几乎全部题目(删除了 极个别重复度极高的题目)。 由于时间原因和作者本身能力问题,本文难免会出现部分纰漏,还希望大家多多批评指正。 数据结构复习笔记(西南交通大学2020秋季学期数据结构A)-Keller_Wang 0.写在前面 1.分析算法的T(n)和S(n) 例1:分析@标注语句执行频度 例2:分析@标注语句执行频度 例3:分析@标注语句执行频度 例4:分析时间复杂度及变量count的值 2.堆栈与队列(特别是循环队列) 例1:若元素入栈次序为ABC,写出所有可能的出栈序列。 例2:长度为n且设有队头、队尾指针的链式队列中,出队操作的时间复杂度为 例3:试说明以下算法的功能。 例4:写出下面的递归算法,并消除递归。 3.前/中/后缀表达式的互化 例1:写出中缀表达式 例2:后缀式3, 4, X, *, +, 2, Y, *, 5, /, - (表达式中逗号表示空格)对应的中缀式为 对应的前缀表达式和后缀表达式。 4.写出KMP或改进KMP算法的next数组元素值 例1:写出"abcabaa"的子串的next和nextval数组元素值 5.多维数组/半三角矩阵元素下标与顺序存储下标互算 例1:若某高级语言30行x20列二维数组(设数组元素下标从0开始)元素按行序为主序存储,每 个元素存储长度为8字节。若该数组首地址为0,则存储地址为600(该地址为十进制数)的元素 的行下标= ,列下标= 。 例2:某10阶对称方阵用一维数组按“行序为主序”顺序存储其下半三角元素(含主对角线元素), 若所有下标从0开始,则行、列下标分别为6、7的矩阵元素在一维数组中的存储下标为? 6.广义表的表示;求表头和表尾 例1:广义表 的表尾? 中 序 线 索 化 中 序 穿 线 二 叉 树 希 尔 排 序 希 尔 排 序 给 定 增 量 序 列 写 出 各 趟 增 量 排 序 结 果
例2:设有广义表 ,则GetHead(L)= ;GetTail(L)= ? 7.二叉树的前/中/后序以及层次遍历;各种计算问题 个结点的二叉树称为 。这类二叉树的特点是:二叉树的每一层结 例1:一棵深度为k且具有 点的个数都为上一层的_? 例2:已知完全二叉树的第7层(第7层为最后一层)有10个叶结点,则整棵二叉树的结点数为 ? 例3:若完全二叉树(结点编号从1开始)中某结点编号为11,则该结点的右儿子编号为 ,双亲 结点编号为 。 例4:一棵二叉树中,度为2的结点数为15,则叶子结点数为 。 例5:二叉树如下图所示,写出先序、中序、后序遍历结点访问次序 8.中序线索化与中序穿线二叉树 例1:二叉树的中序遍历为DGBEAHFIC,画出中序线索化后的穿线二叉树。 例2:假设二叉树已完成中序线索化,以下算法函数利用线索指针实现非递归的中序遍历,请填空 使算法完整。 9.已知前/中序遍历次序构造二叉树 例1:设先序遍历某二叉树得到的结点访问序列为ABCD,中序遍历该二叉树的序列为BADC,则 后序遍历该二叉树的序列为? 例2:已知10个关键字组成的某二叉排序树的先序遍历关关键字次序为30, 9, 5, 18, 12, 24, 50, 39, 42, 60。画出该二叉排序树。 10.树与森林的转换-孩子兄弟链表 例1:由三棵树组成的森林由广义表(A(B, C, D), E(F), G(H, I(J)))给出,请画出该森林;若用孩子兄 弟链表将该森林表示为二叉树形式,画出该二叉树。 11.哈夫曼二叉树与哈夫曼编码, 平均码长的计算 例1:六个符号A,B,C,D,E,F出现的概率分别是1/24, 9/24, 3/24, 5/24, 2/24, 4/24,建立一 棵哈夫曼(Huffman)二叉树,给出各个符号对应的哈夫曼编码,并计算这六个字符的平均编码长 度。 12.图的存储结构(画图)与DFS、BFS遍历 例1:用邻接表存储n个顶点e条边的无向图,其头(顶点)结点和表(边)结点的总数是? 例2:某DAG的邻接矩阵存储结构如下图所示,基于该存储结构:(1) 画出该DAG;(2) 写出从1号 顶点出发的深度优先遍历顶点访问次序;(3) 写出从1号顶点出发的宽度优先遍历顶点访问次序; 13.用普里姆或克鲁斯卡尔算法求最小生成树 14.AOV网络与拓扑排序 例1:某AOV网络如下图所示,若各顶点的邻接点次序为字母升序,写出采用队列和堆栈存储入度 为零顶点时,拓扑排序算法得到的排序结果。 15.AOE网络(求顶点的最早开始/最晚开始时间,求关键活动及关键路径) 例1:已知带权网络如下,边上的权重表示活动持续的时间,求解以下问题。(1) 写出各顶点的最 早开始与最晚开始时间。(2) 写出关键路径(用顶点拓扑有序序列表示)。 16.最短路径(会填写两种算法的动态过程表格) 17.二叉排序树插入与删除结点;平衡二叉排序树插入结点;等概率成功查找时的ASL计算 例1:9个关键字输入次序为20, 8, 30, 15, 6, 40, 10, 25, 2。按此输入次序构造二叉排序树,写出 其中序遍历次序;若每个元素等概率查找,试计算成功查找时的ASL。 18.分块顺序查找的最佳分块方法 例1:900个元素的索引顺序表,分块内部和索引表均用顺序查找,则最佳分块长度为? 19.B-和B+树插入/删除结点的结果画图 20.哈希表(装填因子,同义词,构造原则,线性及二次探测、链表解决冲突的方法及对应的元素等概率成 功查找时的ASL的计算) 例1:12个关键字为{19, 14, 23, 01, 68, 20, 84, 27, 55, 11, 10, 79}。设H(K)=K mod 13,地址空间 范围0~15,用二次探测再散列解决冲突。画出哈希表;若各元素等概率查找,求成功查找时的平 均查找长度。 例2:使用散列函数h(x)=x mod 11(哈希表地址空间0..10),把10个关键字9, 25, 15, 20, 7, 1, 36, 48, 12, 31存入哈希表中。(1) 若使用链地址法解决冲突,试画出构造好的哈希表。(2) 计算各关键 字等概率查找条件下查找成功时的平均查找长度 21.希尔排序给定增量序列,写出各趟增量排序结果 例1:设递减增量序列为5, 3, 1, 对以下10元序列进行由小到大希尔排序,写出各趟增量排序结 果。49 38 65 97 76 13 27 49 55 04。 22.快速排序各趟排序的结果,支点元素的最终位置 例1:8个待排序关键字为49, 38, 65, 97, 76, 13, 27, 49, 排序下标范围0~7,以0号元素为支点进行 非递减的快速排序,求一趟快排的结果以及支点元素的下标。
23.堆排序初始建堆的结果,输出堆顶元素并进行调整后的结果 例1:将序列{ 49, 38, 65, 97, 76, 13, 27, 49}构建为大根堆。 24.基数排序各趟分配和收集的结果 例1:对以下8个3位4进制数采用基数排序进行由小到大排序,写出对最低位、中间位以及最高位 分别进行分配和收集的结果。101, 002, 332, 220, 123, 301, 021, 231 25.归并排序各趟结果 例1:写出对如下序列归并排序的各趟结果:{20}{-8}{9}{26}{7}{-9}{-26}{34}{15}{-1}     1.分析算法的T(n)和S(n) T(n)即为算法的时间复杂度,S(n)为算法的空间复杂度 例1:分析@标注语句执行频度 for(i=1;i<=n;i++) for(j=1;j<=i;j++) for(k=1;k<=j;k++) @ x+=delta; 显然只需要根据各层循环分别计算即可: 例2:分析@标注语句执行频度 i=1;j=0; while(i+j<=n) @ if(i>j)j++; else i++; 虽然这题看似是一个循环的条件由两个变量的值决定,但实际上,每次循环 i+j 的值只增加1,因此@的 执行次数为n 例3:分析@标注语句执行频度 x=n;y=0; while(x>=(y+1)*(y+1)) @y++; 这里首先可以看到x是个唬人的变量,实际上直接把它看作n就可以。然后令m=y+1,则有 m每次增加1,故@的执行次数为 例4:分析时间复杂度及变量count的值
int Time(int n){  // n>2 count=0;x=2; while(x
algo1中首先通过一个while循环让栈S中的元素依次出栈并存储在A数组中,然后一个for循环让A数组依 次进栈,故实现的功能是使堆栈S中元素逆序存储。 对于类似的问题,若看代码分析有困难,只需要构造一个3~5个元素的例子按照程序要求执行一遍即可 分析出功能。 例4:写出下面的递归算法,并消除递归。 首先很容易写出递归算法: int F(int n){ if(n==0) return 1; return n*F(n/2); } 消除递归即使用数组或堆栈将递归结构消除,从而防止系统栈溢出。 (1)方法一:使用数组消除递归 思路:对于这种参数只有一个的函数,只需要将参数作为数组下标,即可转为递推计算 int F1(int n){    if(n<=1) return 1;    int *a=new[n/2+1]; //最大仅需要 n/2+1 项    a[0]=1;    for(int i=1;i<=n/2;i++){        a[i]=i*a[i/2];   }    int ans=n*a[n/2];    delete []a;    return ans; } (2)方法二:使用堆栈消除递归 思路:使用堆栈即相当于手动模拟系统执行递归的过程,入栈过程即为正向递归的过程,然后依次出栈 表示将值逐层返回。 int F2(int n){ if(n==0) return 1; stack s; int k=n/2; while(k){ s.push(k); k=k/2; } int fnow=1; // 初始时fnow=F(0)=1 while(!s.empty()){ r=r*s.top(); s.pop(); } return n*r; }
3.前/中/后缀表达式的互化 (1)中缀表达式 我们平时缩写的表达式,将运算符写在两个操作数中间的表达式,称作中缀表达式。在中缀表达式中, 运算符有不同的优先级,圆括号用于改变运算顺序,这使得运算规则比较复杂,求值过程不能直接从左 到右顺序进行,不利于计算机处理。 例如:(4+1*(5-2))-6/3 (2)后缀表达式 将运算符写在两个操作数之后的表达式称作后缀表达式。后缀表达式中没有括号,并且运算符没有优先 级。后缀表达式的求值过程能够严格按照从左到右的顺序进行,有利于计算机处理。 例如:4 1 5 2 - * + 6 3 / - (3)前缀表达式 前缀表达式是将运算符写在两个操作数之前的表达式。和后缀表达式一样,前缀表达式没有括号,运算 符没有优先级,能严格按照从右到左的顺序计算。 例如:- + 4 * 1 - 5 2 / 6 3 (4)中缀表达式转后缀表达式 step1:初始化一个栈和一个后缀表达式字符串 step2:从左到右依次对中缀表达式中的每个字符进行以下处理,直到表达式结束 如果字符是‘(’,将其入栈 如果字符是数字,添加到后缀表达式的字符串中 如果字符是运算符,先将栈顶优先级不低于该运算符的运算符出栈,添加到后缀表达式中,再将该 运算符入栈。注意,当‘(’在栈中时,优先级最低 如果字符是‘)’,将栈顶元素出栈,添加到后缀表达式中,直到出栈的是‘(’ step3:如果表达式结束,但栈中还有元素,将所有元素出栈,添加到后缀表达式中 (5)中缀表达式转前缀表达式 中缀表达式转换到前缀表达的方法和转换到后缀表达式过程一致,细节上有所变化 step1:初始化两个栈s1 和s2 step2:从右到左依次对中缀表达式中的每个字符进行以下处理,直到表达式结束 如果字符是‘)’,将其入栈s1 如果字符是数字,添加到s2中 如果字符是运算符,先将s1栈顶优先级不低于该运算符的运算符出栈,添加到s2中,再将该运算符 入栈s1。当‘)’在栈中时,优先级最低 如果字符是‘(’,将栈顶元素出栈,添加到s2中,直到出栈的是‘)’ step3:如果表达式结束,但栈中还有元素,将所有元素出栈,添加s2中 step4:将栈s2中元素依次出栈,即得到前缀表达式 (6)前/后缀表达式转中缀表达式 前/后缀表达式转中缀表达式就相当于对前/后缀表达式求值。 即:将后缀表达式从左到右依次入栈(若是前缀表达式则从右向左),若遇到运算符,则将栈顶两个元 素弹出并进行对应操作,手动翻译成中缀表达式中即可。
例1:写出中缀表达式 对应的前缀表达式和后缀表达式。 按照(4)(5)方式即可,注意前缀表达式需要两个栈,且顺序是从右向左。 例2:后缀式3, 4, X, *, +, 2, Y, *, 5, /, - (表达式中逗号表示空格)对应的中缀式为 按照(6)方式即可。 4.写出KMP或改进KMP算法的next数组元素值 如果了解KMP算法的话这部分就不会有什么问题,不过由于本文希望可以帮助大家速成,所以这里直接 讲一下如何直接求next数组和nextval数组的元素值。 step1:求解原字符串的前缀后缀最长公共元素长度 首先说啥是前缀后缀公共元素:对于字符串P=p0 p1 ...pj-1 pj ,如果存在(p0 p1 ...pk-1 pk) = (pj- k pj- k+1...pj-1 pj),那么就说明P中有最大长度为k+1的相同前缀后缀。 什么意思呢?举个例子,比如字符串"abcab",要找的是它的前缀和它的后缀相同的部分,也就是 “ab”。 然后对于整个字符串,我们可以求出来它的各个子串的前缀后缀的公共元素的最大长度,并且列出如 下的表: 模式串 最大前缀后缀公共长度 a 0 b 0 c 0 a 1 b 2 比如对于表中第3列(c)的对应值为0,意思是说对于字符串"abc"来说,因为a!=c,所以前缀后缀公 共长度为0;对于表中第4列(a)的对应值为1,意思是说对于字符串"abca"来说,因为a==a,但是 ab!=ca,所以前缀后缀公共长度为1。 step2:右移得到next数组 得到刚刚的表之后,将表中最末一位舍弃,然后整体右移一位,在最左侧补上-1即可得到next数组! 如下: 模式串 a b c a b next数组编号 next[0] next[0] next[0] next[0] next[0] next数组值 -1 0 0 0 1 step3:逐一检查更新得到nextval数组 得到next数组后,从左至右进行检查,设next[j]=k,若k>=0且p[j]==p[k],则令nextval[j]=next[k], 否则nextval[j]=next[j]。 举个例子,对于字符串"abaabcac",结果如下: 模式串 next nextval a -1 -1 b 0 0 a 0 -1 a 1 1 b 1 0 c 2 2 a 0 -1 c 1 1 注意nextval数组相对于next数组改动的值。  
例1:写出"abcabaa"的子串的next和nextval数组元素值 利用上述方法可以很轻易得到: 下标 next nextval 0 -1 -1 1 0 0 2 0 0 3 0 -1 4 1 0 5 2 2 6 1 0 5.多维数组/半三角矩阵元素下标与顺序存储下标互算 存储下标的互算这一部分说白了就是让你数数的,一般分为按"行序为主序"和按"列序为主序",意思就是 把矩阵一行一行数还是一列一列的数,问你某个元素是第几个数到的,然后再乘以每个元素的存储长 度,就可以算出存储地址了~ 例1:若某高级语言30行x20列二维数组(设数组元素下标从0开始)元素按行序为主序存储,每个元素 存储长度为8字节。若该数组首地址为0,则存储地址为600(该地址为十进制数)的元素的行下标= , 列下标= 。 二维数组这种是最简单的,给出了存储地址600,可以算出来是第 个元素(注意这里要加 1是因为首地址为0),然后每行有20个元素,可以得出这个元素在第4行,然后余下16也就是第16个元 素,因此得到行下标为3,列下标为15。 例2:某10阶对称方阵用一维数组按“行序为主序”顺序存储其下半三角元素(含主对角线元素),若所有 下标从0开始,则行、列下标分别为6、7的矩阵元素在一维数组中的存储下标为? 第二种类型就是对称矩阵的存储,一般是存储包含对角线的上半三角或下半三角矩阵,这种类型的计算 其实也很简单,只需要在草稿纸上简单画个草图,即可看出要求的元素前面有多少元素,再进行相应计 算即可。 对于这道题要注意一个陷阱,因为下半三角矩阵中始终有 的,所以他这里问 的位置需要转换成 的位置进行计算,可以得到存储下标为34(时刻注意数组下标从0开始的问题) 6.广义表的表示;求表头和表尾 广义表也称为列表,是一种递归定义的线性表,记为 以是单个数据原子或者一个广义表。 表头(Head): 非空广义表的第一个元素 。 表尾(Tail):非空广义表除表头外其余元素组成的广义表 。 例如: ,其中每个元素 可 了解了定义就很好解决关于广义表的问题:
分享到:
收藏