数据结构作业(C语言版)习题
数据结构C语言版期末考试试题(有答案)
数据结构C语言版期末考试试题(有答案)一、选择题(每题5分,共40分)1. 下列关于数据结构的叙述中,正确的是()A. 数据结构是研究数据元素的存储结构的学科B. 数据结构是研究数据元素之间逻辑关系的学科C. 数据结构是研究数据元素及其之间关系的学科D. 数据结构是研究数据元素的排序和查找的学科答案:C2. 在线性表中,第一个元素存储在()A. 随机存储单元B. 数据结构的起始位置C. 数据结构的结束位置D. 数据结构的中间位置答案:B3. 下列哪种排序算法的时间复杂度是O(nlogn)()A. 冒泡排序B. 选择排序C. 插入排序D. 快速排序答案:D4. 在下列数据结构中,哪一个不是树形结构()A. 二叉树B. 树C. 图D. 队列答案:D5. 在下列数据结构中,哪一个不是线性结构()A. 栈B. 队列C. 双向链表D. 图答案:D6. 在顺序表中,元素之间逻辑上的顺序关系是由()来体现的。
A. 数据元素的物理位置B. 指针C. 引用D. 数组下标答案:A7. 在下列排序算法中,哪一个是不稳定的排序算法()A. 冒泡排序B. 选择排序C. 插入排序D. 快速排序答案:B8. 在下列查找算法中,哪一个的平均查找长度最小()A. 顺序查找B. 二分查找C. 二叉树查找D. 哈希查找答案:B二、填空题(每题5分,共30分)9. 一个栈的顺序存储空间为S[1..m],栈顶指针为top,当栈为空时,top的值为______。
答案:010. 在链表中,每个节点至少包含两个域,即______和______。
答案:数据域;指针域11. 在二叉树中,度为0的节点数n0与度为2的节点数n2之间的关系为______。
答案:n0 = n2 + 112. 在顺序查找算法中,查找失败时,算法的时间复杂度为______。
答案:O(n)13. 在哈希表中,处理冲突的两种主要方法是______和______。
答案:开放地址法;链地址法三、判断题(每题5分,共20分)14. 线性表可以是空表。
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语言版)1800道题及答案[完整版]
数据结构(C语言版)1800道题及答案[完整版]数据结构(C语言版)1800道题及答案[完整版]数据结构1800例题与答案第一章绪论一、选择题(每小题2分)1.算法的计算量的大小称为计算的(B )。
【北京邮电大学2000 二、3 (20/8分)】A.效率 B.复杂性 C.现实性 D.难度2.算法的时间复杂度取决于(C)。
【中科院计算所 1998 二、1 (2分)】A.问题的规模 B.待处理数据的初态 C.A和B D.都不是3.计算机算法指的是(① C ),它必须具备(② B )这三个特性。
① A.计算方法B.排序方法C.解决问题的步骤序列 D.调度方法② A.可执行性、可移植性、可扩充性B.可执行性、确定性、有穷性C.确定性、有穷性、稳定性 D.易读性、稳定性、安全性【南京理工大学1999 一、1(2分)【武汉交通科技大学1996 一、1(4分)】4.一个算法应该是( B )。
【中山大学 1998 二、1(2分)】A.程序 B.问题求解步骤的描述C.要满足五个基本特性 D.A和C.5.下面关于算法说法错误的是( D )【南京理工大学 2000 一、1(1.5分)】A.算法最终必须由计算机程序实现B.为解决某问题的算法同为该问题编写的程序含义是相同的C. 算法的可行性是指指令不能有二义性D. 以上几个都是错误的6. 下面说法错误的是(C )【南京理工大学2000 一、2 (1.5分)】(1)算法原地工作的含义是指不需要任何额外的辅助空间(2)在相同的规模n下,复杂度O(n)的算法在时间上总是优于复杂度O(2n)的算法(3)所谓时间复杂度是指最坏情况下,估算算法执行时间的一个上界(4)同一个算法,实现语言的级别越高,执行效率就越低A.(1) B.(1),(2) C.(1),(4) D.(3)7.从逻辑上可以把数据结构分为( C )两大类。
【武汉交通科技大学 1996 一、4(2分)】A.动态结构、静态结构 B.顺序结构、链式结构C.线性结构、非线性结构 D.初等结构、构造型结构8.以下与数据的存储结构无关的术语是(D )。
数据结构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语言版试题及答案
数据结构c语言版试题及答案一、选择题(每题2分,共10分)1. 在C语言中,以下哪个关键字用于定义结构体?A. structB. unionC. enumD. typedef答案:A2. 若有一个结构体数组,下列哪个函数可以用来初始化数组中的每个元素?A. memsetB. memcpyC. strcpyD. bzero答案:A3. 在C语言中,以下哪个函数用于动态分配内存?A. mallocB. callocC. reallocD. all of the above答案:D4. 对于一个链表,以下哪个操作是正确的?A. 插入节点B. 删除节点C. 遍历链表D. all of the above答案:D5. 在C语言中,以下哪个函数用于释放动态分配的内存?A. freeB. mallocC. callocD. realloc答案:A二、填空题(每题3分,共15分)1. 结构体定义的关键字是______。
答案:struct2. 在C语言中,动态分配内存失败时,malloc函数返回______。
答案:NULL3. 单链表的头节点指针通常初始化为______。
答案:NULL4. 双向链表中,每个节点包含______个指针。
答案:两个5. 树的深度优先遍历包括______、中序遍历和后序遍历。
答案:前序遍历三、简答题(每题5分,共20分)1. 请简述C语言中结构体和联合体的区别。
答案:结构体(struct)可以包含不同类型的数据,并且可以有多个实例;联合体(union)可以包含不同类型的数据,但是只能有一个实例,即在任意时刻只能存储其中一个成员的值。
2. 动态内存分配的优点是什么?答案:动态内存分配允许程序在运行时根据需要分配内存,这样可以更有效地使用内存资源,并且可以创建大小不固定的数据结构。
3. 链表相比于数组有哪些优点?答案:链表的优点包括动态大小,可以灵活地插入和删除节点,不需要预先知道数据的大小。
数据结构试题及答案c语言版
数据结构试题及答案c语言版一、选择题(每题2分,共20分)1. 在C语言中,以下哪个选项是正确的链表定义?A. struct Node { int data; struct Node *next; };B. struct Node { int data; Node *next; };C. struct Node { int data; struct Node *next; } *Node;D. struct Node { int data; Node *next; };答案:A2. 下列关于栈的描述中,错误的是?A. 栈是一种后进先出(LIFO)的数据结构。
B. 栈的插入操作称为push。
C. 栈的删除操作称为pop。
D. 栈可以存储任意数量的数据。
答案:D3. 在C语言中,以下哪个关键字用于定义一个结构体?A. structB. unionC. enumD. typedef答案:A4. 下列关于队列的描述中,正确的是?A. 队列是一种先进先出(FIFO)的数据结构。
B. 队列只能从队尾进行插入操作。
C. 队列的插入操作称为pop。
D. 队列的删除操作称为push。
答案:A5. 在C语言中,以下哪个函数用于创建一个动态数组?A. mallocB. callocC. reallocD. all of the above答案:D6. 下列关于二叉树的描述中,错误的是?A. 二叉树的每个节点最多有两个子节点。
B. 二叉树的子节点被称为左子树和右子树。
C. 二叉树的遍历方式包括前序、中序、后序。
D. 二叉树的每个节点只能有一个子节点。
答案:D7. 在C语言中,以下哪个函数用于释放动态分配的内存?A. freeB. mallocC. callocD. realloc答案:A8. 下列关于图的描述中,错误的是?A. 图是由顶点和边组成的数据结构。
B. 图的边可以是有向的,也可以是无向的。
C. 图的顶点可以是孤立的,没有边与之相连。
数据结构(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参考答案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. 图的拓扑有序序列不是唯一的。
c语言版数据结构试题及答案
习题一一、单选题1.在一个带有附加表头结点的单链表HL中,若要向表头插入一个由指针p指向的结点,则执行( B )。
A. HL=p; p->next=HL;B. p->next=HL->next; HL->next=p;C. p->next=HL; p=HL;D. p->next=HL; HL=p;2.若顺序存储的循环队列的QueueMaxSize=n,则该队列最多可存储( B )个元素.A. nB.n-1C. n+1D.不确定3.下述哪一条是顺序存储方式的优点?(A )A.存储密度大 B.插入和删除运算方便C. 获取符合某种条件的元素方便D.查找运算速度快4.设有一个二维数组A[m][n],假设A[0][0]存放位置在600(10),A[3][3]存放位置在678(10),每个元素占一个空间,问A[2][3](10)存放在什么位置?(脚注(10)表示用10进制表示,m>3)DA.658 B.648 C.633 D.6535.下列关于二叉树遍历的叙述中,正确的是( AD ) 。
A. 若一个树叶是某二叉树的中序遍历的最后一个结点,则它必是该二叉树的前序遍历最后一个结点B.若一个点是某二叉树的前序遍历最后一个结点,则它必是该二叉树的中序遍历的最后一个结点 C.若一个结点是某二叉树的中序遍历的最后一个结点,则它必是该二叉树的前序最后一个结点D.若一个树叶是某二叉树的前序最后一个结点,则它必是该二叉树的中序遍历最后一个结点6.k层二叉树的结点总数最多为( A ).A.2k-1 B.2K+1 C.2K-1 D. 2k-17.对线性表进行二分法查找,其前提条件是( B ).A.线性表以链接方式存储,并且按关键码值排好序B.线性表以顺序方式存储,并且按关键码值的检索频率排好序C.线性表以顺序方式存储,并且按关键码值排好序D.线性表以链接方式存储,并且按关键码值的检索频率排好序8.对n个记录进行堆排序,所需要的辅助存储空为Cn) B. O(n) C. O(1) D. O(n2)A. O(1og29.对于线性表(7,34,77,25,64,49,20,14)进行散列存储时,若选用H(K)=K %7作为散列函数,则散列地址为0的元素有( D )个,A.1 B.2 C.3 D.410.下列关于数据结构的叙述中,正确的是( D ).A.数组是不同类型值的集合B.递归算法的程序结构比迭代算法的程序结构更为精炼C.树是一种线性结构D.用一维数组存储一棵完全二叉树是有效的存储方法二、填空题1.数据的逻辑结构被分为_集合结构、__线性结构、_树结构和_图结构四种。
数据结构C语言版习题详细答案资料
InitComplex(&C,re,im) 操作结果:构造一个复数 C,其实部和虚部分别为 re 和 im
DestroyCmoplex(&C) 操作结果:销毁复数 C
Get(C,k,&e) 操作结果:用 e 返回复数 C 的第 k 元的值
int Time(int n) { count = 0; x=2; while(x<n/2) { x *= 2; count++; } return count;
}
解: o(log 2 n)
count= log 2 n 2
1.11 已知有实现同一功能的两个算法,其时间复杂度分别为 O 2n 和 O n10 ,假设现实计算机可连续
1.14 判断下列各对函数 f n 和 g n ,当 n 时,哪个函数增长更快?
(1) f n 10n2 ln n!10n3 , gn 2n4 n 7
1.6 在程序设计中,常用下列三种不同的出错处理方式: (1) 用 exit 语句终止执行并报告错误; (2) 以函数的返回值区别正确返回或错误返回; (3) 设置一个整型变量的函数参数以区别正确返回或某种错误返回。
试讨论这三种方法各自的优缺点。 解:(1)exit 常用于异常错误处理,它可以强行中断程序的执行,返回操作系统。 (2)以函数的返回值判断正确与否常用于子程序的测试,便于实现程序的局部控制。 (3)用整型函数进行错误处理的优点是可以给出错误类型,便于迅速确定错误。
} 解:(1) n-1 (2) n-1 (3) n-1
n(n 1)
(4) n+(n-1)+(n-2)+...+1=
数据结构习题(C语言版)
1.2基本题1.2.1 单项选择题1.数据结构是一门研究非数值计算的程序设计问题中计算机的1 以及它们之间的2 和运算等的学科。
1、A.操作对象B.计算方法C.逻辑存储D.数据映象2、A.结构B.关系C.运算D.算法答:1、A 2、B2.数据结构被形式地定义为(K,R),其中K是1 的有限集合,R是K上的2 有限集合。
答:1、B 2、D1、A.算法 B.数据元素 C.数据操作 D.逻辑结构2、A.操作 B.映象 C.存储 D.关系3.在数据结构中,从逻辑上可以把数据结构分成。
答:CA.动态结构和静态结构B.紧凑结构和非紧凑结构C.线性结构和非线性结构D.内部结构和外部结构4.线性表的顺序存储结构是一种1 的存储结构,线性表的链式存储结构是一种2 的存储结构。
A.随机存取B.顺序存取C.索引存取D.散列存取答:1、A 2、B5.算法分析的目的是1 ,算法分析的两个主要方面是 2 。
答:1、C 2、A1、A.找出数据结构的全理性 B.研究算法中的输入和输出的关系C.分析算法的效率以求改进D.分析算法的易懂性和文档性2、A.空间复杂性和时间复杂性 B.正确性和简明性 C.可读性和文档性 D.数据复杂性和程序复杂性6.计算机算法指的是1 ,它必具备输入、输出和2 等五个特性。
1、A.计算方法 B.排序方法 C.解决问题的有限运算序列 D.调度方法2、A.可行性、可移植性和可扩充性 B.可行性、确定性和有穷性C.确定性、有穷性和稳定性D.易读性、稳定性和安全性答:1、C 2、B7.线性表的逻辑顺序与存储顺序总是一致的,这种说法。
A.正确 B.不正确答:B8.线性表若采用链式存储结构时,要求内存中可用存储单元的地址。
答:DA.必须是连续的B.部分地址必须是连续的C.一定是不连续的D.连续或不连续都可以9.在以下的叙述中,正确的是。
A.线性表的线性存储结构优于链表存储结构B.二维数组是其数据元素为线性表的线性表C.栈的操作方式是先进先出D.队列的操作方式是先进后出答:B10.每种数据结构都具备三个基本运算;插入、删除和查找,这种说法。
数据结构c语言版考试题及答案
数据结构c语言版考试题及答案一、单项选择题(每题2分,共20分)1. 在C语言中,以下哪个选项不是合法的数组声明?A. int a[10];B. int b[2][3];C. int c[];D. int d[0];答案:D2. 链表与数组相比,以下哪个特点是链表独有的?A. 随机访问B. 动态存储分配C. 连续存储D. 固定大小答案:B3. 在C语言中,以下哪个函数用于创建一个单链表节点?A. mallocB. callocC. reallocD. free答案:A4. 栈的后进先出(LIFO)特性是指?A. 最后插入的元素最先被删除B. 最先插入的元素最先被删除C. 最后插入的元素最后被删除D. 最先插入的元素最后被删除答案:A5. 在二叉树中,叶子节点是指?A. 没有子节点的节点B. 只有一个子节点的节点C. 有两个子节点的节点D. 既没有左子节点也没有右子节点的节点答案:A6. 哈希表解决冲突的常用方法不包括?A. 开放寻址法B. 链地址法C. 线性探测法D. 排序法答案:D7. 在图的遍历中,深度优先搜索(DFS)使用的是?A. 栈B. 队列C. 链表D. 数组答案:A8. 快速排序算法的时间复杂度在最好情况下是?A. O(n^2)B. O(n)C. O(nlogn)D. O(logn)答案:C9. 以下哪个不是二叉搜索树的性质?A. 左子树上所有节点的值小于根节点的值B. 右子树上所有节点的值大于根节点的值C. 左子树和右子树都是二叉搜索树D. 所有节点的值都相等答案:D10. 以下哪个算法不是排序算法?A. 冒泡排序B. 选择排序C. 插入排序D. 深度优先搜索答案:D二、填空题(每题2分,共20分)1. 在C语言中,动态分配的内存需要使用________函数来释放。
答案:free2. 一个完全二叉树的第i层(从0开始计数)最多有________个节点。
答案:2^i3. 在图的表示方法中,邻接矩阵适合表示________图,邻接表适合表示________图。
(完整word版)数据结构(c语言版)课后习题答案完整版资料
第1章绪论5.选择题:CCBDCA6.试分析下面各程序段的时间复杂度。
(1)O(1)(2)O(m*n)(3)O(n2)(4)O(log3n)(5)因为x++共执行了n—1+n—2+……+1= n(n—1)/2,所以执行时间为O(n2)(6)O(n)第2章线性表1.选择题babadbcabdcddac2.算法设计题(6)设计一个算法,通过一趟遍历在单链表中确定值最大的结点。
ElemType Max (LinkList L ){if(L—〉next==NULL) return NULL;pmax=L-〉next;//假定第一个结点中数据具有最大值p=L-〉next—>next;while(p != NULL ){//如果下一个结点存在if(p->data > pmax—>data) pmax=p;p=p->next;}return pmax-〉data;(7)设计一个算法,通过遍历一趟,将链表中所有结点的链接方向逆转,仍利用原表的存储空间.void inverse(LinkList &L) {// 逆置带头结点的单链表Lp=L-〉next;L->next=NULL;while (p){q=p—>next;// q指向*p的后继p->next=L—>next;L—>next=p; // *p插入在头结点之后p = q;}}(10)已知长度为n的线性表A采用顺序存储结构,请写一时间复杂度为O(n)、空间复杂度为O(1)的算法,该算法删除线性表中所有值为item的数据元素.[题目分析]在顺序存储的线性表上删除元素,通常要涉及到一系列元素的移动(删第i个元素,第i+1至第n个元素要依次前移)。
本题要求删除线性表中所有值为item的数据元素,并未要求元素间的相对位置不变。
因此可以考虑设头尾两个指针(i=1,j=n),从两端向中间移动,凡遇到值item的数据元素时,直接将右端元素左移至值为item的数据元素位置。
数据结构(C语言版)(第4版)习题
习题11.1选择题。
(1)计算机识别、存储和加工处理的对象统称为。
A.数据B.数据元素C.数据结构D.数据类型(2)数据结构通常是研究数据的及它们之间的联系。
A.存储和逻辑结构B.存储和抽象C.理想和抽象D.理想和逻辑(3)下列不是数据的逻辑结构的是。
A.散列结构 B.线性结构 C.树形结构 D.图状结构(4)数据结构被形式地定义<D,R>,其中D是的有限集,R是___的有限集。
A.算法 B.数据元素C.数据操作 D.逻辑结构(5)组成数据的基本单位是。
A.数据项 B.数据类型 C.数据元素 D.数据变量(6)设数据结构A=(D,R),其中,D={1,2,3,4},R={r},r={<1,2>,<2,3 >,<3,4>,<4,1>},则数据结构A是。
A.线性结构 B.树形结构 C.图状结构 D.集合(7)数据在计算机存储器中表示时,若物理地址与逻辑地址相同并且是连续的,则称为。
A.存储结构B.逻辑结构C.顺序存储结构D.链式存储结构(8)在数据结构的讨论中把数据结构从逻辑上分。
A.内部结构与外部结构B.静态结构与动态结构B.线性结构与非线性结构 D.紧凑结构与非紧凑结构(9)对于一个算法的评价,不包括以下方面的内容。
A.健壮性和可读性B.并行性C.正确性D.时间空间复杂度(10)算法分析的两个方面是。
A.空间复杂性和时间复杂性B.正确性和简明性C.可读性和文档性 D.数据复杂性和程序复杂性1.2填空题(1)数据结构是一门研究非数值计算的程序设计问题中计算机的以及它们之间的和运算等的学科。
(2)数据结构包括数据的结构和结构。
(3)数据结构从逻辑上划分为3种基本类型,即、和。
(4)数据的物理结构被分为、、和种类型。
(5)一种抽象数据结构类型包括和两个部分。
(6)数据的逻辑结构是指数据的存储结构是指(7)数据结构是指指数数据及其相互之间的当结点之间存在M对N(M:N)的联系时,称这种结构为当结点之间存在1对N(1:N)的联系时,称这种结构为(8)对算法从时间和空间两个方面进行衡量,分别称为分析。
数据结构C语言版章节练习题(1-6章)
数据结构章节练习题第一章绪论一、单选题1.一个数组元素a[i]与________的表示等价。
A、 *(a+i)B、 a+iC、 *a+iD、 &a+i2.下面程序段的时间复杂度为____________。
for(int i=0; i<m; i++)for(int j=0; j<n; j++)a[i][j]=i*j;A、 O(m2)B、 O(n2)C、 O(m*n)D、 O(m+n)3.执行下面程序段时,执行S语句的次数为____________。
for(int i=1; i<=n; i++)for(int j=1; j<=i; j++)S;A、 n2B、 n2/2C、 n(n+1)D、 n(n+1)/24.下面算法的时间复杂度为____________。
int f( unsigned int n ){ if ( n==0 || n==1 ) return 1; else return n*f(n-1); }A、 O(1)B、 O(n)C、 O(n2)D、 O(n!)二、填空题1.数据的逻辑结构被分为__________、_________、__________和__________四种。
2.数据的存储结构被分为__________、和__________两种。
3.在线性结构、树形结构和图形结构中,前驱和后继结点之间分别存在着________、________和________的联系。
4.一种抽象数据类型包括__________和__________两个部分。
5.当一个形参类型的长度较大时,应最好说明为_________,以节省参数值的传输时间和存储参数的空间。
6.当需要用一个形参访问对应的实参时,则该形参应说明为__________。
7.在函数中对引用形参的修改就是对相应__________的修改,对__________形参的修改只局限在该函数的内部,不会反映到对应的实参上。
数据结构C语言版部分习题及标准答案
数据结构C语言版部分习题及标准答案————————————————————————————————作者:————————————————————————————————日期:第二章习题与解答一判断题1.线性表的逻辑顺序与存储顺序总是一致的。
2.顺序存储的线性表可以按序号随机存取。
3.顺序表的插入和删除操作不需要付出很大的时间代价,因为每次操作平均只有近一半的元素需要移动。
4.线性表中的元素可以是各种各样的,但同一线性表中的数据元素具有相同的特性,因此是属于同一数据对象。
5.在线性表的顺序存储结构中,逻辑上相邻的两个元素在物理位置上并不一定紧邻。
6.在线性表的链式存储结构中,逻辑上相邻的元素在物理位置上不一定相邻。
7.线性表的链式存储结构优于顺序存储结构。
8.在线性表的顺序存储结构中,插入和删除时,移动元素的个数与该元素的位置有关。
9.线性表的链式存储结构是用一组任意的存储单元来存储线性表中数据元素的。
10.在单链表中,要取得某个元素,只要知道该元素的指针即可,因此,单链表是随机存取的存储结构。
二单选题 (请从下列A,B,C,D选项中选择一项)1.线性表是( ) 。
(A) 一个有限序列,可以为空;(B) 一个有限序列,不能为空;(C) 一个无限序列,可以为空;(D) 一个无序序列,不能为空。
2.对顺序存储的线性表,设其长度为n,在任何位置上插入或删除操作都是等概率的。
插入一个元素时平均要移动表中的()个元素。
(A) n/2 (B) n+1/2 (C) n -1/2 (D) n3.线性表采用链式存储时,其地址( ) 。
(A) 必须是连续的;(B) 部分地址必须是连续的;(C) 一定是不连续的;(D) 连续与否均可以。
4.用链表表示线性表的优点是()。
(A)便于随机存取(B)花费的存储空间较顺序存储少(C)便于插入和删除(D)数据元素的物理顺序与逻辑顺序相同5.某链表中最常用的操作是在最后一个元素之后插入一个元素和删除最后一个元素,则采用( )存储方式最节省运算时间。
习 题 _数据结构(C语言版)_[共4页]
(2)当n较大时,应该选用先进的排序方法。
对于先进的排序方法,从平均时间性能而言,快速排序最佳,是目前基于比较的排序方法中最好的方法。
但在最坏情况下,即当关键字基本有序时,快速排序的递归深度为n,时间复杂度为O(n2),空间复杂度为O(n)。
堆排序和归并排序不会出现快速排序的最坏情况,但归并排序的辅助空间较大。
这样,当n较大时,具体选用的原则是:①当关键字分布随机,稳定性不做要求时,可采用快速排序;②当关键字基本有序,稳定性不做要求时,可采用堆排序;③当关键字基本有序,内存允许且要求排序稳定时,可采用归并排序。
(3)可以将简单的排序方法和先进的排序方法结合使用。
例如,当n较大时,可以先将待排序序列划分成若干子序列,分别进行直接插入排序,然后再利用归并排序,将有序子序列合并成一个完整的有序序列。
或者,在快速排序中,当划分子区间的长度小于某值时,可以转而调用直接插入排序算法。
(4)基数排序的时间复杂度也可写成O(d·n)。
因此,它最适用于n值很大而关键字较小的序列。
若关键字也很大,而序列中大多数记录的“最高位关键字”均不同,则亦可先按“最高位关键字”不同将序列分成若干“小”的子序列,而后进行直接插入排序。
但基数排序使用条件有严格的要求:需要知道各级关键字的主次关系和各级关键字的取值范围,即只适用于像整数和字符这类有明显结构特征的关键字,当关键字的取值范围为无穷集合时,则无法使用基数排序。
(5)由于大多数情况下排序是按记录的主关键字进行的,则所用的排序方法是否稳定无关紧要。
若排序按记录的次关键字进行,则必须采用稳定的排序方法。
一般来说,如果排序过程中的“比较”是在“相邻的两个记录关键字”间进行的,则排序方法是稳定的。
值得提出的是,稳定性是由方法本身决定的,证明一种排序方法是稳定的,要从算法本身的步骤中加以证明;而证明排序方法是不稳定的,只需举出一个不稳定的实例来说明。
(6)在本章讨论的排序方法中,多数是采用顺序表实现的。
数据结构题集c语言版考试题及答案
数据结构题集c语言版考试题及答案一、单项选择题(每题2分,共20分)1. 在数据结构中,线性表的顺序存储结构是指()。
A. 用一组地址连续的存储单元依次存储线性表的元素B. 用一组地址不连续的存储单元依次存储线性表的元素C. 用数组来存储线性表的元素D. 用链表来存储线性表的元素答案:A2. 在一个长度为n的顺序表中,删除第i个元素(1≤i≤n)时,需要移动()个元素。
A. i-1B. n-iC. n-i+1D. i答案:B3. 对于一个有n个结点的线性表,采用链式存储结构时,进行查找第i个元素(1≤i≤n)的时间复杂度为()。
A. O(1)B. O(n)C. O(log2n)D. O(n^2)答案:B4. 在二叉树的遍历过程中,若一个结点的左子树为空,则该结点的右子树()。
A. 一定为空B. 一定不为空C. 可能为空,也可能不为空D. 以上说法都不对答案:C5. 在二叉排序树中,若某结点的左子树非空,则左子树中的所有结点的值()。
A. 都小于该结点的值B. 都大于该结点的值C. 都等于该结点的值D. 都大于等于该结点的值答案:A6. 一个具有n个顶点的连通图,其边数最少为()。
A. n-1B. nC. n+1D. 2n答案:A7. 在图的遍历中,深度优先搜索算法所对应的数据结构是()。
A. 栈B. 队列C. 链表D. 数组答案:A8. 哈希表的冲突解决方法中,开放定址法的特点是()。
A. 装填因子较大B. 装填因子较小C. 装填因子不受限制D. 以上说法都不对答案:B9. 快速排序算法的时间复杂度为()。
A. O(n)B. O(nlogn)C. O(n^2)D. O(logn)答案:B10. 用链表表示线性表的优点是()。
A. 插入和删除操作不需要移动元素B. 节省存储空间C. 可以方便地随机访问D. 可以动态分配存储空间答案:A二、填空题(每题2分,共20分)1. 在顺序表中,若p是指向第i个元素的指针,则p+5表示指向第()个元素的指针。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构作业(C 语言版)习题
1.4,试仿照三元组的抽象数据类型分别写出抽象数据类型复数和有理数的定义(有理数是其分子、分母均为自然数且分母不为零的分数)。
复数:
ADT Triplet
{
D={r,i|r,i 为实数}
R={<r,i>}
InitComplex(&C,re,im)
}ADT Complex
有理数:
ADT Triplet
{
D={c1,c2,c3 | c1,c2,c3∈Z,c3≠0};
R={<c1,c2>};
C3=c1/c2;
}ADT Triplet
1.9 假设n 为2的乘幂,并且n >2,试求下列算法的时间复杂度及变量count 的值(以n 的函数形式表示)。
int Time (int n){
count=0;x=2;
while(x <n/2){
x*=2;count++;
}
return(count)
}//Time
解:)(log 2n o
count=2log 2 n
1.16 试写一算法,自大至小依次输出顺序读入的三个整数X ,Y 和Z 的值。
Void bubble-sort(int a[X,Y ,Z],int i){
for (i=n-1,change=TRUE; i ≥&&change; --i){
change=FALSE;
for(j=0;j<i;++j)
if(a[j]>a[j+1]){a[j+1]←→a[j]change=TRUE;}
}
}//bubble-sort
解:
int max3(int x,int y,int z)
{
if(x>y)
if(x>z) return x;
else return z;
else
if(y>z) return y;
else return z;
}
2.1描述以下三个概念的区别:头指针,头结点,首元结点(第一个元素结点)。
头结点:在单链表的第一个结点之前附设一个结点,即称之为头结点
头指针:链表中第一个结点的存储位置即称之为头指针
首元结点:首元结点是指链表中存储线性表中第一个数据元素a1的结点
2.2填空题
(1)在顺序表中插入或删除一个元素,需要平均移动表中一半元素,具体移动的元素个数与表长和该元素在表中的位置有关。
(2)顺序表中逻辑上相邻的元素的物理位置必定相邻。
单链表中逻辑上相邻的元素的物理位置不一定相邻。
(3)在单链表中,除了首元结点外,任一结点的存储位置由其直接前驱结点的链域的性指示。
(40在单链表中设置头结点的作用是插入或删除首元素不必进行特殊处理。
2.4对以下单链表分别执行下列各程序段,并画出结果示意图。
(1)Q=P->next;
(2)L=P->next;
(3)R->data=P->data;
(4)R->data=P->next->data;
(5)P->next->next->next->data=P->data;
(6)T=P;
While(T!=NULL){T->data=T->data*2;T=t->next;}
(7)T=P
While(T->next!=NULL){T->data=T->data*2;T=T->next;}
2.5画出执行下列各行语句后各指针及链表的示意图。
L=(LinkList)malloc(sizeof(LNode));P=L
For(i=1;i<=4;i++){
p->next=(LinkList)malloc(sizeof(LNode));
P=P->next;p->data=i*2-1;
}
P->next=NULL;
for(i=4;i>=1;i--;)Ins-LinkList(L,i+1,i*2);
for(i=1;i<=3;i++)Del-LinkList(L,i);
解:
2.6已知L是无表头结点的单链表,且P结点既不是首元结点,也不是尾元结点,试从下列提供的答案中选择合适的语句序列。
A.在P结点后S结点的语句序列是:(4) (1)
B.在P 结点前S结点的语句序列是:(7) (11) (8) (4) (1)
C.在表首S结点的语句序列是:(5) (12)
D.在表尾S结点的语句序列是:(9) (1) (6)
(1)P->next=S;
(2)P->next=P->next->next;
(3)P->next=S->next;
(4)S->next=P->next;
(5)S->next==L;
(6)S->next=NULL;
(7)Q=P
(8)while(P->next!=Q)P=P->next;
(9)while(P->next!=NULL)P=P->next;
(10)P=Q
(11)P=L;
(12)L=S;
(13)L=P;
2.7
a.(11)(3)(14)
b.(10)(12)(8)(11)(3)(14)
c.(10)(12)(7)(3)(14)
d.(12)(11)(3)(14)
e(9)(11)(3)(14)
2.8
a.(7)(12)(6)(3)
b.(8)(13)(5)(4)
c.(15)(1)(11)(18)
d.(16)(2)(10)(18)
e.(9)(14)(17)
2.10
Status DeleteK(SqList &a,int i,int k)
{
int j;
if(i<0||i>a.length-1||k<0||k>a.length-i) return INFEASIBLE;
for(j=0;j<=k;j++)
a.elem[j+i]=a.elem[j+i+k];
a.length=a.length-k;
return OK;
}
2.1
3.解:
int LocateElem_L(LinkList &L,ElemType x)
{
int i=0;
LinkList p=L;
while(p&&p->data!=x)
{
p=p->next;
i++;
}
if(!p) return 0;
else return i;
}
2.14.解:
int ListLength_L(LinkList &L)
{
int i=0;
LinkList p=L;
if(p) p=p-next;
while(p){
p=p->next;
i++;
}
return i;
}
3.1.解:(1)123 231 321 213 132
(2) 可以得到135426的出站序列,但不能得到435612的出站序列。
因为4356出站说明12已经在栈中,1不可能先于2出栈。
3.3.解:stack
3.4.解:(1) 栈中的数据元素逆置
(2) 如果栈中存在元素e,将其从栈中清除
3. 12.解:char
3. 13解:队列逆置。