数据结构习题 树 数据机构c语言版
C语言版数据结构题库习题及答案

数据结构(C语言版)课后习题答案目录第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’},学生基本信息表也可是一个数据对象。
数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。
换句话说,数据结构是带“结构”的数据元素的集合,“结构”就是指数据元素之间存在的关系。
逻辑结构:从逻辑关系上描述数据,它与数据的存储无关,是独立于计算机的。
因此,数据的逻辑结构可以看作是从具体问题抽象出来的数学模型。
存储结构:数据对象在计算机中的存储表示,也称为物理结构。
抽象数据类型:由用户定义的,表示应用问题的数学模型,以及定义在这个模型上的一组操作的总称。
具体包括三部分:数据对象、数据对象上关系的集合和对数据对象的基本操作的集合。
2.试举一个数据结构的例子,叙述其逻辑结构和存储结构两方面的含义和相互关系。
数据结构(C++版)树习题

TNode * Search(TNode *root,T x, int i) { if (root->data==x){ j=1; p=root->firstchild; while (p!=null&&j<i) { j++; p=p->rightsib; } if (p) retrun p; else rutrun null; } Search(root->firstchild,x,i); Search(root->rightsib,x,i); }
删除结点X为根结点的子树//p记录父结点 Void Delete(BiNode *root,T x) { if (root){ if (root->data==x) if (!p) root==NULL;//如果根为x else if (p->lchile==root) p->lchile else p->rchile; else{ p=root; Delete(root-> lchile,x); Delete(root-> rchile,x); } } }
后序的逆序算法PostOrder Void PostOrder(BiNode *root) { if (root){ cout<<root->data; PostOrder(root->rchild); PostOrder(root->lchild); } }
查找某个结点的双亲结点//p初始化为空 BinNode* Parent(BinNode* root,T x) { if (root){ if (root->data==x) return p; else{ p=root; Parent(root->lchild,x); Parent(root->lchild,x); } }
数据结构c语言版试题大全(含答案)

数据结构c语言版试题大全(含答案)数据结构C语言版试题大全(含答案)第一章:基本概念与算法设计1.1 数据结构的定义与特点数据结构是指相互之间存在一种或多种特定关系的数据元素的集合,它包括了数据的存储、组织和管理方式。
数据结构的特点包括以下几个方面:- 数据元素之间存在某种关系,构成逻辑结构- 对数据元素的操作对应于对其逻辑结构的操作- 数据结构有存储结构,包括顺序存储结构和链式存储结构- 算法是对数据结构的操作步骤的描述和实现1.2 算法的基本概念算法是解决特定问题或完成特定任务的一系列操作步骤。
算法的基本概念包括以下几个方面:- 有穷性:算法必须能在有限步骤内完成- 确定性:算法的每一步骤必须有确定的含义和结果- 可行性:算法的每一步骤必须可行,能够通过执行有限次数实现- 输入:算法接受的输入数据是原始问题的实例- 输出:算法产生的输出数据与输入有明确的关系1.3 算法的描述方法算法可以用自然语言、伪代码或流程图来描述。
常用的伪代码描述方法包括结构化语言和算法描述语言,结构化语言包括顺序结构、分支结构和循环结构。
第二章:线性结构2.1 线性表的定义与基本操作线性表是n个数据元素的有限序列,其中相邻元素之间存在唯一的前驱和后继关系。
线性表的基本操作包括插入、删除、查找和修改等。
2.2 数组与广义表数组是指具有相同数据类型的一组数据元素的集合,可以通过下标访问元素。
广义表是线性表的推广,其中元素可以是基本数据类型或另一个广义表。
第三章:树与二叉树3.1 树的定义与基本术语树是n(n≥0)个结点的一个有限集合,其中满足以下条件:- 有且仅有一个特定的称为根的结点- 其余结点可分为m(m≥0)个互不相交的有限集合,每个集合本身又是一棵树3.2 二叉树的定义与性质二叉树是指每个结点最多有两个子结点的树结构。
二叉树的性质包括以下几个方面:- 深度为k的二叉树最多有2^k-1个结点- 一棵二叉树的第i层最多有2^(i-1)个结点- 在二叉树的第i层上至多有2^(n-i+1)-1个结点(n为树的深度)第四章:图4.1 图的基本概念与术语图是由顶点的有穷非空集合和边的有穷集合组成的。
数据结构(C语言描述)习题答案

