计算机软件基础(解答)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

三、解答题:

1、什么是常量?C语言中常量有哪几种类型?

答:常量:在程序运行过程中其值固定不变的量。C语言中的常量有整型、实型、字符型和字符串四种。

2、字符常量与字符串常量有什么区别?

答:表示形式不同,字符型常量用单引号括起来,而字符串常量用双引号括起来;存存所占的内存空间不同;允许的操作不同。

3、简述线性表的逻辑结构特征?

答:(1)对于非空的线性表;①有且仅有一个开始节点,有且仅有一个直接后继;②有且仅有一个终结节点,有且仅有一个直接前趋;③其余的内部节点有且仅有一个直接前趋和一个直接后断。(2)同一个线性表中的数据节点具有相同的属性。(3)线性表数据工点的个数为线性表的长度。

4、试描述头指针、头节点、开始节点的区别、并说明头指针和头节点的作用?

答:开始节点是指链表中的第一个节点,也就是没有直接前趋的那个节点。

链表的头指针是一指向链表开始节点的指针(没有头节点时),单链表由头指针唯一确定,因此单链表可以用头指针的名字来命名。

5、在顺序表中插入和删除一个节点需平均移动多少个节点?具体的移动次数取决于哪两个因素?

答:在等概率情况下,顺序表中插入一个节点需平均移动n / 2 个节点。删除一个节点需平均移动(n—1)/ 2个节点。具体的移动次数取决于顺序表的长度n以及需插入或删除的位置i 。i越接近n则所需移动的节点数越少。

6、简述扦环单链表的特点?

答:(1)循环单链表是将单链表首尾相接构成的;(2)最后一个指针或不为空,指向表头节点(即r →next=head);(3)单链表只能从前向后访问表中节点,无法找到某节点前面的其他节点;而循环单链表可以通过任一点来访问表中的其他节点。

7、为什么在单循环链表中设置尾指针比设置头指针更好?

答:尾指针是指向终端节点的指针,用它来表示单循环链表可以使得查找链表的开始节点和终端节点都很方便,设一带头节点的单循环链表,其尾指针为rear,则开始节点和终端节点的位置分别是rear→next→next和rear,查找时间都是O(1)。

若用头指针来表示该链表,则查找终端节点的时间为O(n)。

8、在单链表、双链表和单循环链表中,若仅知道指针p指向某节点,不知道头指针,能否将节点*p从相应的链表中删去?若可以,其时间复杂度各为多少?

答:下面分别讨论三种链表的情况。(1)单链表。若指针p指向某节点时,能够根据该指针找到其直接后继,能够顺后继指针链找到*p节点后的节点。但是由于不知道其头指针,所以无法访问到p指针指向的节点的直接前趋。因此无法删去该节点。(2)双链表。由于这样的链表提供双向指针,根据*p节点的前趋指针和后继指针可以查找到其直接前趋和直接后继,从而可以删除该节点。其时间复杂度为O(1)。(3)单循环链表。根据已知节点位置,可以直接得到其后相邻的节点位置(直接后继),又因为是循环链表,所以我们可以通过查找,得到p节点的直接前趋。因此可以删去p所指节点。其时间复杂度应为O(n)。

9、何时选用顺序表、何时选用链表作为线性表的存储结构为宜?

答:在实际应用中,应根据具体总是的要求和性质来选择顺序表或链表作为线性表的存储结构,通常有以下几方面的考虑:(1)基于空间的考虑。当要求存储的线性表长度变化不大,易于事先确定其大小时,为了节约存储空间,宜采用顺序表;反之,当线性表长度变化大,难以估计其存储规模时,采用动态链表作为存储结构为好。(2)基于时间的考虑。若线性表的操作主要是进行查找,很少做插入和删除操作时,采用顺序表做存储结构为宜;反之,若需要对线性表进行频繁地插入或删除等操作时,宜采用链表做存储结构。并且,若链表的插入和删除主要发生在表的首尾两端,则采用尾指针表示的单扦环链表为宜。

10、简述顺序栈的基本操作过程是什么?

答:(1)先判断栈是否已满,若满,则进行上溢操作,否则进行下一步。(2)栈顶指针上移一个节点。(3)将x加入到top所指位置。

11、简述链栈的特点是什么?

答:(1)链栈是一个不带头节点的单链表(栈顶指针直接指向栈顶元素)。(2)链栈是一个栈,进栈、退栈均在栈顶进行。

12、链栈中为何不设置头节点?

答:链栈不需要在头部附加头节点,因为栈都是在头部进行操作的,如果加了头节点,等于要对头节点之后的节点进行操作,反而使算法更复杂,所以只要有链表的头指针就可以了。

13、简述循环队列空满的条件?

答:计算机系统用牺牲一个空间(f所指空间)的办法来解决当front=rear时,既是循环队列空,又是循环队列满这一矛盾。

循环队列空的条件是:front=rear

满的条件是:front=( rear +1 )%m

14、假设在树中,节点x是节点y的双亲时,用(x ,y)来表示树边,已知一棵树边的集合为{(I,M),(I,N),(E,I),(B,E),(B,D),(A,B),(G,J),(G,K),(C,G),(C,F),(H,L),(C,H),(A,C)}用树形表示法画出此树?

答:根据集合分别将所有的节点进行连接,可以得到如下所示的树:

15、根据题1中树,回答下列问题:

(1)哪个是根节点?A是根节点;

(2)哪些是叶节点?D,M,N,F,J,K,L是叶节点;

(3)哪个是G的双亲?C是G的双亲;

(4)哪些是G的孩子?J,K是G的孩子;

(5)哪些是G的兄弟?哪些是F的兄弟?D是E的兄弟;G,H是F的兄弟;

(6)节点B和N的层次各是多少?B的层次是2;N的层次是5;

(7)树的深度是多少?树的深度是5;

(8)以节点C为根的子树的深度是多少?以C为根的子树深度是3;

(9)树的度数是多少?树的度数是3;

16、试分别画出具有3个节点的树和3个节点的二叉树的所有不同形态?

答:三个节眯的树如下:只有两种形态。

三个节点的二叉树如下所示:有五种形态。

17、假设二叉树包含的节点数据为1,3,7,12。

(1)画出两棵高度最大的二叉树;

(2)画出两棵完全二叉树,要求每个双亲节点的值大于其孩子节点的值。

答:(1)高度最大的两棵二叉树如图:

相关文档
最新文档