结构体.和->的用法区别
在C语言中,顺序表是使用结构体来实现的,可以使用.运算符来访问结构体成员。而->运算符则是用于通过指针访问结构体或者结构体指针的成员。
顺序表通常是定义为一个结构体类型,例如:
c
typedef struct {
int data[MAXSIZE];
int length;
} SqList;
如果你定义了一个顺序表的结构体指针,可以使用->运算符来访问结构体的成员。例如:
c
SqList *listPtr; // 声明一个指向SqList结构体的指针
// 使用malloc函数动态分配内存给顺序表
listPtr = (SqList *)malloc(sizeof(SqList));
// 访问顺序表的成员
listPtr->length = 0;
如果你直接定义了一个顺序表的结构体变量,可以使用.运算符来访问结构体的成员。例如:
c
SqList list; // 声明一个SqList结构体变量
// 访问顺序表的成员
list.length = 0;
所以,可以根据具体情况使用.或->来访问顺序表结构体的成员,取决于你使用的是结构体变量还是结构体指针。
题集(32道)
-
数据的逻辑结构分为集合、线性结构 、___和 图形结构 4种基本类型。
答案:
树形结构
-
结点按逻辑关系依次排列形成一条"锁链"的数据结构是___。
答案:
线形结构
-
一个数据结构在计算机中的___称为存储结构。
答案
存储形式或映象或表示。
-
数据的存储结构包括__的表示和__的表示。
答案数据元素 、数据元素之间关系。
解析:数据存储结构是逻辑结构的机内实现,需要存储所有数据元素及其关系。 学习目标:1、掌握数据结构的基本概念
-
顺序存储方法是把逻辑上__存储在物理位置上__里;链式存储方法中结点之间的逻辑关系是由__的。
答案:相邻的元素 、相邻的存储单元 、结点附加的指针域表示。
解析:数据的顺序存储结构是数据逻辑结构的一种直接映射。
学习目标: 2、掌握数据逻辑结构和存储结构的映射关系 -
数据的存储结构分为顺序、___、索引和哈希表4种基本类型。
答案:
链式。
学习目标:2、掌握数据逻辑结构和存储结构的映射关系
-
所有存储结点存放在一个连续的存储区里,利用结点在存储器中的相对位置来表示数据元素之间的逻辑关系。这种存储方式是___。
答案顺序存储结构。
解析:数据的顺序存储结构是数据逻辑结构的一种直接映射。
学习目标:2、掌握数据逻辑结构和存储结构的映射关系
-
程序设计语言中已经实现了的数据结构称为___。
答案数据类型。
解析:数据类型是高级语言中直接支持的数据结构。
学习目标:3、掌握数据类型和数据结构的区别和联系
-
(判断题)数据运算的实现是基于数据的逻辑结构的。
答案
错误。
解析:
数据的运算描述是定义在数据的逻辑结构上的,而数据运算的具体实现与存储结构相关联 ,所以数据运算的实现是基于数据的存储结构的。
学习目标:1、掌握数据结构的基本概念
-
(判断题)任何数据结构都具备3个基本运算:插入、删除和查找。
答案
错误。
解析:
如队列和栈等数据结构并不具备查找基本运算,所以并非任何数据结构都具备插入、删除和查找基本运算。学习目标:1、掌握数据结构的基本概念
-
(判断题)非线性结构中,每个元素最多只有一个前趋元素。
答案
错误。
解析:
非线性结构中,每个元素可能有多个前趋元素。
学习目标:1、掌握数据结构的基本概念
-
(简答题)什么是数据结构?有关数据结构的讨论涉及哪三个方面?
答案:
按某种逻辑关系组织起来的一组数据元素,按一定的存储方式存储于计算机中,并在其上定义了一个运算的集合,称为一个数据结构。 数据结构涉及以下三个方面的内容:
- 数据成员以及它们相互之间的逻辑关系,也称为数据的逻辑结构;
- 数据成员及其关系在计算机存储器内的存储表示,也称为数据的物理结构,简称为存储结构;
- 施加于该数据结构上的操作。 数据的逻辑结构是从逻辑关系上描述数据,它与数据的存储不是一码事,是与计算机存储无关的。
因此,数据的逻辑结构可以看作是从具体问题中抽象出来的数据模型,是数据的应用视图。数据的存储结构是逻辑数据结构在计算机存储器中的实现(亦称为映像),它是依赖于计算机的,是数据的物理视图。数据的操作是定义于数据逻辑结构上的一组运算,每种数据结构都有一个运算的集合。例如搜索、插入、删除、更新、排序等。
解析:
学习目标:1、掌握数据结构的基本概念
-
(简答题)简述数据与数据元素的关系与区别。
答案:
凡是能被计算机存储、加工的对象统称为数据,数据是一个集合。数据元素是数据的基本单位,是数据的个体。数据元素与数据之间的关系是元素与集合之间的关系。
解析:
学习目标:1、掌握数据结构的基本概念
-
(简答题)设数据的逻辑结构如下: B2=(D,R) D={1,2,3,4,5,6}
R={r} r={<1,2>,<2,4>,<1,3>,❤️,4>,❤️,5> ,❤️,6>,<5,6>} 说明是何种数据结构。