第一章客观习题1.D2.D3.B4. C5.D6.B7.D8.D9.A 10.C 11. A12.B简答题:1.存储实现是设计数据的存储结构,是建立数据的机内表示,包括数据元素和数据元素之间关系的存储。
运算实现是在某种存储实现的基础上具体实现各种运算,其运算实现的核心(即算法设计)是设计实现某一运算的处理步骤。
2. 算法的时间复杂度反映的是算法执行时间的数量级,并不是绝对执行时间。
两个时间复杂度都为O(n2)的算法,对于相同的问题规模n,它们的绝对执行时间也不一定一定相同。
3. 数据的逻辑结构包含两个要素,分别是数据元素和关系。
其中,关系是指数据元素间的逻辑关系。
根据数据元素之间关系的不同特性,通常有四类基本结构构关系,它们的复杂程度依次递进,如图1.1所示。
1) 集合结构2) 线性结构3) 树结构4) 图结构图1.1 四类基本逻辑结构关系图1) 集合结构:数据元素之间除了“属于同一集合”的关系外,无其他关系。
例如,确定一名学生是否为班级成员,只需要将班级看作一个集合结构;2) 线性结构:数据元素之间存在一对一的关系。
例如,将学生信息数据按照其入学报到的时间先后顺序进行排列,组成一个线性结构;3) 树形结构:数据元素之间存在一对多的关系。
例如,在班级管理体系中,班长管理多个组长,每位组长管理多名组员,从而形成树形结构;4) 图结构/网状结构:数据元素之间存在多对多的关系。
例如,多位朋友之间的朋友关系,任何两位同学都可以是朋友,从而形成图结构或者网状结构。
4. 存储结构是由两种种基本的存储方式实现,分别为顺序存储结构和链式存储结构。
1) 顺序存储结构:借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系,通常借助程序设计语言的数组类型来描述;2) 链式存储不像顺序存储结构要求所有元素依次存放在一段连续的存储空间中,而是无需占用一整块存储空间。
由于为了表示结点之间的关系,需要给每个结点附加指针字段,用于存放后继元素的存储地址,通常借助程序设计语言的指针类型来描述。
数据结构(C语言版)习题参考答案

数据结构(C语言版)习题参考答案数据结构(C语言版)习题参考答案1. 数据结构简介数据结构是计算机科学中重要的概念之一,它关注如何组织和存储数据,以便有效地进行访问和操作。
C语言是一种广泛应用于数据结构实现的编程语言。
本文将提供一些常见数据结构习题的参考答案,帮助读者理解和掌握数据结构的基本概念与实现。
2. 数组数组是一种线性结构,存储具有相同数据类型的元素。
以下是一些数组习题的参考答案:2.1 统计数组中某个元素出现的次数```int countOccurrences(int arr[], int n, int x) {int count = 0;for (int i = 0; i < n; i++) {if (arr[i] == x) {count++;}}return count;}```2.2 查找数组中的最大值和最小值```void findMinMax(int arr[], int n, int* min, int* max) { *min = arr[0];*max = arr[0];for (int i = 1; i < n; i++) {if (arr[i] < *min) {*min = arr[i];}if (arr[i] > *max) {*max = arr[i];}}}```3. 链表链表是一种动态数据结构,每个节点包含数据和指向下一个节点的指针。
以下是一些链表习题的参考答案:3.1 反转链表```Node* reverseLinkedList(Node* head) {Node* prev = NULL;Node* curr = head;while (curr != NULL) {Node* next = curr->next;curr->next = prev;prev = curr;curr = next;}return prev;}```3.2 合并两个有序链表```Node* mergeLists(Node* list1, Node* list2) {if (list1 == NULL) {return list2;}if (list2 == NULL) {return list1;}if (list1->data < list2->data) {list1->next = mergeLists(list1->next, list2);return list1;} else {list2->next = mergeLists(list1, list2->next);return list2;}}```4. 栈和队列栈和队列是两种重要的线性数据结构,栈支持后进先出(LIFO),队列支持先进先出(FIFO)。
数据结构(C语言版)复习题

