数据结构1
- 格式:doc
- 大小:133.39 KB
- 文档页数:8
数据结构(一)目录第1章序论 (1)1.1 什么是数据? (1)1.2 什么是数据元素? (1)1.3 什么是数据结构及种类? (1)1.4 数据的逻辑结构 (1)1.5 数据的物理结构 (1)1.6 算法和算法分析 (1)1.7 算法的五个特性 (1)1.8 算法设计的要求 (2)1.9 算法效率的度量 (2)第2章线性表 (3)2.1 线性表举例 (3)2.2 线性表的存储 (4)2.3 线性表-栈 (4)2.4 队列 (4)2.5 双端队列 (6)第3章树和二叉树 (6)3.1 树 (6)3.1.1 树的基本概念 (6)3.1.2 树的常用存储结构 (6)3.1.3 树的遍历 (7)3.2 二叉树 (7)3.2.1 二叉树的基本概念 (7)3.2.2 二叉树与树的区别 (7)3.2.3 树及森林转到二叉树 (7)3.2.4 二叉树的性质 (8)3.2.5 满二叉树 (8)3.2.6 完全二叉树 (8)3.2.7 完全二叉树的性质 (9)3.2.8 二叉树的四种遍历 (9)3.2.9 二叉排序树 (10)3.2.10 平衡二叉树 (11)3.2.11 m阶B-树 (11)3.2.12 最优二叉树 (11)3.2.13 二叉树的存储结构 (12)3.3 广义表 (13)3.4 矩阵的压缩存储 (14)3.4.1 特殊矩阵 (14)3.4.2 压缩存储 (14)第4章历年真题讲解 (15)4.1 2009年上半年 (15)4.2 2009年下半年 (15)4.3 2010年上半年 (15)4.4 2011年上半年 (16)4.5 2011年下半年 (16)4.6 2012年上半年 (17)4.7 2012年下半年 (17)4.8 2013年上半年 (18)4.9 2013年下半年 (18)4.10 2014年上半年 (18)4.11 2014年下半年 (19)4.12 2015年上半年 (19)4.13 2015年下半年 (19)4.14 2016年上半年 (20)第1章序论什么是数据?所有能输入到计算机中并能够被计算机程序处理的符号的总称,它是计算机程序加工的原料。
一、填空题01、数据结构是一门研究非数值计算的程序设计问题中计算机的(操作对象)以及它们之间的(关系和运算)等的学科。
02、数据结构被形式地定义为(D,R),其中D是(数据元素)的有限集合,R是D上的(关系)有限集合。
03、数据结构包括数据的(逻辑结构)、数据的(存储结构)和数据的(运算)这三个方面的内容。
04、数据结构按逻辑结构可分为两大类,它们分别是(线性结构)和(非线性结构)。
05、线性结构中元素之间存在(一对一)关系,树形结构中元素之间存在(一对多)关系,图形结构中元素之间存在(多对多)关系。
06、在线性结构中,第一个结点(没有)前驱结点,其余每个结点有且只有1个前驱结点;最后一个结点(没有)后续结点,其余每个结点有且只有1个后续结点。
07、在树形结构中,树根结点没有(前驱)结点,其余每个结点有且只有(1)个前驱结点;叶子结点没有(后续)结点,其余每个结点的后续结点数可以(任意多个)。
08、在图形结构中,每个结点的前驱结点数和后续结点数可以(任意多个)。
09、数据的存储结构可用四种基本的存储方法表示,它们分别是(顺序)、(链式)、(索引)、(散列)。
10、对于给定的n个元素,可以构造出的逻辑结构有(集合)、(线性结构)、(树形结构)、(图状结构)四种。
11、数据的运算最常用的有5种,它们分别是(插入)、(删除)、(修改)、(查找)、(排序)。
12、一个算法的效率可分为(时间)效率和(空间)效率。
13、数据结构中评价算法的两个重要指标是算法的(时间复杂度)和(空间复杂度)。
14、一个数据结构在计算机中的(映射)称为存储结构。
15、算法的五个重要特性是(有穷性)、(确定性)、(可行性)、输入、输出。
16、已知如下程序段for (i=n; i>=1; i--) //语句1{ x++; //语句2for (j=n; j>=i; j--) //语句3y++; //语句4}语句 1 执行的频度为(n+1);语句2执行的频度为(n);语句3执行的频度为(n(n+3)/2);语句4执行的频度为(n(n+1)/2)。
位1的数数据结构数据结构是计算机科学中非常重要的一个概念,它是指一种组织和存储数据的方式,以及对这些数据进行操作的方法。
在计算机程序中,数据结构的选择直接影响着程序的效率和性能。
在数据结构中,位1的数也是一个重要的概念。
位1的数是指在一个二进制数中,出现的1的位数。
例如,对于二进制数1101,其中位1的数为3,因为它有3个1。
在实际应用中,位1的数有着广泛的应用,例如在算法设计、图像处理、网络通信等领域中。
在数据结构中,位1的数可以使用多种方法来表示和计算。
下面将介绍几种常见的表示和计算方法。
一、位运算法位运算法是一种常见的计算位1的数的方法。
它利用了计算机底层的位运算特性,可以高效地计算位1的数。
位运算法的基本思想是利用位运算符对二进制数进行操作,统计其中1的个数。
常用的位运算符包括与运算(&)、或运算(|)、异或运算(^)和取反运算(~)。
通过对二进制数进行位运算,可以快速得到位1的数。
二、查表法查表法是一种基于预存数据的方法,通过查表来实现位1的数的计算。
它的基本思想是将所有可能的二进制数的位1的数预先计算并存储在一个表中,然后通过查表的方式来获取位1的数。
查表法的优点是计算简单、效率高,但是需要占用较大的存储空间。
三、递归法递归法是一种通过递归调用的方式来计算位1的数的方法。
它的基本思想是将二进制数不断地进行右移操作,然后判断最低位是否为1,如果是则计数加1,然后继续对右移后的数进行递归调用。
递归法的优点是简单易懂,但是在处理大量数据时效率较低。
四、迭代法迭代法是一种通过循环迭代的方式来计算位1的数的方法。
它的基本思想是将二进制数不断地进行右移操作,然后判断最低位是否为1,如果是则计数加1,然后继续对右移后的数进行迭代。
迭代法的优点是计算简单、效率较高,但是需要使用循环结构。
以上介绍了几种常见的计算位1的数的方法,每种方法都有各自的优点和适用场景。
在实际应用中,根据具体的需求和情况选择合适的方法进行计算。
数据结构-1(总分100,考试时间90分钟)一、单项选择题在每小题列出的四个选项中只有一个选项是符合题目要求的1. 设数组data[0..m]作为循环队列SQ的存储空间,front为队头指针,rear为队尾指针,则执行出队操作的语句为( )A. front:=front+1B. front:=(front+1)mod mC. rear:=(rear+1)mod mD. front:=(front+1)mod(m+1)2. 在Hash函数H(k)=k MOD m中,一般来讲,m应取( )A. 奇数B. 偶数C. 素数D. 充分大的数3. 实现任意二叉树的后序遍历的非递归算法而不使用栈结构,最佳方案是二叉树采用( )存储结构。
A. 二叉链表B. 广义表C. 三叉链表D. 顺序4. 向一个栈顶指针为Top的链栈中插入一个s所指结点时,其操作步骤为( )A. Top—>next=s;B. s—>next=Top—>next;Top—>next=s;C. s—>next=Top;top=s;D. s—>next=Top; Top=Top—>next;5. 快速排序在最坏情况下的时间复杂度是( )A. O(nlogB. O(n2)C. O(n3)D. 都不对6. 内部排序的方法有许多种,( )方法是从未排序序列中依次取出元素,与已排序序列中的元素作比较,将其放入已排序序列的正确位置上。
A. 归并排序B. 插入排序C. 快速排序D. 选择排序7. 对于一个具有N个顶点的图,如果我们采用邻接矩阵法表示,则此矩阵的维数应该是( )A. (N-1)×(N-1)B. N×NC. (N+1)×(N+1)D. 不确定8. 在一个长度为n的顺序表(顺序存储的线性表)中,向第i个元素(1≤i≤n+1)之前插入一个新元素时,需向后移动( )个元素。
A. n-iB. n-i+1C. n-i-1D. i9. 下面四种排序方法中,平均查找长度最小的是( )A. 插入排序B. 选择排序C. 快速排序D. 归并排序10. 如果我们采用二分查找法查找一个长度为n的有序表,则查找每个元素的平均比较次数( )对应的判定树的高度(假设树高h≥2)。
/* c1.h (程序名) */#include<string.h>#include<ctype.h>#include<malloc.h> /* malloc()等*/#include<limits.h> /* INT_MAX等*/#include<stdio.h> /* EOF(=^Z或F6),NULL */#include<stdlib.h> /* atoi() */#include<io.h> /* eof() */#include<math.h> /* floor(),ceil(),abs() */#include<process.h> /* exit() *//* 函数结果状态代码*/#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1/* #define OVERFLOW -2 因为在math.h中已定义OVERFLOW的值为3,故去掉此行*/ typedef int Status; /* Status是函数的类型,其值是函数结果状态代码,如OK等*/ typedef int Boolean; /* Boolean是布尔类型,其值是TRUE或FALSE *//* c1-1.h 采用动态分配的顺序存储结构*/typedef ElemType *Triplet; /* 由InitTriplet分配三个元素存储空间*//* Triplet类型是ElemType类型的指针,存放ElemType类型的地址*//* bo1-1.c 抽象数据类型Triplet和ElemType(由c1-1.h定义)的基本操作(8个) */ Status InitTriplet(Triplet *T,ElemType v1,ElemType v2,ElemType v3){ /* 操作结果:构造三元组T,依次置T的三个元素的初值为v1,v2和v3 */*T=(ElemType *)malloc(3*sizeof(ElemType));if(!*T)exit(OVERFLOW);(*T)[0]=v1,(*T)[1]=v2,(*T)[2]=v3;return OK;}Status DestroyTriplet(Triplet *T){ /* 操作结果:三元组T被销毁*/free(*T);*T=NULL;return OK;}Status Get(Triplet T,int i, ElemType *e){ /* 初始条件:三元组T已存在,1≤i≤3。
习题练习第一章绪论1、void maxtrixmult (int n,int a[][100],intb[][100],intc[][100]){int j,k,r;int x;for(r=0;r<=n;r++)1) n+2{for (j=0;j<=n;j++) 2) (n+1)*(n+2){x=0; 3)(n+1)2for(k=1;k<=n;k++) 4)(n+1)3x+=a[r][k]*[k][j];5) n* (n+1)2c[r][j]=x; 6)(n+1)2}}}计算时间每条语句的频度和该算法的时间复杂度2.一个算法应该是( B )。
【中山大学 1998 二、1(2分)】A.程序 B.问题求解步骤的描述 C.要满足五个基本特性D.A和C.4.从逻辑上可以把数据结构分为( C )两大类。
【武汉交通科技大学 1996一、4(2分)】A.动态结构、静态结构 B.顺序结构、链式结构C.线性结构、非线性结构 D.初等结构、构造型结构5.以下与数据的存储结构无关的术语是( D )。
【北方交通大学 2000 二、1(2分)】A.循环队列 B. 链表 C. 哈希表 D. 栈6.连续存储设计时,存储单元的地址( A )。
【中山大学 1999 一、1(1分)】A.一定连续 B.一定不连续 C.不一定连续 D.部分连续,部分不连续7. 数据元素是数据的最小单位。
( F )【北京邮电大学 1998 一、1(2分)】【青岛大学 2000 一、1 (1分)】【上海交通大学 1998 一、1】【山东师范大学 2001 一、1 (2分)】第二章线性表1.线性表是具有n个( C )的有限序列(n>0)。
【清华大学 1998 一、4(2分)】A.表元素 B.字符 C.数据元素 D.数据项 E.信息项2.若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用( A )存储方式最节省时间。
【哈尔滨工业大学 2001 二、1(2分)】A.顺序表 B.双链表 C.带头结点的双循环链表 D.单循环链表3.某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用( D )存储方式最节省运算时间。
【南开大学 2000 一、3】A.单链表 B.仅有头指针的单循环链表 C.双链表 D.仅有尾指针的单循环链表4.设一个链表最常用的操作是在末尾插入结点和删除尾结点,则选用( D )最节省时间。
A. 单链表B.单循环链表C. 带尾指针的单循环链表D.带头结点的双循环链表5. 若长度为n的线性表采用顺序存储结构,在其第i个位置插入一个新元素的算法的时间复杂度为( C )(1<=i<=n+1)。
【北京航空航天大学 1999 一、1(2分)】A. O(0)B. O(1)C. O(n)D. O(n2)7.非空的循环单链表head的尾结点p↑满足( A )。
【武汉大学 2000 二、10】A.p->next=head B.p->next=NIL C.p=NIL D.p= head 8.循环链表H的尾结点P的特点是( A )。
【中山大学 1998 二、2(2分)】A.P->NEXT=H B.P->NEXT= H->NEXT C.P=H D.P=H->NEXT 9.在一个以 h 为头的单循环链中,p 指针指向链尾的条件是(A)【南京理工大学1998 一、15(2分)】A. p->next=hB. p->next=NILC. p->next->next=hD. p->data=-1 14.在一个长度为n的顺序表中第i个元素(1<=i<=n)之前插入一个元素时,需向后移动______N-I+1__个元素。
17. 在单链表L中,指针p所指结点有后继结点的条件是:.p->next!=null__ 【合肥工业大学 2001 三、3 (2分)】第三章栈和队列3、一个循环队列QU(最多元素为m0)队列满时,队列中有 m0-1 个元素4. 一个栈的输入序列为123…n,若输出序列的第一个元素是n,输出第i (1<=i<=n)个元素是( B )。
A. 不确定B. n-i+1C. iD. n-i【中山大学 1999 一、9(1分)】5. 若一个栈的输入序列为1,2,3,…,n,输出序列的第一个元素是i,则第j个输出元素是( D )。
A. i-j-1B. i-jC. j-i+1D. 不确定的【武汉大学 2000 二、3】6. 一个栈的输入序列为 1 2 3 4 5,则下列序列中不可能是栈的输出序列的是( B )。
A. 2 3 4 1 5B. 5 4 1 3 2C. 2 3 1 4 5D. 1 5 4 3 2【南开大学 2000 一、1】【山东大学 2001 二、4 (1分)】【北京理工大学 2000一、2(2分)】11. 循环队列存储在数组A[0..m]中,则入队时的操作为( D )。
【中山大学1999 一、6(1分)】A. rear=rear+1B. rear=(rear+1) mod (m-1)C. rear=(rear+1) mod mD. rear=(rear+1)mod(m+1)12. 若用一个大小为6的数组来实现循环队列,且当前rear和front的值分别为0和3,当从队列中删除一个元素,再加入两个元素后,rear和front的值分别为多少?( B )【浙江大学1999 四、1(4分)】A. 1和 5B. 2和4C. 4和2D. 5和1第五章数组1、在一个长度为n的向量中的第I个元素(1<=I<=n)之前插入一个元素时,须向后移动 N-I+1 个元素2、在一个长度为n的向量中删除第I个元素(1<=I<=n)时,须向前移动 N-I 个元素5、数组A中,每个元素的长度是3个字节,行下标k的范围从1到8,列下标j的范围从1到10,从首地址SA开始连续存放在存储器中,该数组按行存放时,元素A[8][5]的起始地址为SA+222 。
9、有一个10阶对称矩阵A,采用压缩存储方式存储,(按行为主序,并且A[0][0]=1),则A[8][5]的地址为 42 。
16、广义表((a,b,c,d))的表头是(a,b,c,d),表尾是( ) 。
17、广义表(a,(b,c,d))的表头是 a ,表尾是((b,c,d)) 。
21. 已知广义表LS=((a,b,c),(d,e,f)),运用head和tail函数取出LS中原子e的运算是( C )。
A. head(tail(LS))B. tail(head(LS))C. head(tail(head(tail(LS)))D. head(tail(tail(head(LS))))【西安电子科技大学 2001应用一、3(2分)】22. 广义表A=(a,b,(c,d),(e,(f,g))),则下面式子的值为( D )。
【北京邮电大学1999一、2(2分)】Head(Tail(Head(Tail(Tail(A)))))A. (g)B. (d)C. cD. d第6章树和二叉树答案7.若一棵二叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点个数是( B )A.9 B.11 C.15 D.不确定12.设给定权值总数有n 个,其哈夫曼树的结点总数为( D)A.不确定 B.2n C.2n+1 D.2n-1B ACEDFNPGH JM OLIK13.有n个叶子的哈夫曼树的结点总数为( D)。
A.不确定 B.2n C.2n+1 D.2n-114.有关二叉树下列说法正确的是( B )A.二叉树的度为2 B.一棵二叉树的度可以小于2 C.二叉树中至少有一个结点的度为2 D.二叉树中任何一个结点的度都为215.二叉树的第I层上最多含有结点数为( C )A.2I B. 2I-1-1 C. 2I-1 D.2I -118.对于有n 个结点的二叉树, 其高度为( D )A.nlog2n B.log2n C.⎣log2n⎦|+1 D.不确定19. 一棵具有 n个结点的完全二叉树的树高度(深度)是( A )A.⎣logn⎦+1 B.logn+1 C.⎣logn⎦ D.logn-125.利用二叉链表存储树,则根结点的右指针是( C )。
A.指向最左孩子 B.指向最右孩子 C.空 D.非空30.已知一棵二叉树的前序遍历结果为ABCDEF,中序遍历结果为CBAEDF,则后序遍历的结果为( A )。
A.CBEFDA B. FEDCBA C. CBEDFA D.不定31.已知某二叉树的后序遍历序列是dabec, 中序遍历序列是debac , 它的前序遍历是( D )。
A.acbed B.decab C.deabc D.cedba42.在完全二叉树中,若一个结点是叶结点,则它没( C )。
A.左子结点 B.右子结点 C.左子结点和右子结点 D.左子结点,右子结点和兄弟结点四,应用题4.将下列由三棵树组成的森林转换为二叉树。
(只要求给出转换结果)【南京航空航天大学 1998 一、 (10分)】5.设一棵二叉树的先序、中序遍历序列分别为先序遍历序列: A B D F C E G H 中序遍历序列: B F D A G E H C(1)画出这棵二叉树。
(2)画出这棵二叉树的后序线索树。
(3)将这棵二叉树转换成对应的树(或森林)。
【南京航空航天大学 1997 二、 (10分)】ABFD(3)CE H G9(1)设通信中出现5中字符A、B、C、D、E对应的频率为0.2,0.1,0.5,0.15,0.25构造哈夫曼树,并给出对应字符的编码。
【青岛大学2002 四、2 (10分)】(2)设A、B、C、D、E、F六个字母出现的概率分别为7,19,2,6,32,3。
试写出为这六个字母设计的HUFFMAN编码, 并画出对应的HUFFMAN树.【山东工业大学 1995 四(10分)】(1) 编码为:15:111, 3:10101, 14:110, 2:10100, 6:1011, 9:100, 16:00, 17:01(2) 常用哈夫曼树为通讯用的字符编码,本题中集合的数值解释为字符发生的频率(次数)。
由哈夫曼树构造出哈夫曼编码。
译码时,进行编码的“匹配”,即从左往右扫描对方发来的“编码串”,用字符编码去匹配,得到原来的元素(本题中的数)。
第七章图一、选择题1.图中有关路径的定义是( A )。
【北方交通大学 2001 一、24 (2分)】A.由顶点和相邻顶点序偶构成的边所形成的序列 B.由不同顶点所形成的序列C.由不同边所形成的序列 D.上述定义都不是2.设无向图的顶点个数为n,则该图最多有(B )条边。