答案
其中每个结点都零个或多个前趋结点,每个结点都零
个或多个后继结点,所以它是一种图形结构。
解析:
该二元组表示对应的逻辑结构如图1.3所示。

学习目标:1、掌握数据结构的基本概念
-
(简答题)简述逻辑结构与存储结构的关系。
答案
在数据结构中,逻辑结构与计算机无关,存储结构是数据元素之间的逻辑关系在计算机中的表示。存储结构不仅将逻辑结构中所有数据元素存储到计算机内存中,而且还要在内存中存储各数据元素间的逻辑关系。通常情况下,一种逻辑结构可以有多种存储结构,例如,线性结构可以采用顺序存储结构或链式存储结构表示。
解析:
(同答案)
学习目标:2、掌握数据逻辑结构和存储结构的映射关系
-
(简答题)数据的逻辑结构分为线性结构和非线性结构两大类。
线性结构包括线性表、队列和栈等。非线性结构包括树形结构和图等、这两类结构各自的特点是什么?答案
线性结构的特点是:在结构中所有数据元素都处于一个序列中,有且仅有一个开始元素和一个终端元素,并且所有数据元素都最多有一个前驱和一个后继。例如,线性表等就是典型的线性结构 非线性结构的特点是:一个数据元素可能有零个、一个或多个前驱和后继。例如,树、图等都是典型的非线性结构。
解析:
学习目标:1、掌握数据结构的基本概念
-
(简答题)简述数据结构中运算描述和运算实现的异同。
答案
运算描述是指逻辑结构施加的操作,而运算实现是指一个完成该运算功能的算法。它们的相同点是,运算描述和运算实现都能完成对数据的"处理"或某种特定的操作。不同点是,运算描述只是描述处理功能,不包括处理步骤和方法,而运算实现的核心则是处理步骤。
解析:
数据结构中所指的运算包括运算描述和运算实现,前
者是运算功能的描述,后者是运算功能的实现,前者
基于数据的逻辑结构,后者基于数据的存储结构。
学习目标:1、掌握数据结构的基本概念
-
(简答题)什么是存储实现?什么是运算实现?
答案
存储实现就是设计数据的存储结构,是建立数据的机内表示,包括两个部分:数据元素和数据元素之间关系的存储。在某种存储实现的基础上各种运算的具体实现称为运算实现,运算实现的核心是设计实现某一运算的处理步骤,即算法设计。
解析:
(同答案)
学习目标:1、掌握数据结构的基本概念
-
(简答题)简述数据结构和数据类型两个概念之间的区别。
答案:
数据结构定义了一组按某些关系结合在一起的数组元素。数据类型不仅定义了一组带结构的数据元素,而且还在其上定义了一组操作。
解析:
数据结构是相互之间存在一种或多9种特定关系的数据元素的集合。数据类型是一个值的集合和定义在这个值集上的一组操作的总称。
学习目标:3、掌握数据类型和数据结构的区别和联系
-
(简答题)在定义一种数据结构时,通常指出它的基本运算,什么叫基本运算?
答案
计算机是数据处理的工具,可以根据应用的需要对一个数据结构实施许多适合的运算,基本运算是其中的一部分,是常用的运算,其他运算可以通过调用基本运算来实现,但不能说对该数据结构只能实施这些基本运算。 像计算机语言中,每种数据类型就是一种实现了的数据结构,它提供了一系列基本运算,如int数据类型提供了加、减、乘和除等基本运算,我们通过编程使用这些基本运算可以完成int数据更复杂的计算功能。
解析:
数据结构是相互之间存在一种或多种特定关系的数据元素的集合。数据类型是一个值的集合和定义在这个值集上的一组操作的总称。
学习目标:3、掌握数据类型和数据结构的区别和联系
-
(简答题)举一个数据结构的例子,叙述其逻辑结构、存储结构和运算三个方面的内容。
答案:
例如有一个学生成绩表,如表1.1所示为一个班的学生各门课的成绩。这个表就是一个数据结构(表中呈现的是逻辑结构)。每个记录(包括学号,姓名,成绩)就是一个数据元素,对于整个表来说,只有一个开始元素(无前趋元素)和一个终端元素(无后继元素),其他的元素则各有一个且只有一个前趋和后继元素。这几个特征就确定了这个表属于线性结构。