一、单项选择题:1、树形结构不具备这样的特点:()A. 每个节点可能有多个后继(子节点)B. 每个节点可能有多个前驱(父节点)C. 可能有多个内节点(非终端结点)D. 可能有多个叶子节点(终端节点)2、二叉树与度数为2的树相同之处包括()。
A. 每个节点都有1个或2个子节点B. 至少有一个根节点C. 至少有一个度数为2的节点D. 每个节点至多只有一个父节点3、一棵完全二叉树有999 个结点,它的深度为()。
A.9 B.10 C.11 D.124、在一个单链表中,若p所指结点不是最后结点,在p之后插入s所指结点,则执行()A. s->next=p;p->next=s;B. s->next=p->next;p->next=s;C. s->next=p->next;p=s;D. p->next=s;s->next=p;5、对于一棵具有n个结点、度为5的树来说,()A. 树的高度至多是n-3B. 树的高度至多是n-4C. 树的高度至多是nD. 树的高度至多是n-56、在顺序队列中,元素的排列顺序()。
A. 由元素插入队列的先后顺序决定B. 与元素值的大小有关C. 与队首指针和队尾指针的取值有关D. 与数组大小有关7、串是一种特殊的线性表,其特殊性体现在()。
A.可以顺序存储 B.数据元素是一个字符C.可以链式存储 D.数据元素可以是多个字符若8、顺序循环队列中(数组的大小为 6),队头指示 front 和队尾指示 rear 的值分别为 3和 0,当从队列中删除1个元素,再插入2 个元素后,front和 rear的值分别为()。
A.5 和1 B.2和4 C.1和5 D.4 和29、一棵完全二叉树上有1001 个结点,其中叶子结点的个数为()。
A.250 B.500 C.254 D.50110、已知一个有向图如下图所示,则从顶点a出发进行深度优先遍历,不可能得到的DFS序列为()。
数据结构C语言版习题参考答案

附录习题参考答案习题1参考答案1.1.选择题(1). A. (2). A. (3). A. (4). B.,C. (5). A. (6). A. (7). C. (8). A. (9). B. (10.)A.1.2.填空题(1). 数据关系(2). 逻辑结构物理结构(3). 线性数据结构树型结构图结构(4). 顺序存储链式存储索引存储散列表(Hash)存储(5). 变量的取值范围操作的类别(6). 数据元素间的逻辑关系数据元素存储方式或者数据元素的物理关系(7). 关系网状结构树结构(8). 空间复杂度和时间复杂度(9). 空间时间(10). Ο(n)1.3 名词解释如下:数据:数据是信息的载体,是计算机程序加工和处理的对象,包括数值数据和非数值数据。
数据项:数据项指不可分割的、具有独立意义的最小数据单位,数据项有时也称为字段或域。
数据元素:数据元素是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理,一个数据元素可由若干个数据项组成。
数据逻辑结构:数据的逻辑结构就是指数据元素间的关系。
数据存储结构:数据的物理结构表示数据元素的存储方式或者数据元素的物理关系。
数据类型:是指变量的取值范围和所能够进行的操作的总和。
算法:是对特定问题求解步骤的一种描述,是指令的有限序列。
1.4 语句的时间复杂度为:(1) Ο(n2)(2) Ο(n2)(3) Ο(n2)(4) Ο(n-1)(5) Ο(n3)1.5 参考程序:main(){int X,Y,Z;scanf(“%d, %d, %d”,&X,&Y,Z);if (X>=Y)if(X>=Z)if (Y>=Z){ printf(“%d, %d, %d”,X,Y,Z);}else{ printf(“%d, %d, %d”,X,Z,Y);}else{ printf(“%d, %d, %d”,Z,X,Y);}elseif(Z>=X)if (Y>=Z){ printf(“%d, %d, %d”,Y,Z,X);}else{ printf(“%d, %d, %d”,Z,Y,X);}else{ printf(“%d, %d, %d”,Y,X,Z);}}1.6 参考程序:main(){int i,n;float x,a[],p;printf(“\nn=”);scanf(“%f”,&n);printf(“\nx=”);scanf(“%f”,&x);for(i=0;i<=n;i++)scanf(“%f ”,&a[i]);p=a[0];for(i=1;i<=n;i++){ p=p+a[i]*x;x=x*x;}printf(“%f”,p)’}习题2参考答案2.1选择题(1). C. (2). B. (3). B. (4). B. 5. D. 6. B. 7. B. 8. A. 9. A. 10. D.2.2.填空题(1). 有限序列(2). 顺序存储和链式存储(3). O(n) O(n)(4). n-i+1 n-i(5). 链式(6). 数据指针(7). 前驱后继(8). Ο(1) Ο(n)(9). s->next=p->next; p->next=s ;(10). s->next2.3. 解题思路:将顺序表A中的元素输入数组a,若数组a中元素个数为n,将下标为0,1,2,…,(n-1)/2的元素依次与下标为n,n-1,…, (n-1)/2的元素交换,输出数组a的元素。
数据结构C语言版习题与答案

一、是非题1. 数据结构概念包括数据之间的逻辑结构,数据在计算机中的存储方式和数据的运算三个方面。
.......................( T )2. 线性表的逻辑顺序与物理顺序总是一致的........( F )3. 线性表中的每个结点最多只有一个前驱和一个后继。
......( T )4. 线性的数据结构可以顺序存储,也可以链接存储。
非线性的数据结构只能链接存储。
.......................( F )5. 栈和队列逻辑上都是线性表。
..........................( T )6. 单链表从任何一个结点出发,都能访问到所有结点........( F )7. 单链表形式的队列,头指针F指向队列的第一个结点,尾指针R指向队列的最后一个结点。
.................................................( T )8. 在用单链表表示的链式队列中,队头在链表的链尾位置。
....( F )9. 多维数组是向量的推广。
..............................( T )10. 栈是一种先进先出的线性表。
....( F )11. 凡是递归定义的数据结构都可以用递归算法来实现它的操作。
......( T )12. 设串S的长度为n,则S的子串个数为n(n+1)/2。
...........( F )13. 一般树和二叉树的结点数目都可以为0。
................( F )14. 按中序遍历二叉树时,某结点的直接后继是它的右子树中第1个被访问的结点。
....( T )15. 后序序列和中序序列能唯一确定一棵二叉树。
....( T )16. 对于一棵具有n个结点,其高度为h的二叉树,进行任—种次序遍历的时间复杂度为O(n) .............( T )17. 网络的最小代价生成树是唯一的。
...( T )18. 图的拓扑有序序列不是唯一的。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.设二叉树bt 的存储结构如下,其中bt为树根结点指针,left,right分别为结
点的左、右孩子指针,dada为结点的数据域。
请完成下列各题:
1)画出二叉树bt的逻辑结构
2)写出按先序、中序、后序遍历二叉树所得到的结点序列
3)画出二叉树bt的后序线索化树
1 2 3 4 5 6 7 8 9 10
2.二叉树结点数值采用顺序存储结构,如图所示,
1)画出二叉树表示
2)写出前序遍历,中序遍历和后序遍历的结果
3)写出结点值c的父结点,其左、右孩子。
4)画出将此二叉树还原成森林的图
3.已知一棵二叉树的中序序列为cbedahgijk,后序序列为cedbhjifa,画出该二叉
树的先序线索二叉树。
4.有一份电文中共使用五个字符:a、b、c、d、e,它们的出现频率依次为4、7、5、
2、9,试画出对应的Huffman树(请按左子树根结点的权小于等于右子树根结点
的权的次序构造),求出每个字符的Huffman编码。
5.设给定权集w={2,3,4,8,9},试构造关于w的一棵哈夫曼树,并求其加权路
径长度WPL。
6.假设二叉树采用链接存储方式存储,编写一个中序遍历二叉树的非递归过程。
7.假设二叉树采用链接存储方式存储,root指向根结点,p所指结点为任一给定的
结点。
编写一个求出从根结点到p所指结点之间路径的函数。
8.在二叉树中查找值为x的结点,试设计打印值为x的结点的所有祖先的算法,假
设值为x的结点不多于1个。
9.假设二叉树采用链接存储方式存储,试设计一个算法计算一棵给定二叉树的所有
结点数。
10.假设二叉树采用链接存储方式存储,试设计一个算法计算一棵给定二叉树的单孩
子结点数。