二叉树顺序存储结构和链式存储结构
C语言中都有哪些常见的数据结构你都知道几个?

C语⾔中都有哪些常见的数据结构你都知道⼏个?上次在⾯试时被⾯试官问到学了哪些数据结构,那时简单答了栈、队列/(ㄒoㄒ)/~~其它就都想不起来了,今天有空整理了⼀下⼏种常见的数据结构,原来我们学过的数据结构有这么多~⾸先,先来回顾下C语⾔中常见的基本数据类型吧O(∩_∩)OC语⾔的基本数据类型有:整型int,浮点型float,字符型char等等添加描述那么,究竟什么是数据结构呢?数据结构是计算机存储、组织数据的⽅式。
数据结构是指相互之间存在⼀种或多种特定关系的数据元素的集合⼤部分数据结构的实现都需要借助C语⾔中的指针和结构体类型下⾯,进⼊今天的重点啦O(∩_∩)O⼏种常见的数据结构(1)线性数据结构:元素之间⼀般存在元素之间存在⼀对⼀关系,是最常⽤的⼀类数据结构,典型的有:数组、栈、队列和线性表(2)树形结构:结点间具有层次关系,每⼀层的⼀个结点能且只能和上⼀层的⼀个结点相关,但同时可以和下⼀层的多个结点相关,称为“⼀对多”关系,常见类型有:树、堆(3)图形结构:在图形结构中,允许多个结点之间相关,称为“多对多”关系下⾯分别对这⼏种数据结构做⼀个简单介绍:1、线性数据结构:典型的有:数组、栈、队列和线性表(1)数组和链表a、数组:存放着⼀组相同类型的数据,需要预先指定数组的长度,有⼀维数组、⼆维数组、多维数组等b、链表:链表是C语⾔中⼀种应⽤⼴泛的结构,它采⽤动态分配内存的形式实现,⽤⼀组任意的存储单元存放数据元素链表的,⼀般为每个元素增设指针域,⽤来指向后继元素c、数组和链表的区别:从逻辑结构来看:数组必须事先定义固定的长度,不能适应数据动态地增减的情况;链表动态地进⾏存储分配,可以适应数据动态地增减的情况,且可以⽅便地插⼊、删除数据项(数组中插⼊、删除数据项时,需要移动其它数据项)从内存存储来看:(静态)数组从栈中分配空间(⽤NEW创建的在堆中), 对于程序员⽅便快速,但是⾃由度⼩;链表从堆中分配空间, ⾃由度⼤但是申请管理⽐较⿇烦从访问⽅式来看:数组在内存中是连续存储的,因此,可以利⽤下标索引进⾏随机访问;链表是链式存储结构,在访问元素的时候只能通过线性的⽅式由前到后顺序访问,所以访问效率⽐数组要低(2)栈、队列和线性表:可采⽤顺序存储和链式存储的⽅法进⾏存储顺序存储:借助数据元素在存储空间中的相对位置来表⽰元素之间的逻辑关系链式存储:借助表⽰数据元素存储地址的指针表⽰元素之间的逻辑关系a、栈:只允许在序列末端进⾏操作,栈的操作只能在栈顶进⾏,⼀般栈⼜被称为后进先出或先进后出的线性结构顺序栈:采⽤顺序存储结构的栈称为顺序栈,即需要⽤⼀⽚地址连续的空间来存储栈的元素,顺序栈的类型定义如下:添加描述链栈:采⽤链式存储结构的栈称为链栈:添加描述b、队列:只允许在序列两端进⾏操作,⼀般队列也被称为先进先出的线性结构循环队列:采⽤顺序存储结构的队列,需要按队列可能的最⼤长度分配存储空空,其类型定义如下:添加描述 链队列:采⽤链式存储结构的队列称为链队列,⼀般需要设置头尾指针只是链表的头尾结点:添加描述c、线性表:允许在序列任意位置进⾏操作,线性表的操作位置不受限制,线性表的操作⼗分灵活,常⽤操作包括在任意位置插⼊和删除,以及查询和修改任意位置的元素顺序表:采⽤顺序存储结构表⽰的线性表称为顺序表,⽤⼀组地址连续的存储单元⼀次存放线性表的数据元素,即以存储位置相邻表⽰位序相继的两个元素之间的前驱和后继关系,为了避免移动元素,⼀般在顺序表的接⼝定义中只考虑在表尾插⼊和删除元素,如此实现的顺序表也可称为栈表:添加描述线性表:⼀般包括单链表、双向链表、循环链表和双向循环链表单链表:添加描述 双向链表:添加描述线性表两种存储结构的⽐较:顺序表: 优点:在顺序表中,逻辑中相邻的两个元素在物理位置上也相邻,查找⽐较⽅便,存取任⼀元素的时间复杂度都为O(1) 缺点:不适合在任意位置插⼊、删除元素,因为需要移动元素,平均时间复杂度为O(n)链表: 优点:在链接的任意位置插⼊或删除元素只需修改相应指针,不需要移动元素;按需动态分配,不需要按最⼤需求预先分配⼀块连续空空 缺点:查找不⽅便,查找某⼀元素需要从头指针出发沿指针域查找,因此平均时间复杂度为O(n)2、树形结构:结点间具有层次关系,每⼀层的⼀个结点能且只能和上⼀层的⼀个结点相关,但同时可以和下⼀层的多个结点相关,称为“⼀对多”关系,常见类型有:树、堆(1)⼆叉树:⼆叉树是⼀种递归数据结构,是含有n(n>=0)个结点的有限集合,⼆叉树具有以下特点:⼆叉树可以是空树;⼆叉树的每个结点都恰好有两棵⼦树,其中⼀个或两个可能为空;⼆叉树中每个结点的左、右⼦树的位置不能颠倒,若改变两者的位置,就成为另⼀棵⼆叉树(2)完全⼆叉树:从根起,⾃上⽽下,⾃左⽽右,给满⼆叉树的每个结点从1到n连续编号,如果每个结点都与深度为k的满⼆叉树中编号从1⾄n的结点⼀⼀对应,则称为完全⼆叉树a、采⽤顺序存储结构:⽤⼀维数组存储完全⼆叉树,结点的编号对于与结点的下标(如根为1,则根的左孩⼦为2*i=2*1=2,右孩⼦为2*i+1=2*1+1=2)添加描述b、采⽤链式存储结构:⼆叉链表:添加描述三叉链表:它的结点⽐⼆叉链表多⼀个指针域parent,⽤于执⾏结点的双亲,便于查找双亲结点添加描述两种存储结构⽐较:对于完全⼆叉树,采⽤顺序存储结构既能节省空间,⼜可利⽤数组元素的下标值确定结点在⼆叉树中的位置及结点之间的关系,但采⽤顺序存储结构存储⼀般⼆叉树容易造成空间浪费,链式结构可以克服这个缺点(3)⼆叉查找树:⼆叉查找树⼜称⼆叉排序树,或者是⼀课空⼆叉树,或者是具有如下特征的⼆叉树:a、若它的左⼦树不空,则左⼦树上所有结点的值均⼩于根结点的值b、若它的右⼦树不空,则右⼦树上所有结点的值均⼤于根结点的值c、它的左、右⼦树也分别是⼆叉查找树(4)平衡⼆叉树:平衡⼆叉查找树简称平衡⼆叉树,平衡⼆叉树或者是棵空树,或者是具有下列性质的⼆叉查找树:它的左⼦树和右⼦树都是平衡⼆叉树,且左⼦树和右⼦树的⾼度之差的绝对值不超过1添加描述平衡⼆叉树的失衡及调整主要可归纳为下列四种情况:LL型、RR型、LR型、RL型(5)树:树是含有n(n>=0)个结点的有限集合,在任意⼀棵⾮空树种: a、有且仅有⼀个特定的称为根的结点b、当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1,T2,...,Tm,其中每⼀个集合本⾝⼜是⼀棵树,并且T1,T2,...,Tm称为根的⼦树(6)堆:堆是具有以下特性的完全⼆叉树,其所有⾮叶⼦结点均不⼤于(或不⼩于)其左右孩⼦结点。
数据结构C语言版(第2版)严蔚敏人民邮电出版社课后习题答案

数据结构(C语言版)(第2版)课后习题答案李冬梅2015.3目录第 1 章绪论 (1)第 2 章线性表 (5)第 3 章栈和队列 (13)第 4 章串、数组和广义表 (26)第 5 章树和二叉树 (33)第 6 章图 (43)第7 章查找 (54)第8 章排序 (65)第1章绪论1 •简述下列概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型。
答案:数据:是客观事物的符号表示,指所有能输入到计算机中并被计算机程序处理的符号的总称。
如数学计算中用到的整数和实数,文本编辑所用到的字符串,多媒体程序处理的图形、图像、声音、动画等通过特殊编码定义后的数据。
数据元素:是数据的基本单位,在计算机中通常作为一个整体进行考虑和处理。
在有些情况下,数据元素也称为元素、结点、记录等。
数据元素用于完整地描述一个对象,如一个学生记录,树中棋盘的一个格局(状态)、图中的一个顶点等。
数据项:是组成数据元素的、有独立含义的、不可分割的最小单位。
例如,学生基本信息表中的学号、姓名、性别等都是数据项。
数据对象:是性质相同的数据元素的集合,是数据的一个子集。
例如:整数数据对象是集合N={0,± 1,± 2,, },字母字符数据对象是集合C={ ‘ A',' B',,,‘ Z',‘ a','b',,,' z ' },学生基本信息表也可是一个数据对象。
数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。
换句话说,数据结构是带“结构”的数据元素的集合,“结构”就是指数据元素之间存在的关系。
逻辑结构:从逻辑关系上描述数据,它与数据的存储无关,是独立于计算机的。
因此,数据的逻辑结构可以看作是从具体问题抽象出来的数学模型。
存储结构:数据对象在计算机中的存储表示,也称为物理结构。
抽象数据类型:由用户定义的,表示应用问题的数学模型,以及定义在这个模型上的一组操作的总称。
考研数据结构复习

路径长度:从一个结点到另一个结点路径上的分支数目;
结点的路径长度:从根到该结点的路径长度;
树的路径长度:树中所有叶子结点的路径长度之和;记为PL.
在结点数相同的条件下,完全二叉树是路径最短的二叉树
1
1
2
4
5
3 6
2
4
5
3 67
7
8
8
非完全二叉树 PL=10
完全二叉树PL=9
(路径最短的二叉树不唯一,不是完全二叉树,也可能路径长度最短)
a1
a2
ai-1 ai ai+1
an
头指针:存放线性链表中第一个结点的存储地址; 头结点:链表的第一个元素结点前的附加结点;
带头结点的线性链表:第一个元素结点前增加一个附加 结点的线性链表称为 带头结点的线性链表;
head是头指针
head
a1
a2
头结点
线性链表的每个结点中只有一个指针域
故也称为单链表
ai-
ai
ai+1
ann
1
空指针
例1、设一单向链表的头指针为head,链表的记录中 包含着整数类型的key域,试设计算法,将此链表的记录 按照key递增的次序进行就地排序。(不允许使用数组 做辅助存储)或将最小的数据移到链表的最前面。
例2、将单链表L1拆成二个链表,其中以L1为头的 链表保持原来向后的链接,另一个链表的头为L2, 其链接方向与L1相反,L1包含原链表的奇数序号的 节点,L2包含原链表的偶数序号的节点。
中序遍历序列: D,B,G,E,A,C,F
后序遍历(L R T)
若二叉树非空 (1)后序遍历左子树 (2)后序遍历右子树
(3)访问根结点
408计算机学科专业基础综合考试大纲

408计算机学科专业基础综合考试大纲I考试性质计算机学科专业基础综合考试是为高等院校和科研院所招收计算机科学与技术学科的硕士研究生而设置的具有选拔性质的联考科目,其目的是科学、公平、有效地测试考生掌握计算机科学与技术学科大学本科阶段专业知识、基本理论、基本方法的水平和分析问题、解决问题的能力,评价的标准是高等院校计算机科学与技术学科优秀本科毕业生所能达到的及格或及格以上水平,以利于各高等院校和科研院所择优选拔,确保硕士研究生的招生质量。
II考查目标计算机学科专业基础综合考试涵盖数据结构、计算机组成原理、操作系统和计算机网络等学科专业基础课程。
要求考生比较系统地掌握上述专业基础课程的基本概念、基本原理和基本方法,能够综合运用所学的基本原理和基本方法分析、判断和解决有关理论问题和实际问题。
III考试形式和试卷结构一、试卷满分及考试时间本试卷满分为150分,考试时间为180分钟。
二、答题方式答题方式为闭卷、笔试。
三、试卷内容结构数据结构45分计算机组成原理45分操作系统35分计算机网络25分四、试卷题型结构单项选择题80分(40小题,每小题2分)综合应用题70分IV考查内容数据结构【考查目标】1.掌握数据结构的基本概念、基本原理和基本方法。
2.掌握数据的逻辑结构、存储结构及基本操作的实现,能够对算法进行基本的时间复杂度与空间复杂度的分析。
3.能够运用数据结构基本原理和方法进行问题的分析与求解,具备采用C或C++语言设计与实现算法的能力。
一、线性表(一)线性表的定义和基本操作(二)线性表的实现1.顺序存储2.链式存储3.线性表的应用二、栈、队列和数组(一)栈和队列的基本概念(二)栈和队列的顺序存储结构(三)栈和队列的链式存储结构(四)栈和队列的应用(五)特殊矩阵的压缩存储三、树与二叉树(一)树的基本概念(二)二叉树1.二叉树的定义及其主要特征2.二叉树的顺序存储结构和链式存储结构3.二叉树的遍历4.线索二叉树的基本概念和构造(三)树、森林1.树的存储结构2.森林与二叉树的转换3.树和森林的遍历(四)树与二叉树的应用1.二叉排序树2.平衡二叉树3.哈夫曼(Huffman)树和哈夫曼编码四、图(一)图的基本概念(二)图的存储及基本操作1.邻接矩阵法2.邻接表法3.邻接多重表、十字链表(三)图的遍历1.深度优先搜索2.广度优先搜索(四)图的基本应用1.最小(代价)生成树2.最短路径3.拓扑排序4.关键路径五、查找(一)查找的基本概念(二)顺序查找法(三)分块查找法(四)折半查找法(五)B树及其基本操作、B+树的基本概念(六)散列(Hash)表(七)字符串模式匹配(八)查找算法的分析及应用六、排序(一)排序的基本概念(二)插入排序1.直接插入排序2.折半插入排序(三)气泡排序(bubble sort)(四)简单选择排序(五)希尔排序(shell sort)(六)快速排序(七)堆排序(八)二路归并排序(merge sort)(九)基数排序(十)外部排序(十一)各种内部排序算法的比较(十二)排序算法的应用计算机组成原理【考查目标】1.理解单处理器计算机系统中各部件的内部工作原理、组成结构以及相互连接方式,具有完整的计算机系统的整机概念。
数据结构3(树形结构)

递归定义 二叉树是由“根节点”、“左子树”和“右子树” 三部分构成,则遍历二叉树的操作可分解 为“访问根节点”、“遍历左子树”和“遍历右 子树”三个子操作。 因此,不难得到三种遍历的递归定义:
– 先序遍历:访问根节点;先序遍历左子树;先序遍历 右子树; – 中序遍历:中序遍历左子树;访问根节点;中序遍历 右子树; – 后序遍历:后序遍历左子树;后序遍历右子树;访问 根节点。
二叉树的存储结构:链式存储结构(1)
typedef struct BiTNode { Lchild data Rchild ElemType data; struct BiTNode *Lchild, *Rchild; // 左、右孩子指针 } *BiTree;
二叉树的存储结构:链式存储结构(2) 上面链式结构只能从根向下找,无法直接获 得节点的父节点
– 启示:给定任意两种遍历序列,唯一确定这棵树。
先序遍历:递归伪代码
template<class T> void BinaryTree<T>::PreOrder(BinaryTreeNode<T>*root){ if(root!=NULL){ Visit(root); //访问根节点 PreOrder(root->leftchild()); //访问左子树 PreOrder(root->rightchild());//访问右子树 } } 注:Visit(root)是个抽象操作,实际上,“访问”可以在该节点 上做任何操作。
中序遍历:递归伪代码
template<class T> void BinaryTree<T>::PreOrder(BinaryTreeNode<T>*root){ if(root!=NULL){ PreOrder(root->leftchild()); //访问左子树 Visit(root); //访问根节点 PreOrder(root->rightchild());//访问右子树 } }
数据结构考研笔记整理(全)

数据结构考研笔记整理(全)一、第二章线性表●考纲内容●一、线性表的基本概念●线性表是具有相同数据结构类型的n个数据元素的有限序列;线性表为逻辑结构,实现线性表的存储结构为顺序表或者链表●二、线性表的实现●1、顺序表●定义(静态分配)●#define MaxSize 50 \\ typedef struct{ \\ ElemType data[MaxSize];\\ intlength;\\ }SqList;●定义(动态分配)●#define MaxSize 50\\ typedef strcut{\\ EleType *data; //指示动态非配数组的指针\\ int MaxSize,length;\\ }SqList;●c的动态分配语句为L.data=(ElemType*)malloc(sizeof(ElemType)*InitSize);●c++动态分配语句为L.data=new ElemType[InitSize];●插入操作●删除操作●按值寻找●2、链表●单链表●单链表的定义●●头插法建立单链表●●尾插法建立单链表●●按序号查找getElem(LinkList L,int i)和按值查找locateElem(LinkListL,ElemType e)●插入结点(后插)●p=getElem(L,i-1); //查找插入位置的前驱结点\\ s.next=p.next;\\p.next=s;●将前插操作转化为后插操作,即先将s插入的p的后面然后调换s和p的数据域●s.next=p.next;\\ p.next=s.next;\\ temp=p.data;\\ p.data=s.data;\\s.data=temp;●删除结点●p.getElem(L,i-1);\\ q=p.next;\\ p.next=q.next;\\ free(q);●双链表(结点中有prior指针和next指针)●循环链表●静态链表●借助数组来描述线性表的链式存储结构,结点中的指针域next为下一个元素的数组下标●三、线性表的应用●使用的时候如何选择链表还是顺序表?●表长难以估计,经常需要增加、删除操作——链表;表长可以估计,查询比较多——顺序表●链表的头插法,尾插法,逆置法,归并法,双指针法;顺序表结合排序算法和查找算法的应用●小知识点(选择题)二、第三章栈,队列和数组●考纲内容●一、栈和队列的基本概念●栈:后进先出,LIFO,逻辑结构上是一种操作受限的线性表●队列:先进先出,FIFO,逻辑结构上也是一种操作受限的线性表●二、栈和队列的顺序存储结构●栈的顺序存储●●队列的顺序存储●进队:队不满时,送值到队尾元素,再将队尾指针加一●出队:队不空时,取队头元素值,再将队头指针加一●判断队空:Q.front==Q.rear==0;●循环队列(牺牲一个单元来区分队空和队满,尾指针指向队尾元素的后一个位置,也就是即将要插入的位置)●初始:Q.front==Q.rear●队满:(Q.rear+1)%MaxSize=Q.front●出队,队首指针进1:Q.front=(Q.front+1)%MaxSize●入队,队尾指针进1:Q.rear=(Q.rear+1)%MaxSize●队列长度:(Q.rear+MaxSize-Q.front)%MaxSize●三、栈和队列的链式存储结构●栈的链式存储●●队列的链式存储●实际是上一个同时带有头指针和尾指针的单链表,尾指针指向单链表的最后一个结点,与顺序存储不同,通常带有头结点●四、多维数组的存储●行优先:00,01,02,10,11,12●列优先:00,10,01,11,02,12●五、特殊矩阵的压缩存储●对称矩阵●三角矩阵●三对角矩阵(带状矩阵)●稀疏矩阵●将非零元素及其相应的行和列构成一个三元组存储●十字链表法●六、栈、队列、数组的应用●栈在括号匹配中的应用●栈在递归中的应用●函数在递归调用过程中的特点:最后被调用的函数最先执行结束●队列在层次遍历中的应用●二叉树的层次遍历●1跟结点入队●2若队空,则结束遍历,否则重复3操作●3队列中的第一个结点出队并访问,若有左孩子,则左孩子入队;若有右孩子,则右孩子入队●重点为栈的(出入栈过程、出栈序列的合法性)和队列的操作及其特征●小知识点(选择题)●n个不同元素进栈,出栈元素不同排列的个数为{2n\choose n }/(n+1)●共享栈是指让两个顺序栈共享一个存储空间,将两个栈的栈底分别设置在共享空间的两端,两个栈顶向共享空间的中间延伸,可以更有效的利用存储空间,同时对存储效率没有什么影响●双端队列是指允许两端都可以进行入队和出队操作的队列●输出受限的双端队列:允许两端插入,只允许一端删除●输入受限的双端队列:允许两端删除,只允许一端插入三、第四章串●考纲内容●字符串模式匹配●暴力算法●注意指针回退时的操作是i=i-j+2;j=j+1;●kmp算法●手工求next数组时,next[j]=s的最长相等前后缀长度+1,其中s为1到j-1个字符组成的串●在实际kmp算法中,为了使公式更简洁、计算简单,如果串的位序是从1开始的,则next数组需要整体加一;如果串的位序是从0开始的,则next数组不需要加一●根据next数组求解nextval数组:如果p[j]==p[next[j]],则nextval[j]=nextval[next[j]],否则nextval[j]=next[j];●小知识点●串和线性表的区别:1线性表的数据元素可以不同,但串的数据元素一般是字符;2串的操作对象通常是子串而不是某一个字符四、第五章树与二叉树●考纲内容●一、树的基本概念●定义●树是一种递归的数据结构,是一种逻辑结构●树的性质●结点数为n,则边的数量为n-1●树中的结点数等于所有结点的度数之和加1(一个结点的孩子个数称为该结点的度,树中结点的最大度数称为树的度,每一条边表示一个结点,对应一个度,只有根结点上面无边,故结点树=度数之和+1)●度为m的树中第i层至多有m^{i-1}个结点(i\geq1)(m叉树的第i层最多有m^{i-1}个结点)●高度为h的m叉树至多有(m^h-1)/(m-1)个结点(假设每一个结点都有m个孩子,则由等比数列的求和公式可以推导出该式子)●具有n个结点的m叉树的最小高度是\lceil log_m(n(m-1)+1)\rceil(由高度为h的m叉树的最大结点树公式有,n满足式子(m^{h-1}-1)/(m-1) \leq n\leq (m^h-1)/(m-1))●高度为h的m叉树至少有h个结点;高为h,度为m的树至少有h+m-1个结点(m叉树并不等于度为m的树,m叉树可以为空树,要求所有结点的度小于等于m,而度为m的树一定有一个结点的度数为m)●二、二叉树●二叉树的定义及其主要特征●定义●特点●每个结点至多只有两颗子树●二叉树是有序树,其子树有左右之分,次序不能颠倒,否则将成为另一颗二叉树,即使树中结点只有一颗子树,也要区分他是左子树还是右子树●特殊的二叉树●满二叉树:高度为h,结点数为2^h-1,所有叶子结点都集中在二叉树的最下面一层,除叶子结点外的所有结点度数都为2,从根结点为1开始编号,对于编号为i的结点,其父结点为\lfloor i/2 \rfloor,左孩子(若有)编号为2i,右孩子(若有)编号为2i+1,所以编号为偶数的结点只可能是左孩子,编号为奇数的结点只可能是右孩子●完全二叉树:删除了满二叉树中编号更大的结点,高为h,结点数为n的完全二叉树的每个结点的编号都与高度为h的满二叉树中编号为1到n的结点相同。
《数据结构》练习题库
二、填空题1. 线性表是一种典型的___线性______结构。
2. 在一个长度为n的顺序表的第i个元素之前插入一个元素,需要后移__n-i+1__个元素。
3. 顺序表中逻辑上相邻的元素的物理位置__相邻______。
4. 要从一个顺序表删除一个元素时,被删除元素之后的所有元素均需向__前___移一个位置,移动过程是从_前____向_后____依次移动每一个元素。
5. 在线性表的顺序存储中,元素之间的逻辑关系是通过__物理存储位置_____决定的;在线性表的链接存储中,元素之间的逻辑关系是通过__链域的指针值_____决定的。
6. 在双向链表中,每个结点含有两个指针域,一个指向___前趋____结点,另一个指向____后继___结点。
7. 当对一个线性表经常进行存取操作,而很少进行插入和删除操作时,则采用___顺序__存储结构为宜。
相反,当经常进行的是插入和删除操作时,则采用__链接___存储结构为宜。
8. 顺序表中逻辑上相邻的元素,物理位置__一定_____相邻,单链表中逻辑上相邻的元素,物理位置___不一定____相邻。
9. 线性表、栈和队列都是__线性_____结构,可以在线性表的___任何___位置插入和删除元素;对于栈只能在___栈顶____位置插入和删除元素;对于队列只能在___队尾____位置插入元素和在___队头____位置删除元素。
10. 根据线性表的链式存储结构中每个结点所含指针的个数,链表可分为__单链表_______和__双链表_____;而根据指针的联接方式,链表又可分为__循环链表______和__非循环链表______。
11. 在单链表中设置头结点的作用是__使空表和非空表统一______。
12. 对于一个具有n个结点的单链表,在已知的结点p后插入一个新结点的时间复杂度为_o(1)_____,在给定值为x的结点后插入一个新结点的时间复杂度为__o(n)_____。
13. 对于一个栈作进栈运算时,应先判别栈是否为__栈满_____,作退栈运算时,应先判别栈是否为_栈空______,当栈中元素为m时,作进栈运算时发生上溢,则说明栈的可用最大容量为___m____。
第二章基本数据结构及其运算
用这种方法查找,每次比较都可抛弃子表一半的 元素,查找效率较高 从该例可看出,数据元素在表中的排列顺序对查 找效率有很大的影响
例2、学生情况登记表信息查询 成绩在90分及以上的学生情况登记表
学 号 970156 970157 970158 970159 970160 970161 970162 970163 970164 … 姓 名 性 别 年龄 20 张小明 男 19 李小青 女 19 赵 凯 男 21 李启明 男 18 刘 华 女 19 曾小波 女 18 张 军 男 20 王 伟 男 19 胡 涛 男 … … … 成绩 86 83 70 91 78 90 80 65 95 … 学 号 姓 名 性别 男 女 男 女 年龄 21 19 19 17 成绩 91 90 95 93 970159 李启明 970161 曾小波 970164 胡 970168 梅 涛 玲
数据结构主要研究和讨论三方面问题:
1、数据元素之间的固有逻辑关系,称为数据的逻辑结构 2、数据元素及其关系在计算机中的存储方式,称为数据的 物理结构或存储结构
3、施加在数据结构上的操作,称为数据结构的运算。数据处 理的本质就是对数据结构施加各种运算,常见的运算有:查找、 排序、插入、删除等。
主要目的是提高数据处理的效率:
§2.1.3 数据结构的图形表示
D中的数据元素用中间标有元素值的方框表示, 称为数据结点(结点);R中的关系用一条有向线段 从前件结点指向后件结点。
例:设数据元素的集合为D = {di |1≤ i≤ 7的整数},画 出对应于下列关系所构成的数据结构的图形
①、R1={(d1,d3),(d1,d7),(d4,d5),(d3,d6),(d2,d4)} ②、R2={(di,dj)|i+j=5} ③、R3={(d2,d3)(d3,d1),(d1,d4),(d4,d6),d6,d5),(d5,d7)}
数据结构试卷带答案
数据结构试卷一一、选择题20分1.组成数据的基本单位是;A 数据项B 数据类型C 数据元素D 数据变量2.设数据结构A=D,R,其中D={1,2,3,4},R={r},r={<1,2>,<2,3>,<3,4>,<4,1>},则数据结构A是 C ;A 线性结构B 树型结构C 图型结构D 集合3.数组的逻辑结构不同于下列D的逻辑结构;A 线性表B 栈C 队列D 树4.二叉树中第ii≥1层上的结点数最多有C个;A 2iB 2iC 2i-1D 2i-15.设指针变量p指向单链表结点A,则删除结点A的后继结点B需要的操作为.A ;A p->next=p->next->nextB p=p->nextC p=p->next->nextD p->next=p6.设栈S和队列Q的初始状态为空,元素E1、E2、E3、E4、E5和E6依次通过栈S,一个元素出栈后即进入队列Q,若6个元素出列的顺序为E2、E4、E3、E6、E5和E1,则栈S的容量至少应该是.C ;A 6B 4C 3D 27.将10阶对称矩阵压缩存储到一维数组A中,则数组A的长度最少为C ;A 100B 40C 55D 808.设结点A有3个兄弟结点且结点B为结点A的双亲结点,则结点B的度数数为A 3B 4C 5D 19.根据二叉树的定义可知二叉树共有 B种不同的形态;A 4B 5C 6D 710.设有以下四种排序方法,则 B 的空间复杂度最大;A 冒泡排序B 快速排序C 堆排序D 希尔排序二、填空题30分1.设顺序循环队列Q0:m-1的队头指针和队尾指针分别为F和R,其中队头指针F指向当前队头元素的前一个位置,队尾指针R指向当前队尾元素所在的位置,则出队列的语句为F =____________;;2.设线性表中有n个数据元素,则在顺序存储结构上实现顺序查找的平均时间复杂度为___________,在链式存储结构上实现顺序查找的平均时间复杂度为___________;3.设一棵二叉树中有n个结点,则当用二叉链表作为其存储结构时,该二叉链表中共有________个指针域,__________个空指针域;4.设指针变量p指向单链表中结点A,指针变量s指向被插入的结点B,则在结点A的后面插入结点B的操作序列为______________________________________;5.设无向图G中有n个顶点和e条边,则其对应的邻接表中有_________个表头结点和_________个表结点;6.设无向图G中有n个顶点e条边,所有顶点的度数之和为m,则e和m有______关系;7.设一棵二叉树的前序遍历序列和中序遍历序列均为ABC,则该二叉树的后序遍历序列为__________;8.设一棵完全二叉树中有21个结点,如果按照从上到下、从左到右的顺序从1开始顺序编号,则编号为8的双亲结点的编号是___________,编号为8的左孩子结点的编号是_____________;9.下列程序段的功能实现子串t在主串s中位置的算法,要求在下划线处填上正确语句;int indexchar s , char t{i=j=0;whilei<strlens && j<strlent ifsi==tj{i=i+l; j=j+l;}else{i=_______; j=______;}if j==strlentreturni-strlent;else return -1;}10. 设一个连通图G 中有n 个顶点e 条边,则其最小生成树上有________条边;三、应用题30分1.设完全二叉树的顺序存储结构中存储数据ABCDE,要求给出该二叉树的链式存储结构并给出该二叉树的前序、中序和后序遍历序列;2.设给定一个权值集合W=3,5,7,9,11,要求根据给定的权值集合构造一棵哈夫曼树并计算哈夫曼树的带权路径长度WPL;3.设一组初始记录关键字序列为19,21,16,5,18,23,要求给出以19为基准的一趟快速排序结果以及第2趟直接选择排序后的结果;4.设一组初始记录关键字集合为25,10,8,27,32,68,散列表的长度为8,散列函数Hk=k mod 7,要求分别用线性探测和链地址法作为解决冲突的方法设计哈希表;5.设无向图G 所右图所示,要求给出该图的深度优先和广度优先遍历的序列并给出该图的最小生成树;四、算法设计题20分1. 设计判断单链表中结点是否关于中心对称算法;2. 设计在链式存储结构上建立一棵二叉树的算法;3. 设计判断一棵二叉树是否是二叉排序树的算法;数据结构试卷一参考答案一、选择题二、填空题1. F+1 % m2. On,On3. 2n,n+14. s->next=p->next; p->next=s5. n, 2e6. m=2e7. CBA8. 4,169. i-j+1,010. n-1三、应用题1. 链式存储结构略,前序ABDEC,中序DBEAC,后序DEBCA;2. 哈夫曼树略,WPL=783. 18,5,16,19,21,23,5,16,21,19,18,234. 线性探测:6827322510876543210ΛΛ 链地址法:276832251086543210>->->->->->-h h h h h h h5. 深度:125364,广度:123456,最小生成树T 的边集为E={1,4,1,3,3,5,5,6,5,6}四、算法设计题1. 设计判断单链表中结点是否关于中心对称算法;typedef struct {int s100; int top;} sqstack;int lklistsymmetrylklist head{sqstack stack; = -1; lklist p;forp=head;p=0;p=p->next {++; =p->data;}forp=head;p=0;p=p->next if p->data== =; else return0;return1;}2.设计在链式存储结构上建立一棵二叉树的算法;typedef char datatype;typedef struct node {datatype data; struct node lchild,rchild;} bitree;void createbitreebitree &bt{char ch; scanf"%c",&ch;ifch=='' {bt=0; return;}bt=bitreemallocsizeofbitree; bt->data=ch;createbitreebt->lchild; createbitreebt->rchild;}3.设计判断一棵二叉树是否是二叉排序树的算法;int minnum=-32768,flag=1;typedef struct node{int key; struct node lchild,rchild;}bitree;void inorderbitree bt{if bt=0{inorderbt->lchild; ifminnum>bt->keyflag=0; minnum=bt->key; inorderbt->rchild;}}数据结构试卷二一、选择题24分1.下面关于线性表的叙述错误的是.DA 线性表采用顺序存储必须占用一片连续的存储空间B 线性表采用链式存储不必占用一片连续的存储空间C 线性表采用链式存储便于插入和删除操作的实现D 线性表采用顺序存储便于插入和删除操作的实现2.设哈夫曼树中的叶子结点总数为m,若用二叉链表作为存储结构,则该哈夫曼树中总共有个空指针域;A 2m-1B 2mC 2m+1D 4m3.设顺序循环队列Q0:M-1的头指针和尾指针分别为F和R,头指针F总是指向队头元素的前一位置,尾指针R总是指向队尾元素的当前位置,则该循环队列中的元素个数为 ;A R-FB F-RC R-F+M%MD F-R+M%M4.设某棵二叉树的中序遍历序列为ABCD,前序遍历序列为CABD,则后序遍历该二叉树得到序列为;A BADCB BCDAC CDABD CBDA5.设某完全无向图中有n个顶点,则该完全无向图中有条边;A nn-1/2B nn-1C n2D n2-16.设某棵二叉树中有2000个结点,则该二叉树的最小高度为C;A 9B 10C 11D 127.设某有向图中有n 个顶点,则该有向图对应的邻接表中有B 个表头结点;A n-1B nC n+1D 2n-18.设一组初始记录关键字序列5,2,6,3,8,以第一个记录关键字5为基准进行一趟快速排序的结果为 ;A 2,3,5,8,6B 3,2,5,8,6C 3,2,5,6,8D 2,3,6,5,8二、填空题24分1. 为了能有效地应用HASH 查找技术,必须解决的两个问题是____构造一个好的HASH 函数________________和_确定解决冲突的方法________________________;2. 下面程序段的功能实现数据x 进栈,要求在下划线处填上正确的语句;typedef struct {int s100; int top;} sqstack;void pushsqstack &stack,int x{if ==m-1 printf“overflow”;else {____________________;_________________;}}3. 中序遍历二叉排序树所得到的序列是___________序列填有序或无序;4. 快速排序的最坏时间复杂度为___________,平均时间复杂度为__________;5. 设某棵二叉树中度数为0的结点数为N 0,度数为1的结点数为N 1,则该二叉树中度数为2的结点数为_________;若采用二叉链表作为该二叉树的存储结构,则该二叉树中共有_______个空指针域;6. 设某无向图中顶点数和边数分别为n 和e,所有顶点的度数之和为d,则e=_______;7. 设一组初始记录关键字序列为55,63,44,38,75,80,31,56,则利用筛选法建立的初始堆为___________________________;8. 设某无向图G 的邻接表为31241314234321>->->->->->->->->->-v v v v ,则从顶点V 1开始的深度优先遍历序列为___________;广度优先遍历序列为____________;三、应用题36分1. 设一组初始记录关键字序列为45,80,48,40,22,78,则分别给出第4趟简单选择排序和第4趟直接插入排序后的结果;2. 设指针变量p 指向双向链表中结点A,指针变量q 指向被插入结点B,要求给出在结点A 的后面插入结点B 的操作序列设双向链表中结点的两个指针域分别为llink 和rlink;3. 设一组有序的记录关键字序列为13,18,24,35,47,50,62,83,90,查找方法用二分查找,要求计算出查找关键字62时的比较次数并计算出查找成功时的平均查找长度;4. 设一棵树T 中边的集合为{A,B,A,C,A,D,B,E,C,F,C,G},要求用孩子兄弟表示法二叉链表表示出该树的存储结构并将该树转化成对应的二叉树;5. 设有无向图G 如右图所示,要求给出用普里姆算法构造最小生成树所走过的边的集合;6. 设有一组初始记录关键字为45,80,48,40,22,78,要求构造一棵二叉排序树并给出构造过程;四、算法设计题16分1. 设有一组初始记录关键字序列K 1,K 2,…,K n ,要求设计一个算法能够在On 的时间复杂度内将线性表划分成两部分,其中左半部分的每个关键字均小于K i ,右半部分的每个关键字均大于等于K i ;2. 设有两个集合A 和集合B,要求设计生成集合C=A ∩B 的算法,其中集合A 、B 和C 用链式存储结构表示;数据结构试卷二参考答案一、选择题二、填空题1.构造一个好的HASH函数,确定解决冲突的方法2.++,=x3.有序4.On2,Onlog2n5.N0-1,2N0+N16.d/27.31,38,54,56,75,80,55,638.1,3,4,2,1,3,2,4三、应用题1.22,40,45,48,80,78,40,45,48,80,22,782.q->llink=p; q->rlink=p->rlink; p->rlink->llink=q; p->rlink=q;3.2,ASL=911+22+34+42=25/94.树的链式存储结构略,二叉树略5.E={1,3,1,2,3,5,5,6,6,4}6.略四、算法设计题1.设有一组初始记录关键字序列K1,K2,…,K n,要求设计一个算法能够在On的时间复杂度内将线性表划分成两部分,其中左半部分的每个关键字均小于K i,右半部分的每个关键字均大于等于K i;void quickpassint r, int s, int t{int i=s, j=t, x=rs;whilei<j{while i<j && rj>x j=j-1; if i<j {ri=rj;i=i+1;}while i<j && ri<x i=i+1; if i<j {rj=ri;j=j-1;}}ri=x;}2.设有两个集合A和集合B,要求设计生成集合C=A∩B的算法,其中集合A、B和C用链式存储结构表示;typedef struct node {int data; struct node next;}lklist;void intersectionlklist ha,lklist hb,lklist &hc{lklist p,q,t;forp=ha,hc=0;p=0;p=p->next{ forq=hb;q=0;q=q->next if q->data==p->data break;ifq=0{ t=lklist mallocsizeoflklist; t->data=p->data;t->next=hc; hc=t;}}}数据结构试卷三一、选择题30分1.设某数据结构的二元组形式表示为A=D,R,D={01,02,03,04,05,06,07,08,09},R={r},r={<01,02>,<01,03>,<01,04>,<02,05>,<02,06>,<03,07>,< 03,08>,<03,09>},则数据结构A是 B ;A 线性结构B 树型结构C 物理结构D 图型结构2.下面程序的时间复杂为Bfori=1,s=0;i<=n;i++ {t=1;forj=1;j<=i;j++ t=tj;s=s+t;}A O nB On2C On3D On43.设指针变量p指向单链表中结点A,若删除单链表中结点A,则需要修改指针的操作序列为A ;A q=p->next;p->data=q->data;p->next=q->next;freeq;B q=p->next;q->data=p->data;p->next=q->next;freeq;C q=p->next;p->next=q->next;freeq;D q=p->next;p->data=q->data;freeq;4.设有n个待排序的记录关键字,则在堆排序中需要 A 个辅助记录单元;A 1B nC nlog2nD n25.设一组初始关键字记录关键字为20,15,14,18,21,36,40,10,则以20为基准记录的一趟快速排序结束后的结果为 A ;A 10,15,14,18,20,36,40,21B 10,15,14,18,20,40,36,21C 10,15,14,20,18,40,36,2lD 15,10,14,18,20,36,40,216.设二叉排序树中有n个结点,则在二叉排序树的平均平均查找长度为 B ;A O1B Olog2n COn D On27.设无向图G中有n个顶点e条边,则其对应的邻接表中的表头结点和表结点的个数分别为 D ;A n,eB e,nC 2n,eD n,2e8. 设某强连通图中有n个顶点,则该强连通图中至少有 C 条边;A nn-1B n+1C nD nn+19.设有5000个待排序的记录关键字,如果需要用最快的方法选出其中最小的10个记录关键字,则用下列 B 方法可以达到此目的;A 快速排序B 堆排序C 归并排序D 插入排序10.下列四种排序中 D 的空间复杂度最大;A 插入排序B 冒泡排序C 堆排序D 归并排序二、填空殖48分,其中最后两小题各6分1.数据的物理结构主要包括_____________和______________两种情况;2.设一棵完全二叉树中有500个结点,则该二叉树的深度为____9______;若用二叉链表作为该完全二叉树的存储结构,则共有___501________个空指针域;3.设输入序列为1、2、3,则经过栈的作用后可以得到_____5______种不同的输出序列;4.设有向图G用邻接矩阵Ann作为存储结构,则该邻接矩阵中第i行上所有元素之和等于顶点i的__出度______,第i列上所有元素之和等于顶点i的____入度____;5.设哈夫曼树中共有n个结点,则该哈夫曼树中有____0____个度数为1的结点;6.设有向图G中有n个顶点e条有向边,所有的顶点入度数之和为d,则e和d的关系为__e=d_______;7.___中序_______遍历二叉排序树中的结点可以得到一个递增的关键字序列填先序、中序或后序;8.设查找表中有100个元素,如果用二分法查找方法查找数据元素X,则最多需要比较____7____次就可以断定数据元素X是否在查找表中;9.不论是顺序存储结构的栈还是链式存储结构的栈,其入栈和出栈操作的时间复杂度均为__On_________;10.设有n个结点的完全二叉树,如果按照从自上到下、从左到右从1开始顺序编号,则第i个结点的双亲结点编号为_i/2___________,右孩子结点的编号为___2i+1________;11.设一组初始记录关键字为72,73,71,23,94,16,5,则以记录关键字72为基准的一趟快速排序结果为__5,16,23,71,72,73,94_________________________;12.设有向图G中有向边的集合E={<1,2>,<2,3>,<1,4>,<4,2>,<4,3>},则该图的一种拓扑序列为__1,4,2,3__________________;13.下列算法实现在顺序散列表中查找值为x的关键字,请在下划线处填上正确的语句;struct record{int key; int others;};int hashsqsearchstruct record hashtable ,int k{int i,j; j=i=k % p;while hashtablej.key=k&&hashtablej.flag=0{j=_j+1___ %m; if i==j return-1;}if _______________________ returnj; else return-1;}14.下列算法实现在二叉排序树上查找关键值k,请在下划线处填上正确的语句;typedef struct node{int key; struct node lchild; struct node rchild;}bitree;bitree bstsearchbitree t, int k{if t==0 return0;else while t=0if t->key==k_____________; else if t->key>k t=t->lchild; else_____________;}三、算法设计题22分1.设计在单链表中删除值相同的多余结点的算法;2.设计一个求结点x在二叉树中的双亲结点算法;数据结构试卷三参考答案一、选择题第3小题分析:首先用指针变量q指向结点A的后继结点B,然后将结点B的值复制到结点A中,最后删除结点B;第9小题分析:9快速排序、归并排序和插入排序必须等到整个排序结束后才能够求出最小的10个数,而堆排序只需要在初始堆的基础上再进行10次筛选即可,每次筛选的时间复杂度为Olog2n;二、填空题1.顺序存储结构、链式存储结构2.9,5013. 54.出度,入度5.06.e=d7.中序8.79.O110.i/2,2i+111.5,16,71,23,72,94,7312.1,4,3,213.j+1,hashtablej.key==k14.returnt,t=t->rchild第8小题分析:二分查找的过程可以用一棵二叉树来描述,该二叉树称为二叉判定树;在有序表上进行二分查找时的查找长度不超过二叉判定树的高度1+log2n;三、算法设计题1.设计在单链表中删除值相同的多余结点的算法;typedef int datatype;typedef struct node {datatype data; struct node next;}lklist;void delredundantlklist &head{lklist p,q,s;forp=head;p=0;p=p->next{forq=p->next,s=q;q=0;if q->data==p->data {s->next=q->next; freeq;q=s->next;}else {s=q,q=q->next;}}}2.设计一个求结点x在二叉树中的双亲结点算法;typedef struct node {datatype data; struct node lchild,rchild;} bitree;bitree q20; int r=0,f=0,flag=0;void preorderbitree bt, char x{if bt=0 && flag==0if bt->data==x { flag=1; return;}else {r=r+1% 20; qr=bt; preorderbt->lchild,x; preorderbt->rchild,x; }}void parentbitree bt,char x{int i;preorderbt,x;fori=f+1; i<=r; i++ if qi->lchild->data==x || qi->rchild->data break;if flag==0 printf"not found x\n";else if i<=r printf"%c",bt->data; else printf"not parent";}数据结构试卷四一、选择题30分1.设一维数组中有n个数组元素,则读取第i个数组元素的平均时间复杂度为 ;A OnB Onlog2nC O1D On22.设一棵二叉树的深度为k,则该二叉树中最多有个结点;A 2k-1B 2kC 2k-1D 2k-13.设某无向图中有n个顶点e条边,则该无向图中所有顶点的入度之和为 ;A nB eC 2nD 2e4.在二叉排序树中插入一个结点的时间复杂度为 ;A O1B OnC Olog2nD On25.设某有向图的邻接表中有n个表头结点和m个表结点,则该图中有条有向边;A nB n-1C mD m-16.设一组初始记录关键字序列为345,253,674,924,627,则用基数排序需要进行趟的分配和回收才能使得初始关键字序列变成有序序列;A 3B 4C 5D 87.设用链表作为栈的存储结构则退栈操作 ;A 必须判别栈是否为满B 必须判别栈是否为空C 判别栈元素的类型D 对栈不作任何判别8.下列四种排序中的空间复杂度最大;A 快速排序B 冒泡排序C 希尔排序D 堆9.设某二叉树中度数为0的结点数为N0,度数为1的结点数为N l,度数为2的结点数为N2,则下列等式成立的是 ;A N0=N1+1B N0=N l+N2C N0=N2+1D N0=2N1+l10.设有序顺序表中有n个数据元素,则利用二分查找法查找数据元素X的最多比较次数不超过 ;A log2n+1B log2n-1C log2nD log2n+1二、填空题42分1.设有n个无序的记录关键字,则直接插入排序的时间复杂度为________,快速排序的平均时间复杂度为_________;2.设指针变量p指向双向循环链表中的结点X,则删除结点X需要执行的语句序列为_________________________________________________________设结点中的两个指针域分别为llink和rlink;3.根据初始关键字序列19,22,01,38,10建立的二叉排序树的高度为____________;4.深度为k的完全二叉树中最少有____________个结点;5.设初始记录关键字序列为K1,K2,…,K n,则用筛选法思想建堆必须从第______个元素开始进行筛选; 6.设哈夫曼树中共有99个结点,则该树中有_________个叶子结点;若采用二叉链表作为存储结构,则该树中有_____个空指针域;7.设有一个顺序循环队列中有M个存储单元,则该循环队列中最多能够存储________个队列元素;当前实际存储________________个队列元素设头指针F指向当前队头元素的前一个位置,尾指针指向当前队尾元素的位置;8.设顺序线性表中有n个数据元素,则第i个位置上插入一个数据元素需要移动表中_______个数据元素;删除第i个位置上的数据元素需要移动表中_______个元素;9.设一组初始记录关键字序列为20,18,22,16,30,19,则以20为中轴的一趟快速排序结果为______________________________;10.设一组初始记录关键字序列为20,18,22,16,30,19,则根据这些初始关键字序列建成的初始堆为________________________;11.设某无向图G中有n个顶点,用邻接矩阵A作为该图的存储结构,则顶点i和顶点j互为邻接点的条件是______________________;12.设无向图对应的邻接矩阵为A,则A中第i上非0元素的个数_________第i列上非0元素的个数填等于,大于或小于;13.设前序遍历某二叉树的序列为ABCD,中序遍历该二叉树的序列为BADC,则后序遍历该二叉树的序列为_____________;14.设散列函数Hk=k mod p,解决冲突的方法为链地址法;要求在下列算法划线处填上正确的语句完成在散列表hashtalbe中查找关键字值等于k的结点,成功时返回指向关键字的指针,不成功时返回标志0;typedef struct node {int key; struct node next;} lklist;void createlkhashlklist hashtable{int i,k; lklist s;fori=0;i<m;i++_____________________;fori=0;i<n;i++{s=lklist mallocsizeoflklist; s->key=ai;k=ai % p; s->next=hashtablek;_______________________;}}三、算法设计题28分1.设单链表中有仅三类字符的数据元素大写字母、数字和其它字符,要求利用原单链表中结点空间设计出三个单链表的算法,使每个单链表只包含同类字符;2.设计在链式存储结构上交换二叉树中所有结点左右子树的算法;3.在链式存储结构上建立一棵二叉排序树;数据结构试卷四参考答案一、选择题1.C 2.D 3.D 4.B 5.C 6.A 7.B 9.C 10.A二、填空题1.On2,Onlog2n2.p>llink->rlink=p->rlink; p->rlink->llink=p->rlink3. 34.2k-15.n/26.50,517.m-1,R-F+M%M8.n+1-i,n-i9.19,18,16,20,30,2210.16,18,19,20,32,2211.Aij=112.等于13.BDCA14.hashtablei=0,hashtablek=s三、算法设计题1.设单链表中有仅三类字符的数据元素大写字母、数字和其它字符,要求利用原单链表中结点空间设计出三个单链表的算法,使每个单链表只包含同类字符;typedef char datatype;typedef struct node {datatype data; struct node next;}lklist;void splitlklist head,lklist &ha,lklist &hb,lklist &hc{lklist p; ha=0,hb=0,hc=0;forp=head;p=0;p=head{head=p->next; p->next=0;if p->data>='A' && p->data<='Z' {p->next=ha; ha=p;}else if p->data>='0' && p->data<='9' {p->next=hb; hb=p;} else {p->next=hc; hc=p;}}}2.设计在链式存储结构上交换二叉树中所有结点左右子树的算法;typedef struct node {int data; struct node lchild,rchild;} bitree;void swapbitreebitree bt{bitree p;ifbt==0 return;swapbitreebt->lchild; swapbitreebt->rchild;p=bt->lchild; bt->lchild=bt->rchild; bt->rchild=p;}3.在链式存储结构上建立一棵二叉排序树;define n 10typedef struct node{int key; struct node lchild,rchild;}bitree;void bstinsertbitree &bt,int key{if bt==0{bt=bitree mallocsizeofbitree; bt->key=key;bt->lchild=bt->rchild=0;}else if bt->key>key bstinsertbt->lchild,key; else bstinsertbt->rchild,key;}void createbsttreebitree &bt{int i;fori=1;i<=n;i++ bstinsertbt,random100;}数据结构试卷五一、选择题30分1.数据的最小单位是 A ;A 数据项B 数据类型C 数据元素D 数据变量2.设一组初始记录关键字序列为50,40,95,20,15,70,60,45,则以增量d=4的一趟希尔排序结束后前4条记录关键字为 ;A 40,50,20,95B 15,40,60,20C 15,20,40,45D 45,40,15,203.设一组初始记录关键字序列为25,50,15,35,80,85,20,40,36,70,其中含有5个长度为2的有序子表,则用归并排序的方法对该记录关键字序列进行一趟归并后的结果为;A 15,25,35,50,20,40,80,85,36,70B 15,25,35,50,80,20,85,40,70,36C 15,25,35,50,80,85,20,36,40,70D 15,25,35,50,80,20,36,40,70,854.函数subs tr“DATASTRUCTURE”,5,9的返回值为 ;A “STRUCTURE”B “DATA”C “ASTRUCTUR”D “DATASTRUCTURE”5.设一个有序的单链表中有n个结点,现要求插入一个新结点后使得单链表仍然保持有序,则该操作的时间复杂度为 ;A Olog2nB O1C On2D On6.设一棵m叉树中度数为0的结点数为N0,度数为1的结点数为N l,……,度数为m的结点数为Nm,则N0= ;A N l+N2+……+NmB l+N2+2N3+3N4+……+m-1NmC N2+2N3+3N4+……+m-1NmD 2N l+3N2+……+m+1Nm7.设有序表中有1000个元素,则用二分查找查找元素X最多需要比较次;A 25B 10C 7D 18.设连通图G中的边集E={a,b,a,e,a,c,b,e,e,d,d,f,f,c},则从顶点a出发可以得到一种深度优先遍历的顶点序列为 ;A abedfcB acfebdC aebdfcD aedfcb9.设输入序列是1、2、3、……、n,经过栈的作用后输出序列的第一个元素是n,则输出序列中第i个输出元素是 ;A n-iB n-1-iC n+1-iD 不能确定10 设一组初始记录关键字序列为45,80,55,40,42,85,则以第一个记录关键字45为基准而得到一趟快速排序的结果是 C ;A 40,42,45,55,80,83B 42,40,45,80,85,88C 42,40,45,55,80,85D 42,40,45,85,55,80二、填空题共30分1.设有一个顺序共享栈S0:n-1,其中第一个栈项指针top1的初值为-1,第二个栈顶指针top2的初值为n,则判断共享栈满的条件是____________________;2.在图的邻接表中用顺序存储结构存储表头结点的优点是____________________;3.设有一个n阶的下三角矩阵A,如果按照行的顺序将下三角矩阵中的元素包括对角线上元素存放在nn+1个连续的存储单元中,则Aij与A00之间有_______个数据元素;4.栈的插入和删除只能在栈的栈顶进行,后进栈的元素必定先出栈,所以又把栈称为__________表;队列的插入和删除运算分别在队列的两端进行,先进队列的元素必定先出队列,所以又把队列称为_________表;5.设一棵完全二叉树的顺序存储结构中存储数据元素为ABCDEF,则该二叉树的前序遍历序列为___________,中序遍历序列为___________,后序遍历序列为___________;6.设一棵完全二叉树有128个结点,则该完全二叉树的深度为________,有__________个叶子结点;7.设有向图G的存储结构用邻接矩阵A来表示,则A中第i行中所有非零元素个数之和等于顶点i的________,第i列中所有非零元素个数之和等于顶点i的__________;8.设一组初始记录关键字序列k1,k2,……,k n是堆,则对i=1,2,…,n/2而言满足的条件为_______________________________;9.下面程序段的功能是实现冒泡排序算法,请在下划线处填上正确的语句;void bubbleint rn{fori=1;i<=n-1; i++{forexchange=0,j=0; j<_____________;j++if rj>rj+1{temp=rj+1;______________;rj=temp;exchange=1;}if exchange==0 return;}}10.下面程序段的功能是实现二分查找算法,请在下划线处填上正确的语句;struct record{int key; int others;};int bisearchstruct record r , int k{int low=0,mid,high=n-1;whilelow<=high{________________________________;ifrmid.key==k returnmid+1; else if____________ high=mid-1;else low=mid+1;}return0;}三、应用题24分1.设某棵二叉树的中序遍历序列为DBEAC,前序遍历序列为ABDEC,要求给出该二叉树的的后序遍历序列;2.设无向图G如右图所示,给出该图的最小生成树上边的集合并计算最小生成树各边上的权值之和;3.设一组初始记录关键字序列为15,17,18,22,35,51,60,要求计算出成功查找时的平均查找长度;4.设散列表的长度为8,散列函数Hk=k mod 7,初始记录关键字序列为25,31,8,27,13,68,要求分别计算出用线性探测法和链地址法作为解决冲突方法的平均查找长度;四、算法设计题16分1.设计判断两个二叉树是否相同的算法;2.设计两个有序单链表的合并排序算法;数据结构试卷五参考答案一、选择题1.A 2.B 3.A 4.A 5.D 6.B 7.B 8.B 9.C 10.C二、填空题1.top1+1=top22.可以随机访问到任一个顶点的简单链表3.ii+1/2+j-14.FILO,FIFO5.ABDECF,DBEAFC,DEBFCA6.8,647.出度,入度8.k i<=k2i && k i<=k2i+19.n-i,rj+1=rj10.mid=low+high/2,rmid.key>k三、应用题1.DEBCA2.E={1,5,5,2,5,3,3,4},W=103.ASL=11+22+34/7=17/74.ASL1=7/6,ASL2=4/3四、算法设计题1.设计判断两个二叉树是否相同的算法;typedef struct node {datatype data; struct node lchild,rchild;} bitree;int judgebitreebitree bt1,bitree bt2{if bt1==0 && bt2==0 return1;else if bt1==0 || bt2==0 ||bt1->data=bt2->data return0;else returnjudgebitreebt1->lchild,bt2->lchildjudgebitreebt1->rchild,bt2->rchild;}2.设计两个有序单链表的合并排序算法;void mergelklistlklist ha,lklist hb,lklist &hc{lklist s=hc=0;whileha=0 && hb=0ifha->data<hb->data{ifs==0 hc=s=ha; else {s->next=ha; s=ha;};ha=ha->next;}else {ifs==0 hc=s=hb; else {s->next=hb; s=hb;};hb=hb->next;}ifha==0 s->next=hb; else s->next=ha;}数据结构试卷六一、选择题30分1.设一组权值集合W={2,3,4,5,6},则由该权值集合构造的哈夫曼树中带权路径长度之和为 ;A 20B 30C 40D 452.执行一趟快速排序能够得到的序列是 ;A 41,12,34,45,27 55 72,63B 45,34,12,41 55 72,63,27C 63,12,34,45,27 55 41,72D 12,27,45,41 55 34,63,723.设一条单链表的头指针变量为head且该链表没有头结点,则其判空条件是;A head==0B head->next==0C head->next==headD head=04.时间复杂度不受数据初始状态影响而恒为Onlog2n的是 ;A 堆排序B 冒泡排序C 希尔排序D 快速排序5.设二叉树的先序遍历序列和后序遍历序列正好相反,则该二叉树满足的条件是 ;A 空或只有一个结点B 高度等于其结点数C 任一结点无左孩子D 任一结点无右孩子6.一趟排序结束后不一定能够选出一个元素放在其最终位置上的是 ;A 堆排序B 冒泡排序C 快速排序D 希尔排序7.设某棵三叉树中有40个结点,则该三叉树的最小高度为 ;A 3B 4C 5D 68.顺序查找不论在顺序线性表中还是在链式线性表中的时间复杂度为 ;A OnB On2C On1/2D O1og2n9.二路归并排序的时间复杂度为 ;A OnB On2C Onlog2nD O1og2n10. 深度为k的完全二叉树中最少有个结点;A 2k-1-1B 2k-1C 2k-1+1D 2k-111.设指针变量front表示链式队列的队头指针,指针变量rear表示链式队列的队尾指针,指针变量s指向将要入队列的结点X,则入队列的操作序列为 ;A front->next=s;front=s;B s->next=rear;rear=s;C rear->next=s;rear=s;D s->next=front;front=s;12.设某无向图中有n个顶点e条边,则建立该图邻接表的时间复杂度为 ;A On+eB On2C OneD On313.设某哈夫曼树中有199个结点,则该哈夫曼树中有个叶子结点;A 99B 100C 101D 10214.设二叉排序树上有n个结点,则在二叉排序树上查找结点的平均时间复杂度为 ;A OnB On2C Onlog2nD O1og2n15.设用邻接矩阵A表示有向图G的存储结构,则有向图G中顶点i的入度为 ;A 第i行非0元素的个数之和B 第i列非0元素的个数之和C 第i行0元素的个数之和D 第i列0元素的个数之和二、判断题20分1.调用一次深度优先遍历可以访问到图中的所有顶点;。
中级软件设计师上午模拟试题及答案解析(7)
B.
C.
D.
上一题下一题
(5/75)选择题
第5题
______是由权值集合{8,5,6,2}构造的哈夫曼树(最优二叉树)。
A.
B.
C.
D.
上一题下一题
(6/75)选择题
第6题
在______中,任意一个结点的左、右子树的高度之差的绝对值不超过1。
A.完全二叉树
B.二叉排序树
下面关于图(网)的叙述,正确的是______。
A.连通无向网的最小生成树中,顶点数恰好比边数多1
B.若有向图是强连通的,则其边数至少是顶点数的2倍
C.可以采用AOV网估算工程的工期
D.关键路径是AOE网中源点至汇点的最短路径
上一题下一题
(31/75)选择题
第31题
______的邻接矩阵是一个对称矩阵。
C.完全图适合采用邻接矩阵存储
D.完全图适合采用邻接表存储
上一题下一题
(26/75)选择题
第26题
无向图中一个顶点的度是指图中与该顶点相邻接的顶点数。若无向图G中的顶点数为n,边数为e,则所有项点的度数之和为______。
A.n*e
B.n+e
C.2n
D.2e
上一题下一题
(27/75)选择题
第27题
设一个包含N个顶点、E条边的简单无向图采用邻接矩阵存储结构(矩阵元素A[i][j]等于1/0分别表示顶点i与顶点j之间有/无边),则该矩阵中的非零元素数据为______。
A.2n
B.2n-1
C.2n+1
D.2n+2
上一题下一题
(10/75)选择题
第10题
用关键字序列10、20、30、40、50构造的二叉树排序(二叉查找树)为______。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
二叉树是一种常见的数据结构,它可以用不同的存储方式来表示。
常见的存储方式有顺序存储结构和链式存储结构。
顺序存储结构:顺序存储结构使用数组来表示二叉树。
具体的存储方式是按照二叉树的层序遍历顺序,将树的节点按照从上到下、从左到右的顺序依次存储在数组中。
对于任意节点的索引为i,其左子节点的索引为2i,右子节点的索引为2i+1。
这种方式可以快速定位和访问节点,但需要提前确定二叉树的最大规模,可能造成空间的浪费。
链式存储结构:链式存储结构使用指针来表示二叉树。
每个节点包含数据和指向左子节点和右子节点的指针。
通过指针的连接,可以按照任意顺序组织二叉树节点,而不需要预先确定二叉树的规模。
链式存储结构相比于顺序存储结构更加灵活,但在访问节点时可能需要进行指针的跳转和遍历,效率稍低。
两种存储结构各有优劣,选择哪种存储方式取决于实际应用场景和需求。
顺序存储结构适用于已知二叉树规模且需要频繁访问节点的情况,而链式存储结构适用于灵活构建和操作二叉树的情况。