那么怎样把这个表中的数据存储到计算机里呢?如何用高级语言表示各元素之间的关系呢?是用一片连续的内存单元来存放这些记录(如用数组表示),还是随机存放各结点数据再用指针进行链接呢?这就是存储结构的问题。例如,可以采用顺序存储方式,该学生成绩表的所有记录存放在一个数组中,该结构体数组stud定义如下:
c
struct {
int no;
char name[10];
int score;
}stud[MaxSize];
若用链式存储方式,每个结点存放一个记录,结点的数据类型定义如下:
c
struct node{
int no;
char name[10];
int score;
struct node *next; // 指向下一结点的指针
}
从中看出,学生成绩表作为一个逻辑结构可以采用多种存储方法。 任何数据结构必然含有某些运算,通常一个运算对应某个功能,如学生成绩表一般包含学生记录的查询、修改、删除等运算。在所有运算中有一部分运算称为基本运算,基本运算是指功能单一的运算,其他较复杂的运算可以通过调用基本运算来实现。 运算分为运算功能描述(亦称抽象运算)和运算
实现两种层次,前者仅给出运算的功能说明,即指出运算的名称、相关参数和实现的功能,后者是在某种存储结构之上具体实现对应的功能,称之为算法。
解析:
同一逻辑结构可以设计多种存储结构,运算描述是基于逻辑结构的,而运算实现是基于存储结构的。
学习目标:2、掌握数据逻辑结构和存储结构的映射关系
-
(简答题)数据运算是数据结构的一个重要方面。试举例说明两个数据结构的逻辑结构和存储方式相似,只是对于运算的定义不同,因而两个数据结构具有显著不同的特性,是两种不同的数据结构。
答案:
在数据结构中这类例子较多,如顺序表和字符串、栈和队列等。下面以二叉树和二叉排序树进行说明。
首先,二叉树和二叉排序树是两个不同的数据结构。二叉树 的定义为:二叉树是有限的结点集合,这个集合或者是空,或者由一个根结点和两棵互不相交的称为左子树和右子树的二叉树组成。 二叉排序树 的定义为:二叉排序树或者是空树,或者是满足如下性质的二叉树: 1.若它的左子树非空,则左子树上所有记录的值均小于根记录的值; 2.若它的右子树非空,则右子树上所有记录的值均大于根记录的值; 3.左、右子树本身又各是一棵二叉排序树。 两者在逻辑结构和存储方式完全相同,因为二叉排序树完全采用二叉树的逻辑表示和存储方式。两者的运算有建立树、插入结点、删除结点和查找结点等。 对于二叉树和二叉排序树,这些运算的定义是不同的。如查找结点时,在二叉树中查找某结点需要对其中结点进行遍历,其时间复杂度为O(n),而在二叉排序树中查找结点是一层层向下查找的,其时间复杂度约为O(h)(h为二叉排序树的高度)。如插入结点时,二叉树中可以在任何地方插入一个结点,而二叉排序树插入一个结点后,必须使其仍满足二叉排序树的特性。
解析:
一个数据结构可以用一个抽象数据类型来描述,抽象数据类型由逻辑结构和基本运算两部分组成,前者包含数据对象和关系集,这里的基本运算是抽象层面的,是功能描述。所以逻辑结构相同而基本运算不同,则构成不同的数据结构,不同数据结构的区分与其存储结构无关。
学习目标:4、掌握利用抽象数据类型表述求解问题的方法
-
什么是算法?算法的5个特性是什么?试根据这些特性解释算法与程序的区别。
答案
通常定义算法为解决某一特定任务而规定的一个指令序列。一个算法应当具有以下特性:
① 有输入。一个算法必须有0个或多个输入。它们是算法开始运算前给予算法的量。这些输入取自于特定的对象的集合。它们可以使用输入语句由外部提供,也可以使用赋值语句在算法内给定。
② 有输出。一个算法应有一个或多个输出,输出的量是算法计算的结果。 ③确定性。算法的每一步都应确切地、无歧义地定义。对于每一种情况,需要执行的动作都应严格地、清晰地规定。
④ 有穷性。一个算法无论在什么情况下都应在执行有穷步后结束。
⑤ 有效性。算法中每一条运算都必须是足够基本的。就是说,它们原则上都能精确地执行,甚至人们仅用笔和纸做有限次运算就能完成。
算法和程序不同,程序可以不满足上述的特性。例如,一个操作系统在用户未使用前一直处于"等待"的循环中,直到出现新的用户事件为止。这样的系统可以无休止地运行,直到系统停工。
解析:
学习目标:5、掌握算法的特性和采用C/C++语言描述算法的方法
-
(简答题)有以下用C/C++语言描述的算法,说明其功能:
c
int sum(int n){
int i=0, s=0;
while(s<n){
i++;
s+=i;
}
return i;
}
答案:
求满足i(i+1)/2≥n条件的最小整数i。
解析:
每循环一次i增1,s用于累加i值,所以s=1+2+...+i=i(i+1)/2,当s≥n时,返回i并结束。
学习目标:5、掌握算法的特性和采用C/C++语言描述算法的方法
-
(简答题)在C/C++中提供了引用运算符,简述其在算法设计中的主要作用。
在算法设计中,一个算法通常用一个或多个C/C++函数来实现,在C/C++函数之间传递参数时有两种情况,
一是从实参到形参的单向值传递,
二是实参和形参之间的双向值传递。对形参使用引用运算符,即在形参名前加上"&",不仅可以实现实参和形参之间的双向值传递,而且使算法设计简单明晰。
解析:
在用C/C++语言描述算法时,通常将算法设计成一个或多个函数,函数间传递参数分为单向传递(从实参到形参)和双向传递(从实参到形参和从形参到实参)两种,当需要双向传递时可受用引用运算符提高算法的可读性。
学习目标:5、掌握算法的特性和采用C/C++语言描述算法的方法
-
(简答题)当一个实参对象占用的存储空间较大时,应最好说明为何种类型以节省参数值的传输时间和存储参数的空间。
答案
当一个实参对象占用的存储空间较大时,应最好说明
为引用类型参数以节省参数值的传输时间和存储参数
的空间。因为此种情况下,形参和实参共享同一存储
空间,函数调用相当于仅传递地址(指针),不会为
形参分配与实参一样大小的存储空间。
解析:
学习目标:5、掌握算法的特性和采用C/C++语言描
述算法的方法
-
(简答题)当为解决某一问题而选择数据结构时,应从哪些方面考虑?
答案
通常从两方面考虑:第一是算法所需的存储空间量 ;第二是算法所需的时间 。对算法所需的时间又涉及以下几点: 1.程序运行时所需输入的数据总量。 2.计算机执行每条指令所需的时间。 3.程序中指令重复执行的次数。
解析:
在设计求解问题的算法时,要考虑算法的性能,即算法的时间和空间消耗。
学习目标:6、掌握算法设计目标和分析方法,包括时间复杂度和空间复杂度分析
-
(算法分析题)分析以下算法的时间复杂度。
c
void fun(int n){
int x=n, y=100;
while(y>0)
if(x>100){
x = x-10;
y--;
}else x++;
}
答案
O(1)。
解析:
本算法中的基本操作语句是while循环体内的语句,它的执行次数与问题规模n无关,所以算法的时间复杂度为O(1)。
学习目标:6、掌握算法设计目标和分析方法,包括时间复杂度和空间复杂度分析
- (算法分析题)分析以下算法的时间复杂度。
c
void func(int n){
int i=1, k=100;
while(i<=n){
k++;
i+=2;
}
}
答案
O(n)。
解析:
设while循环语句执行的次数为T(n),i从1开始递增,最后取值为1+2T(n),有:i=1+2T(n)≤n,即T(n)≤(n-1)/2=O(n),所以该算法的时间复杂度O(n)。
学习目标:6、掌握算法设计目标和分析方法,包括时间复杂度和空间复杂度分析
- (算法分析题)分析以下算法的时间复杂度。
c
void fun(int n){
int i, j, k;
for(i=1; i<=n; i++)
for(j=1; j<=n; j++){
k=1;
while(k<=n) k=5*k;
}
}
答案

解析:
算法中的基本操作为k=5k语句,对于: k=1;while(k<=n) k=5 k; 该语句的执行频度为 ,再加上外层两重循环,所以本算法的时间复杂度O(n^2log5n)。
学习目标:6、掌握算法设计目标和分析方法,包括时间复杂度和空间复杂度分析
- (简答题)某算法的时间复杂度为O(n^3) ,当n=5时执行时间为50s,问当n=15时,其执行时间是多少?

- (简答题)设有算法如下:

